diff --git a/.gitignore b/.gitignore index c3dc776..132c29c 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,5 @@ extra/*.dll *.eml -*.msg \ No newline at end of file +*.msg +frontend/bun.lock diff --git a/config.ini b/config.ini index ef8dd93..95ff810 100644 --- a/config.ini +++ b/config.ini @@ -1,7 +1,7 @@ [EMLy] SDK_DECODER_SEMVER = 1.3.2 SDK_DECODER_RELEASE_CHANNEL = stable -GUI_SEMVER = 1.5.0 +GUI_SEMVER = 1.5.2 GUI_RELEASE_CHANNEL = beta LANGUAGE = it UPDATE_CHECK_ENABLED = false diff --git a/frontend/.gitignore b/frontend/.gitignore index 91c0895..ee3de67 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -27,4 +27,8 @@ src/lib/paraglide project.inlang/cache/ # Wails -/src/lib/wailsjs \ No newline at end of file +/src/lib/wailsjs + + +bun.lock +bun.lockb \ No newline at end of file diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 7b4c0a4..407d4a5 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -201,5 +201,19 @@ "settings_danger_update_checker_info": "Info: When enabled, the app will check for updates from your configured network share. Disable this if you manage updates manually or don't have network access.", "settings_reduce_motion_label": "Reduce Motion", "settings_reduce_motion_hint": "Disable transition animations for interface elements like the sidebar.", - "settings_reduce_motion_info": "Info: When enabled, animations such as the sidebar slide transition will be removed for a snappier feel or to reduce visual distractions." + "settings_reduce_motion_info": "Info: When enabled, animations such as the sidebar slide transition will be removed for a snappier feel or to reduce visual distractions.", + "settings_window_buttons_contrast_label": "Increase window buttons contrast", + "settings_window_buttons_contrast_hint": "Makes the window control buttons (minimize, maximize, close) more visible by increasing their contrast.", + "pdf_viewer_title": "PDF Viewer", + "pdf_loading": "Loading PDF...", + "pdf_zoom_in": "Zoom In", + "pdf_zoom_out": "Zoom Out", + "pdf_rotate_left": "Rotate Left", + "pdf_rotate_right": "Rotate Right", + "pdf_fit_width": "Fit to Width", + "pdf_error_no_data": "No PDF data provided", + "pdf_error_no_data_desc": "No PDF data provided. Please open this window from the main EMLy application.", + "pdf_error_timeout": "Timeout loading PDF. The worker might have failed to initialize.", + "pdf_error_parsing": "Error parsing PDF: ", + "pdf_error_rendering": "Error rendering page: " } diff --git a/frontend/messages/it.json b/frontend/messages/it.json index 870899e..eca16be 100644 --- a/frontend/messages/it.json +++ b/frontend/messages/it.json @@ -201,5 +201,19 @@ "settings_danger_update_checker_info": "Info: Quando abilitato, l'app controllerà gli aggiornamenti dal percorso di rete configurato. Disabilitalo se gestisci gli aggiornamenti manualmente o non hai accesso alla rete.", "settings_reduce_motion_label": "Riduci Movimento", "settings_reduce_motion_hint": "Disabilita le animazioni di transizione per gli elementi dell'interfaccia come la barra laterale.", - "settings_reduce_motion_info": "Info: Quando abilitato, le animazioni come la transizione della barra laterale verranno rimosse per un'esperienza più reattiva o per ridurre le distrazioni visive." + "settings_reduce_motion_info": "Info: Quando abilitato, le animazioni come la transizione della barra laterale verranno rimosse per un'esperienza più reattiva o per ridurre le distrazioni visive.", + "settings_window_buttons_contrast_label": "Aumenta contrasto pulsanti finestra", + "settings_window_buttons_contrast_hint": "Rende i pulsanti di controllo della finestra (minimizza, massimizza, chiudi) più visibili aumentando il loro contrasto.", + "pdf_viewer_title": "Visualizzatore PDF", + "pdf_loading": "Caricamento PDF...", + "pdf_zoom_in": "Ingrandisci", + "pdf_zoom_out": "Riduci", + "pdf_rotate_left": "Ruota a sinistra", + "pdf_rotate_right": "Ruota a destra", + "pdf_fit_width": "Adatta alla larghezza", + "pdf_error_no_data": "Nessun dato PDF fornito", + "pdf_error_no_data_desc": "Nessun dato PDF fornito. Apri questa finestra dall'applicazione principale EMLy.", + "pdf_error_timeout": "Timeout caricamento PDF. Il worker potrebbe non essersi inizializzato correttamente.", + "pdf_error_parsing": "Errore nel parsing del PDF: ", + "pdf_error_rendering": "Errore nel rendering della pagina: " } diff --git a/frontend/src/lib/stores/settings.svelte.ts b/frontend/src/lib/stores/settings.svelte.ts index 61e0de9..2535818 100644 --- a/frontend/src/lib/stores/settings.svelte.ts +++ b/frontend/src/lib/stores/settings.svelte.ts @@ -17,6 +17,7 @@ const defaults: EMLy_GUI_Settings = { musicInspirationEnabled: false, reduceMotion: false, theme: "dark", + increaseWindowButtonsContrast: false, }; class SettingsStore { diff --git a/frontend/src/lib/types.d.ts b/frontend/src/lib/types.d.ts index 715d447..3647e29 100644 --- a/frontend/src/lib/types.d.ts +++ b/frontend/src/lib/types.d.ts @@ -13,6 +13,7 @@ interface EMLy_GUI_Settings { musicInspirationEnabled?: boolean; reduceMotion?: boolean; theme?: "light" | "dark"; + increaseWindowButtonsContrast?: boolean; } type SupportedLanguages = "en" | "it"; diff --git a/frontend/src/routes/(app)/+layout.svelte b/frontend/src/routes/(app)/+layout.svelte index 23fa439..8d5e373 100644 --- a/frontend/src/routes/(app)/+layout.svelte +++ b/frontend/src/routes/(app)/+layout.svelte @@ -304,7 +304,7 @@ -
+
@@ -495,7 +537,7 @@ {m.settings_export_button()}
- +
@@ -640,29 +682,6 @@ {m.settings_preview_pdf_builtin_info()}

- - -
-
-
-
- {m.settings_email_dark_viewer_label()} -
-
- {m.settings_email_dark_viewer_hint()} -
-
- -
-

- {m.settings_email_dark_viewer_info()} -

-
diff --git a/frontend/src/routes/pdf/+layout.svelte b/frontend/src/routes/pdf/+layout.svelte index 5a23391..24a79ff 100644 --- a/frontend/src/routes/pdf/+layout.svelte +++ b/frontend/src/routes/pdf/+layout.svelte @@ -7,6 +7,7 @@ Quit, } from "$lib/wailsjs/runtime/runtime"; import type { LayoutProps } from "./$types"; + import { settingsStore } from "$lib/stores/settings.svelte.js"; let { data, children }: LayoutProps = $props(); @@ -57,7 +58,7 @@ >
EMLy PDF Viewer
-
+
-
- -
-
diff --git a/installer/installer.iss b/installer/installer.iss index 7c76759..0b2a027 100644 --- a/installer/installer.iss +++ b/installer/installer.iss @@ -1,6 +1,23 @@ #define ApplicationName 'EMLy' #define ApplicationVersion GetVersionNumbersString('EMLy.exe') -#define ApplicationVersion '1.5.0' +#define ApplicationVersion '1.5.2' + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" + +[CustomMessages] +; English messages +english.UpgradeDetected=A previous version of {#ApplicationName} (v%1) has been detected. +english.UpgradeMessage=This installer will upgrade your installation to version {#ApplicationVersion}.%n%nYour settings and preferences will be preserved.%n%nDo you want to continue? +english.FreshInstall=Welcome to {#ApplicationName} {#ApplicationVersion} Setup +english.FreshInstallMessage=This will install {#ApplicationName} on your computer. + +; Italian messages +italian.UpgradeDetected=È stata rilevata una versione precedente di {#ApplicationName} (v%1). +italian.UpgradeMessage=Questo installer aggiornerà la tua installazione alla versione {#ApplicationVersion}.%n%nLe tue impostazioni e preferenze saranno preservate.%n%nVuoi continuare? +italian.FreshInstall=Benvenuto nell'installazione di {#ApplicationName} {#ApplicationVersion} +italian.FreshInstallMessage=Questo installerà {#ApplicationName} sul tuo computer. [Setup] AppName={#ApplicationName} @@ -59,6 +76,65 @@ Root: HKA; Subkey: "Software\Classes\{#ApplicationName}.MSG\shell\open"; ValueTy Name: "{autoprograms}\{#ApplicationName}"; Filename: "{app}\{#ApplicationName}.exe" [Code] +var + PreviousVersion: String; + IsUpgrade: Boolean; + +// Check if a previous version is installed +function GetPreviousVersion(): String; +var + RegPath: String; + Version: String; +begin + Result := ''; + + // Check HKLM (system-wide installation) + RegPath := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#ApplicationName}_is1'; + if RegQueryStringValue(HKLM, RegPath, 'DisplayVersion', Version) then + begin + Result := Version; + Exit; + end; + + // Check HKCU (user installation) + if RegQueryStringValue(HKCU, RegPath, 'DisplayVersion', Version) then + begin + Result := Version; + Exit; + end; +end; + +// Initialize setup and detect upgrade +function InitializeSetup(): Boolean; +var + Message: String; +begin + Result := True; + PreviousVersion := GetPreviousVersion(); + IsUpgrade := (PreviousVersion <> ''); + + if IsUpgrade then + begin + // Show upgrade message + Message := FmtMessage(CustomMessage('UpgradeDetected'), [PreviousVersion]) + #13#10#13#10 + + CustomMessage('UpgradeMessage'); + + if MsgBox(Message, mbInformation, MB_YESNO) = IDNO then + begin + Result := False; + end; + end; +end; + +// Show appropriate welcome message +procedure InitializeWizard(); +begin + if not IsUpgrade then + begin + WizardForm.WelcomeLabel2.Caption := CustomMessage('FreshInstallMessage'); + end; +end; + // Override default directory based on installation mode function GetDefaultDirName(Param: string): string; begin