heic2jpg

git clone git://archive.git.mtrnord.blog/MTRNord/heic2jpg.git
Log | Files | Refs | README | LICENSE

commit 0e9fb0c4a0d9d7691129d978665c9a384a939c90
parent 0ae0c60ee0a080cc2c0006bf1f1a5770325e702a
Author: MTRNord <mtrnord1@gmail.com>
Date:   Mon, 11 Nov 2024 21:58:01 +0100

Update README instructions, Add a finished notification, fix progress text alignment, add more restart buttons, update translations

Diffstat:
MREADME.md | 2+-
Mbuild-aux/dev.nordgedanken.heic2jpg.Devel.json | 1-
Mdata/dev.nordgedanken.heic2jpg.desktop.in.in | 2++
Mdata/dev.nordgedanken.heic2jpg.metainfo.xml.in.in | 8++++----
Mpo/de.po | 52++++++++++++++++++++++++++++------------------------
Mpo/en.po | 52++++++++++++++++++++++++++++------------------------
Mpo/heic2jpg.pot | 42++++++++++++++++++++++--------------------
Msrc/app.rs | 56+++++++++++++++++++++++++++++++++++++++++++++++---------
Msrc/main.rs | 1+
Msrc/select_folder.rs | 5+++--
10 files changed, 136 insertions(+), 85 deletions(-)

diff --git a/README.md b/README.md @@ -9,7 +9,7 @@ HEIC2JPG is an application to batch convert HEIC images to JPG images. It is pac ## Building the project ```shell -flatpak install --user org.gnome.Sdk//46 org.gnome.Platform//46 org.freedesktop.Sdk.Extension.rust-stable//23.08 org.freedesktop.Sdk.Extension.llvm16//23.08 +flatpak install --user org.gnome.Sdk//47 org.gnome.Platform//47 org.freedesktop.Sdk.Extension.rust-stable//24.08 org.freedesktop.Sdk.Extension.llvm18//24.08 flatpak-builder --user flatpak_app build-aux/dev.nordgedanken.heic2jpg.Devel.json ``` diff --git a/build-aux/dev.nordgedanken.heic2jpg.Devel.json b/build-aux/dev.nordgedanken.heic2jpg.Devel.json @@ -10,7 +10,6 @@ "command": "heic2jpg", "finish-args": [ "--share=ipc", - "--filesystem=host:create", "--socket=fallback-x11", "--socket=wayland", "--device=dri", diff --git a/data/dev.nordgedanken.heic2jpg.desktop.in.in b/data/dev.nordgedanken.heic2jpg.desktop.in.in @@ -10,3 +10,5 @@ Keywords=Gnome;GTK; # TRANSLATORS: Do NOT translate or transliterate this text (this is an icon file name)! Icon=@icon@ StartupNotify=true +DBusActivatable=true +X-GNOME-UsesNotifications=true diff --git a/data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in b/data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in @@ -5,17 +5,17 @@ <metadata_license>CC0</metadata_license> <project_license>AGPL-3.0</project_license> <name>Heic2JPG</name> - <summary>A small app to batch convert heic images to jpg</summary> + <summary>A small app to batch convert heic images to jpg.</summary> <description> - <p>A small app to batch convert heic images to jpg.</p> + <p>A small app to batch convert heic images to jpg from an input folder to an output folder.</p> </description> <categories> <category>Graphics</category> </categories> <screenshots> <screenshot type="default"> - <image xml:lang="en">https://github.com/MTRNord/heic2jpg/raw/main/data/resources/screenshots/screenshot1.png</image> - <caption xml:lang="en">Main window</caption> + <image>https://github.com/MTRNord/heic2jpg/raw/main/data/resources/screenshots/screenshot1.png</image> + <caption>Main window</caption> </screenshot> </screenshots> <url type="homepage">https://github.com/MTRNord/heic2jpg</url> diff --git a/po/de.po b/po/de.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: heic2jpg main\n" "Report-Msgid-Bugs-To: https://github.com/MTRNord/heic2jpg/issues\n" -"POT-Creation-Date: 2024-11-10 14:37+0100\n" -"PO-Revision-Date: 2024-11-10 14:38+0100\n" +"POT-Creation-Date: 2024-11-11 21:54+0100\n" +"PO-Revision-Date: 2024-11-11 21:56+0100\n" "Last-Translator: MTRNord <mtrnord@nordgedanken.dev>\n" "Language-Team: \n" "Language: de_DE\n" @@ -45,13 +45,17 @@ msgid "Window maximized state" msgstr "Fenster Maximierungszustand" #: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:8 -msgid "A small app to batch convert heic images to jpg" -msgstr "Eine kleine Anwendung um viele heic bilder nach jpg umzuwandeln" - -#: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:10 msgid "A small app to batch convert heic images to jpg." msgstr "Eine kleine Anwendung um viele heic bilder nach jpg umzuwandeln." +#: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:10 +msgid "" +"A small app to batch convert heic images to jpg from an input folder to an " +"output folder." +msgstr "" +"Eine kleine Anwendung um viele HEIC Bilder aus einem Ordner nach JPG in " +"einem anderen Ordner umzuwandeln." + #: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:18 msgid "Main window" msgstr "Haupt Fenster" @@ -77,47 +81,47 @@ msgctxt "shortcut window" msgid "Quit" msgstr "Beenden" -#: src/app.rs:104 +#: src/app.rs:108 msgid "Convert Heic to JPG" msgstr "Wandle Heic nach JPG" -#: src/app.rs:117 +#: src/app.rs:122 msgid "Converting" msgstr "Umwandeln" -#: src/app.rs:118 +#: src/app.rs:123 msgid "Please wait while the conversion is in progress" msgstr "Bitte warte während die Umwandlung stattfindet" -#: src/app.rs:129 +#: src/app.rs:152 src/app.rs:373 msgid "Conversion Complete" msgstr "Umwandlung vollständig" -#: src/app.rs:130 +#: src/app.rs:153 src/app.rs:374 msgid "The conversion was successful" msgstr "Die Umwandlung war erfolgreich" -#: src/app.rs:144 +#: src/app.rs:180 msgid "Conversion Failed" msgstr "Umwandlung fehlgeschlagen" -#: src/app.rs:148 +#: src/app.rs:189 msgid "Close" msgstr "Schließen" -#: src/app.rs:173 +#: src/app.rs:221 msgid "Start Conversion" msgstr "Umwandlung beginnen" -#: src/app.rs:174 +#: src/app.rs:222 msgid "Click the button below to start the conversion" msgstr "Drücke den Knopf um die Umwandlung zu beginnen" -#: src/app.rs:181 +#: src/app.rs:229 msgid "Convert" msgstr "Umwandeln" -#: src/app.rs:300 +#: src/app.rs:363 msgid "Please select both input and output folders" msgstr "Bitte wähle sowohl Eingabe- als auch Ausgabe-Ordner aus" @@ -125,22 +129,22 @@ msgstr "Bitte wähle sowohl Eingabe- als auch Ausgabe-Ordner aus" msgid "Select Folder" msgstr "Verzeichnis wählen" -#: src/select_folder.rs:68 -msgid "Abort" -msgstr "Abbrechen" +#: src/select_folder.rs:70 +msgid "Restart" +msgstr "Von vorne beginnen" -#: src/select_folder.rs:84 +#: src/select_folder.rs:87 msgid "Select the folder where the Heic files can be found" msgstr "Wähle einen Ordner in dem sich die Heic Dateien befinden" -#: src/select_folder.rs:85 +#: src/select_folder.rs:88 msgid "Select input directory" msgstr "Wähle das Eingabeverzeichnis" -#: src/select_folder.rs:88 +#: src/select_folder.rs:91 msgid "Select the folder where the JPG files are meant to be saved" msgstr "Wähle einen Ordner in dem die JPG Dateien gespeichert werden sollen" -#: src/select_folder.rs:89 +#: src/select_folder.rs:92 msgid "Select output directory" msgstr "Wähle das Ausgabeverzeichnis" diff --git a/po/en.po b/po/en.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: heic2jpg main\n" "Report-Msgid-Bugs-To: https://github.com/MTRNord/heic2jpg/issues\n" -"POT-Creation-Date: 2024-11-10 14:59+0100\n" -"PO-Revision-Date: 2024-11-10 14:59+0100\n" +"POT-Creation-Date: 2024-11-11 21:54+0100\n" +"PO-Revision-Date: 2024-11-11 21:55+0100\n" "Last-Translator: MTRNord <mtrnord@nordgedanken.dev>\n" "Language-Team: \n" "Language: en\n" @@ -45,13 +45,17 @@ msgid "Window maximized state" msgstr "Window maximized state" #: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:8 -msgid "A small app to batch convert heic images to jpg" -msgstr "A small app to batch convert heic images to jpg" - -#: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:10 msgid "A small app to batch convert heic images to jpg." msgstr "A small app to batch convert heic images to jpg." +#: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:10 +msgid "" +"A small app to batch convert heic images to jpg from an input folder to an " +"output folder." +msgstr "" +"A small app to batch convert heic images to jpg from an input folder to an " +"output folder." + #: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:18 msgid "Main window" msgstr "Main window" @@ -77,47 +81,47 @@ msgctxt "shortcut window" msgid "Quit" msgstr "Quit" -#: src/app.rs:104 +#: src/app.rs:108 msgid "Convert Heic to JPG" msgstr "Convert Heic to JPG" -#: src/app.rs:117 +#: src/app.rs:122 msgid "Converting" msgstr "Converting" -#: src/app.rs:118 +#: src/app.rs:123 msgid "Please wait while the conversion is in progress" msgstr "Please wait while the conversion is in progress" -#: src/app.rs:130 +#: src/app.rs:152 src/app.rs:373 msgid "Conversion Complete" msgstr "Conversion Complete" -#: src/app.rs:131 +#: src/app.rs:153 src/app.rs:374 msgid "The conversion was successful" msgstr "The conversion was successful" -#: src/app.rs:145 +#: src/app.rs:180 msgid "Conversion Failed" msgstr "Conversion Failed" -#: src/app.rs:150 +#: src/app.rs:189 msgid "Close" msgstr "Close" -#: src/app.rs:175 +#: src/app.rs:221 msgid "Start Conversion" msgstr "Start Conversion" -#: src/app.rs:176 +#: src/app.rs:222 msgid "Click the button below to start the conversion" msgstr "Click the button below to start the conversion" -#: src/app.rs:183 +#: src/app.rs:229 msgid "Convert" msgstr "Convert" -#: src/app.rs:302 +#: src/app.rs:363 msgid "Please select both input and output folders" msgstr "Please select both input and output folders" @@ -125,22 +129,22 @@ msgstr "Please select both input and output folders" msgid "Select Folder" msgstr "Select Folder" -#: src/select_folder.rs:68 -msgid "Abort" -msgstr "Abort" +#: src/select_folder.rs:70 +msgid "Restart" +msgstr "Restart" -#: src/select_folder.rs:84 +#: src/select_folder.rs:87 msgid "Select the folder where the Heic files can be found" msgstr "Select the folder where the Heic files can be found" -#: src/select_folder.rs:85 +#: src/select_folder.rs:88 msgid "Select input directory" msgstr "Select input directory" -#: src/select_folder.rs:88 +#: src/select_folder.rs:91 msgid "Select the folder where the JPG files are meant to be saved" msgstr "Select the folder where the JPG files are meant to be saved" -#: src/select_folder.rs:89 +#: src/select_folder.rs:92 msgid "Select output directory" msgstr "Select output directory" diff --git a/po/heic2jpg.pot b/po/heic2jpg.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: heic2jpg main\n" "Report-Msgid-Bugs-To: https://github.com/MTRNord/heic2jpg/issues\n" -"POT-Creation-Date: 2024-11-10 14:59+0100\n" +"POT-Creation-Date: 2024-11-11 21:54+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -43,11 +43,13 @@ msgid "Window maximized state" msgstr "" #: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:8 -msgid "A small app to batch convert heic images to jpg" +msgid "A small app to batch convert heic images to jpg." msgstr "" #: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:10 -msgid "A small app to batch convert heic images to jpg." +msgid "" +"A small app to batch convert heic images to jpg from an input folder to an " +"output folder." msgstr "" #: data/dev.nordgedanken.heic2jpg.metainfo.xml.in.in:18 @@ -75,47 +77,47 @@ msgctxt "shortcut window" msgid "Quit" msgstr "" -#: src/app.rs:104 +#: src/app.rs:108 msgid "Convert Heic to JPG" msgstr "" -#: src/app.rs:117 +#: src/app.rs:122 msgid "Converting" msgstr "" -#: src/app.rs:118 +#: src/app.rs:123 msgid "Please wait while the conversion is in progress" msgstr "" -#: src/app.rs:130 +#: src/app.rs:152 src/app.rs:373 msgid "Conversion Complete" msgstr "" -#: src/app.rs:131 +#: src/app.rs:153 src/app.rs:374 msgid "The conversion was successful" msgstr "" -#: src/app.rs:145 +#: src/app.rs:180 msgid "Conversion Failed" msgstr "" -#: src/app.rs:150 +#: src/app.rs:189 msgid "Close" msgstr "" -#: src/app.rs:175 +#: src/app.rs:221 msgid "Start Conversion" msgstr "" -#: src/app.rs:176 +#: src/app.rs:222 msgid "Click the button below to start the conversion" msgstr "" -#: src/app.rs:183 +#: src/app.rs:229 msgid "Convert" msgstr "" -#: src/app.rs:302 +#: src/app.rs:363 msgid "Please select both input and output folders" msgstr "" @@ -123,22 +125,22 @@ msgstr "" msgid "Select Folder" msgstr "" -#: src/select_folder.rs:68 -msgid "Abort" +#: src/select_folder.rs:70 +msgid "Restart" msgstr "" -#: src/select_folder.rs:84 +#: src/select_folder.rs:87 msgid "Select the folder where the Heic files can be found" msgstr "" -#: src/select_folder.rs:85 +#: src/select_folder.rs:88 msgid "Select input directory" msgstr "" -#: src/select_folder.rs:88 +#: src/select_folder.rs:91 msgid "Select the folder where the JPG files are meant to be saved" msgstr "" -#: src/select_folder.rs:89 +#: src/select_folder.rs:92 msgid "Select output directory" msgstr "" diff --git a/src/app.rs b/src/app.rs @@ -5,10 +5,11 @@ use crate::select_folder::{InOut, SelectFolder, SelectFolderOut}; use gettextrs::gettext; use gtk::prelude::*; use gtk::{gio, glib}; +use relm4::SimpleComponent; use relm4::{ actions::{RelmAction, RelmActionGroup}, adw, gtk, main_application, Component, ComponentController, ComponentParts, ComponentSender, - Controller, SimpleComponent, WorkerController, + Controller, WorkerController, }; use std::path::PathBuf; @@ -45,6 +46,7 @@ pub(super) enum AppMsg { ProgressUpdate(f64), ConversionComplete, ConversionFailed(String), + StartOver, Quit, Noop, } @@ -72,8 +74,10 @@ impl SimpleComponent for App { } view! { + #[root] main_window = adw::ApplicationWindow::new(&main_application()) { set_visible: true, + set_resizable: true, connect_close_request[sender] => move |_| { sender.input(AppMsg::Quit); @@ -120,22 +124,23 @@ impl SimpleComponent for App { gtk::Box { set_halign: gtk::Align::Center, set_orientation: gtk::Orientation::Vertical, - set_spacing: 24, - gtk::ProgressBar { - #[watch] - set_fraction: model.progress, - }, + set_spacing: 8, - gtk::Text { - set_halign: gtk::Align::Center, + gtk::Label { + set_xalign: 0.5, #[watch] set_visible: model.file_count > 0, #[watch] - set_text: &format!( + set_label: &format!( "{} / {}", model.file_count as u32 * model.progress as u32, model.file_count ), + }, + gtk::ProgressBar { + set_hexpand: true, + #[watch] + set_fraction: model.progress, } } } @@ -158,6 +163,12 @@ impl SimpleComponent for App { connect_clicked[sender] => move |_| { sender.input(AppMsg::Quit); } + }, + gtk::Button { + set_label: "Restart", + connect_clicked[sender] => move |_| { + sender.input(AppMsg::StartOver); + } } } } @@ -179,6 +190,12 @@ impl SimpleComponent for App { connect_clicked[sender] => move |_| { sender.input(AppMsg::Quit); } + }, + gtk::Button { + set_label: "Restart", + connect_clicked[sender] => move |_| { + sender.input(AppMsg::StartOver); + } } } } @@ -215,6 +232,12 @@ impl SimpleComponent for App { connect_clicked[sender] => move |_| { sender.input(AppMsg::Convert); } + }, + gtk::Button { + set_label: "Restart", + connect_clicked[sender] => move |_| { + sender.input(AppMsg::StartOver); + } } } } @@ -347,11 +370,26 @@ impl SimpleComponent for App { } AppMsg::ConversionComplete => { self.mode = Mode::Finished; + let notification = gio::Notification::new(&gettext("Conversion Complete")); + notification.set_body(Some(&gettext("The conversion was successful"))); + notification.set_category(Some("transfer.complete")); + notification.set_priority(gio::NotificationPriority::Normal); + + let app = relm4::main_application(); + app.send_notification(None, &notification); } AppMsg::ConversionFailed(e) => { self.mode = Mode::Failed; self.failure = Some(e); } + AppMsg::StartOver => { + self.input_folder = None; + self.output_folder = None; + self.progress = 0.0; + self.failure = None; + self.file_count = 0; + self.mode = Mode::InputSelection; + } AppMsg::Noop => {} } } diff --git a/src/main.rs b/src/main.rs @@ -49,6 +49,7 @@ fn main() { gtk::Window::set_default_icon_name(APP_ID); let app = main_application(); + app.set_application_id(Some(APP_ID)); app.set_resource_base_path(Some("/dev/nordgedanken/heic2jpg/")); let mut actions = RelmActionGroup::<AppActionGroup>::new(); diff --git a/src/select_folder.rs b/src/select_folder.rs @@ -63,11 +63,12 @@ impl SimpleComponent for SelectFolder { } }, - // If this is the output folder selector, add an Abort button + // If this is the output folder selector, add an Restart button gtk::Button { set_visible: model.direction == InOut::Output, set_halign: gtk::Align::Center, - set_label: &gettext("Abort"), + set_label: &gettext("Restart"), + add_css_class: "destructive-action", connect_clicked[sender] => move |_| { let _ = sender.output(SelectFolderOut::AbortLast); }