diff --git a/crates/pdfs-core/src/config.rs b/crates/pdfs-core/src/config.rs index 4064fcc..df8ad87 100644 --- a/crates/pdfs-core/src/config.rs +++ b/crates/pdfs-core/src/config.rs @@ -224,6 +224,10 @@ pub struct FilesView { pub descending: bool, /// Folders ahead of files, whatever the sort. pub folders_first: bool, + /// The icon grid's thumbnail edge in logical pixels. `None` means the + /// app's default. + #[serde(skip_serializing_if = "Option::is_none")] + pub icon_size: Option, } impl Default for FilesView { @@ -233,6 +237,7 @@ impl Default for FilesView { sort: FileSort::Name, descending: false, folders_first: true, + icon_size: None, } } } @@ -777,6 +782,7 @@ mod tests { sort: FileSort::Modified, descending: true, folders_first: false, + icon_size: Some(192), }, photos_view: PhotosView { row_height: Some(240), @@ -856,6 +862,7 @@ mod tests { let partial: FilesView = serde_json::from_str(r#"{"sort":"size"}"#).unwrap(); assert_eq!(partial.sort, FileSort::Size); assert!(partial.folders_first); + assert_eq!(partial.icon_size, None); } #[test] diff --git a/crates/pdfs-gui/resources/style.css b/crates/pdfs-gui/resources/style.css index af7b2f2..16ade45 100644 --- a/crates/pdfs-gui/resources/style.css +++ b/crates/pdfs-gui/resources/style.css @@ -53,7 +53,7 @@ button.sidebar-account { padding: 4px 8px; font-weight: normal; } /* The folder on screen, last in the breadcrumb trail: a flat button's side * padding, so the "›" before it is spaced like the ones between buttons. */ .crumb-current { padding: 0 10px; } -scale.browser-status-meter trough { min-width: 104px; min-height: 6px; } +scale.browser-status-meter trough { min-width: 140px; min-height: 6px; } .bulk-bar { padding: 6px 8px; border-radius: 12px; background: color-mix(in srgb, var(--accent-bg-color) 12%, transparent); } .dropzone { border: 2px dashed alpha(currentColor, 0.25); border-radius: 16px; padding: 28px 18px; transition: background 160ms ease, border-color 160ms ease; } .dropzone-active { border-color: var(--accent-bg-color); background: color-mix(in srgb, var(--accent-bg-color) 10%, transparent); } diff --git a/crates/pdfs-gui/src/app/main.rs b/crates/pdfs-gui/src/app/main.rs index a416ee4..1678368 100644 --- a/crates/pdfs-gui/src/app/main.rs +++ b/crates/pdfs-gui/src/app/main.rs @@ -488,6 +488,7 @@ fn build_window(app: &adw::Application) { empty_actions: browser_widgets.empty_actions.clone(), summary: browser_widgets.summary.clone(), zoom: browser_widgets.zoom.clone(), + zoom_save: RefCell::new(None), }, details: DetailsState { details: browser_widgets.details, @@ -1523,6 +1524,9 @@ fn show_shortcuts(window: &adw::ApplicationWindow) { ("Left Right", gettext_noop("Back / forward")), ("Up", gettext_noop("Parent folder")), ("1 2", gettext_noop("Grid / list")), + ("plus", gettext_noop("Larger thumbnails")), + ("minus", gettext_noop("Smaller thumbnails")), + ("0", gettext_noop("Reset thumbnail size")), ("F2", gettext_noop("Rename")), ("Delete", gettext_noop("Move to Trash")), ("Escape", gettext_noop("Clear the selection")), @@ -1588,6 +1592,21 @@ fn install_shortcuts(ui: &Rc, window: &adw::ApplicationWindow) { ui.browser.search.grab_focus(); } gtk4::gdk::Key::n | gtk4::gdk::Key::N if ctrl && on_browser => prompt_new_folder(&ui), + gtk4::gdk::Key::plus | gtk4::gdk::Key::equal | gtk4::gdk::Key::KP_Add + if ctrl && on_browser && !ui.browser.files.shows_list() => + { + zoom_files(&ui, 1) + } + gtk4::gdk::Key::minus | gtk4::gdk::Key::KP_Subtract + if ctrl && on_browser && !ui.browser.files.shows_list() => + { + zoom_files(&ui, -1) + } + gtk4::gdk::Key::_0 | gtk4::gdk::Key::KP_0 + if ctrl && on_browser && !ui.browser.files.shows_list() => + { + zoom_files(&ui, 0) + } gtk4::gdk::Key::_1 | gtk4::gdk::Key::_2 if ctrl && on_browser => set_files_view( &ui, FilesView { diff --git a/crates/pdfs-gui/src/app/pages/browser.rs b/crates/pdfs-gui/src/app/pages/browser.rs index 59ded50..2932916 100644 --- a/crates/pdfs-gui/src/app/pages/browser.rs +++ b/crates/pdfs-gui/src/app/pages/browser.rs @@ -77,6 +77,8 @@ pub(crate) struct BrowserState { /// zoom value, and Proton account storage usage. pub(crate) summary: gtk4::Label, pub(crate) zoom: gtk4::Scale, + /// Saves the zoom once the slider rests, not on every step. + pub(crate) zoom_save: RefCell>, } /// Idle pause after the last keystroke before a search query is sent, so typing @@ -87,9 +89,11 @@ pub(crate) const SEARCH_DEBOUNCE: Duration = Duration::from_millis(250); pub(crate) const SEARCH_LIMIT: usize = 200; /// Browser grid thumbnail size controlled by the bottom zoom slider. The -/// default preserves the former fixed 72 px presentation. +/// default preserves the former fixed 72 px presentation. The largest size is +/// big enough to tell photos apart by their thumbnail, and thumbnails are +/// 512 px, so they stay sharp up to it on a 2× screen. pub(crate) const GRID_THUMB_MIN: i32 = 48; -pub(crate) const GRID_THUMB_MAX: i32 = 144; +pub(crate) const GRID_THUMB_MAX: i32 = 256; pub(crate) const GRID_THUMB_DEFAULT: i32 = 72; pub(crate) const GRID_THUMB_STEP: i32 = 8; @@ -801,6 +805,7 @@ pub(crate) fn wire_browser(ui: &Rc) { &[], ))); ui_zoom.browser.files.set_thumbnail_size(size); + save_icon_size(&ui_zoom, size); }); files @@ -1306,6 +1311,11 @@ pub(crate) fn wire_browser_actions(ui: &Rc, build_thumbnails: >k4::Button) let view = ui.dirs.load_config().files_view; ui.browser.view.set(view); + if let Some(size) = view.icon_size { + ui.browser + .zoom + .set_value(f64::from(size.clamp(GRID_THUMB_MIN, GRID_THUMB_MAX))); + } let layout = gio::SimpleAction::new_stateful( "view", Some(glib::VariantTy::STRING), @@ -1407,6 +1417,41 @@ pub(crate) fn wire_browser_actions(ui: &Rc, build_thumbnails: >k4::Button) ui.browser.content.add_controller(drop); } +/// Remember the grid's icon size, once the slider has rested for a moment. +fn save_icon_size(ui: &Rc, size: i32) { + let mut view = ui.browser.view.get(); + if view.icon_size == Some(size) { + return; + } + view.icon_size = Some(size); + ui.browser.view.set(view); + if let Some(source) = ui.browser.zoom_save.borrow_mut().take() { + source.remove(); + } + let ui_save = ui.clone(); + let source = glib::timeout_add_local_once(Duration::from_millis(500), move || { + ui_save.browser.zoom_save.borrow_mut().take(); + let mut config = ui_save.dirs.load_config(); + config.files_view.icon_size = ui_save.browser.view.get().icon_size; + if let Err(e) = ui_save.dirs.save_config(&config) { + tracing::warn!("cannot save the icon size: {e}"); + } + }); + *ui.browser.zoom_save.borrow_mut() = Some(source); +} + +/// Step the grid's icon size by `steps` slider notches; `0` resets it. +pub(crate) fn zoom_files(ui: &Rc, steps: i32) { + let zoom = &ui.browser.zoom; + let size = if steps == 0 { + GRID_THUMB_DEFAULT + } else { + (zoom.value().round() as i32 + steps * GRID_THUMB_STEP) + .clamp(GRID_THUMB_MIN, GRID_THUMB_MAX) + }; + zoom.set_value(f64::from(size)); +} + fn layout_name(view: FilesView) -> &'static str { if view.list { "list" } else { "grid" } } diff --git a/crates/pdfs-gui/src/app/widgets/file_list.rs b/crates/pdfs-gui/src/app/widgets/file_list.rs index dac98cf..06d2d46 100644 --- a/crates/pdfs-gui/src/app/widgets/file_list.rs +++ b/crates/pdfs-gui/src/app/widgets/file_list.rs @@ -478,7 +478,7 @@ pub(crate) fn text_column( fn resize_grid_tile(thumbnail: >k4::Overlay, label: >k4::Label, size: i32) { resize_file_thumbnail(thumbnail, size, grid_fallback_size(size)); - let name_width = (size / 6 + 1).clamp(8, 24); + let name_width = (size / 6 + 1).clamp(8, 40); label.set_width_chars(name_width); label.set_max_width_chars(name_width); } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index be0a3b7..53aec14 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -61,6 +61,9 @@ Existing folders remain device backups; older builds cannot open the upgraded da - The zoom level and the tile shape are remembered between runs. - In the photo viewer, the details panel lies over the photo when the window is narrow instead of squeezing it. +- **Larger icons in My files.** The icon size slider goes up to 256 px, big enough to + tell photos apart by their thumbnail. Ctrl+plus, Ctrl+minus and Ctrl+0 change it from + the keyboard, and the size is remembered between runs. ### Fixed diff --git a/po/de.po b/po/de.po index 1ba5634..e72ce10 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-11-14 02:34+0100\n" +"POT-Creation-Date: 2026-11-14 02:47+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -31,7 +31,7 @@ msgstr[1] "vor {n} Min." #. Translators: strftime format for the time a photo was taken, shown on its tile, such as "14:05". #: crates/pdfs-gui/src/app/dates.rs:44 #: crates/pdfs-gui/src/app/pages/activity.rs:840 -#: crates/pdfs-gui/src/app/pages/photos.rs:3533 +#: crates/pdfs-gui/src/app/pages/photos.rs:3534 msgid "%H:%M" msgstr "%H:%M" @@ -57,87 +57,87 @@ msgstr "%-d. %b %Y" msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A, %-d. %B %Y, %H:%M" -#: crates/pdfs-gui/src/app/main.rs:864 +#: crates/pdfs-gui/src/app/main.rs:865 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 -#: crates/pdfs-gui/src/app/pages/browser.rs:454 -#: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1249 -#: crates/pdfs-gui/src/app/pages/browser.rs:2168 -#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/browser.rs:458 +#: crates/pdfs-gui/src/app/pages/browser.rs:838 +#: crates/pdfs-gui/src/app/pages/browser.rs:1254 +#: crates/pdfs-gui/src/app/pages/browser.rs:2213 +#: crates/pdfs-gui/src/app/pages/browser.rs:2292 #: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" msgstr "Meine Dateien" -#: crates/pdfs-gui/src/app/main.rs:865 crates/pdfs-gui/src/app/main.rs:1532 +#: crates/pdfs-gui/src/app/main.rs:866 crates/pdfs-gui/src/app/main.rs:1536 #: crates/pdfs-gui/src/app/pages/albums.rs:636 #: crates/pdfs-gui/src/app/pages/photos.rs:898 #: crates/pdfs-gui/src/app/pages/places.rs:439 msgid "Photos" msgstr "Fotos" -#: crates/pdfs-gui/src/app/main.rs:868 +#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:484 msgid "Shared with me" msgstr "Mit mir geteilt" -#: crates/pdfs-gui/src/app/main.rs:873 +#: crates/pdfs-gui/src/app/main.rs:874 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 msgid "Shared by me" msgstr "Von mir geteilt" -#: crates/pdfs-gui/src/app/main.rs:876 +#: crates/pdfs-gui/src/app/main.rs:877 #: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:493 msgid "Computers" msgstr "Computer" -#: crates/pdfs-gui/src/app/main.rs:877 +#: crates/pdfs-gui/src/app/main.rs:878 #: crates/pdfs-gui/src/app/pages/trash.rs:101 msgid "Trash" msgstr "Papierkorb" #. Translators: sidebar entry for the page listing this computer's synced folders. -#: crates/pdfs-gui/src/app/main.rs:879 +#: crates/pdfs-gui/src/app/main.rs:880 msgid "Sync" msgstr "Synchronisierung" #. Translators: a failed action's toast. {what} says what failed, such as #. "Couldn't rename"; {detail} is the reason, usually untranslated text #. from the mount service. -#: crates/pdfs-gui/src/app/main.rs:1229 +#: crates/pdfs-gui/src/app/main.rs:1230 #: crates/pdfs-gui/src/app/pages/takeout.rs:714 #, rust-format msgid "{what}: {detail}" msgstr "{what}: {detail}" -#: crates/pdfs-gui/src/app/main.rs:1252 +#: crates/pdfs-gui/src/app/main.rs:1253 msgid "You're offline" msgstr "Keine Internetverbindung" -#: crates/pdfs-gui/src/app/main.rs:1253 +#: crates/pdfs-gui/src/app/main.rs:1254 msgid "That's not there any more" msgstr "Das ist nicht mehr vorhanden" -#: crates/pdfs-gui/src/app/main.rs:1254 +#: crates/pdfs-gui/src/app/main.rs:1255 msgid "You don't have access to that" msgstr "Kein Zugriff darauf" -#: crates/pdfs-gui/src/app/main.rs:1255 +#: crates/pdfs-gui/src/app/main.rs:1256 msgid "Something changed this first" msgstr "Etwas anderes hat dies zuerst geändert" -#: crates/pdfs-gui/src/app/main.rs:1256 +#: crates/pdfs-gui/src/app/main.rs:1257 msgid "Your Proton Drive is full" msgstr "Das Proton Drive ist voll" -#: crates/pdfs-gui/src/app/main.rs:1343 +#: crates/pdfs-gui/src/app/main.rs:1344 msgid "Proton Drive for Linux" msgstr "Proton Drive for Linux" -#: crates/pdfs-gui/src/app/main.rs:1351 +#: crates/pdfs-gui/src/app/main.rs:1352 msgid "" "Files-on-demand Proton Drive for the Linux desktop.\n" "\n" @@ -149,23 +149,23 @@ msgstr "" "Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG " "unterstützt oder befürwortet." -#: crates/pdfs-gui/src/app/main.rs:1356 +#: crates/pdfs-gui/src/app/main.rs:1357 msgid "Source Code" msgstr "Quellcode" -#: crates/pdfs-gui/src/app/main.rs:1360 +#: crates/pdfs-gui/src/app/main.rs:1361 msgid "Proton Terms of Service" msgstr "Nutzungsbedingungen von Proton" -#: crates/pdfs-gui/src/app/main.rs:1364 +#: crates/pdfs-gui/src/app/main.rs:1365 msgid "Proton Privacy Policy" msgstr "Datenschutzerklärung von Proton" -#: crates/pdfs-gui/src/app/main.rs:1369 +#: crates/pdfs-gui/src/app/main.rs:1370 msgid "Disclaimer" msgstr "Haftungsausschluss" -#: crates/pdfs-gui/src/app/main.rs:1373 +#: crates/pdfs-gui/src/app/main.rs:1374 msgid "" "This is an unofficial, community-built client. It is not affiliated with, " "endorsed by, or supported by Proton AG.\n" @@ -190,7 +190,7 @@ msgstr "" "bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten " "zusätzlich gesichert werden." -#: crates/pdfs-gui/src/app/main.rs:1381 +#: crates/pdfs-gui/src/app/main.rs:1382 msgid "" "Places are named with data from GeoNames, licensed under GeoNames, lizenziert unter CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -210,7 +210,7 @@ msgstr "" "href=\"https://www.naturalearthdata.com/\">Natural Earth gezeichnet, die " "gemeinfrei sind." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, licensed under CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -207,7 +207,7 @@ msgstr "" "\">Natural Earth land outlines and country borders, which are in the " "public domain." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, con licencia CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -208,7 +208,7 @@ msgstr "" "fronteras de países de Natural " "Earth, que son de dominio público." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, sous licence CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -209,7 +209,7 @@ msgstr "" "frontières des pays de Natural " "Earth, qui sont dans le domaine public." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, con licenza CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -207,7 +207,7 @@ msgstr "" "confini nazionali di Natural " "Earth, che sono di pubblico dominio." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, gelicentieerd onder CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -208,7 +208,7 @@ msgstr "" "href=\"https://www.naturalearthdata.com/\">Natural Earth, die in het " "publieke domein vallen." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the \n" "Language-Team: LANGUAGE \n" @@ -34,7 +34,7 @@ msgstr[1] "" #. Translators: strftime format for the time a photo was taken, shown on its tile, such as "14:05". #: crates/pdfs-gui/src/app/dates.rs:44 #: crates/pdfs-gui/src/app/pages/activity.rs:840 -#: crates/pdfs-gui/src/app/pages/photos.rs:3533 +#: crates/pdfs-gui/src/app/pages/photos.rs:3534 msgid "%H:%M" msgstr "" @@ -60,87 +60,87 @@ msgstr "" msgid "%A, %B %-d, %Y, %H:%M" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:864 +#: crates/pdfs-gui/src/app/main.rs:865 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 -#: crates/pdfs-gui/src/app/pages/browser.rs:454 -#: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1249 -#: crates/pdfs-gui/src/app/pages/browser.rs:2168 -#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/browser.rs:458 +#: crates/pdfs-gui/src/app/pages/browser.rs:838 +#: crates/pdfs-gui/src/app/pages/browser.rs:1254 +#: crates/pdfs-gui/src/app/pages/browser.rs:2213 +#: crates/pdfs-gui/src/app/pages/browser.rs:2292 #: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:865 crates/pdfs-gui/src/app/main.rs:1532 +#: crates/pdfs-gui/src/app/main.rs:866 crates/pdfs-gui/src/app/main.rs:1536 #: crates/pdfs-gui/src/app/pages/albums.rs:636 #: crates/pdfs-gui/src/app/pages/photos.rs:898 #: crates/pdfs-gui/src/app/pages/places.rs:439 msgid "Photos" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:868 +#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:484 msgid "Shared with me" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:873 +#: crates/pdfs-gui/src/app/main.rs:874 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 msgid "Shared by me" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:876 +#: crates/pdfs-gui/src/app/main.rs:877 #: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:493 msgid "Computers" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:877 +#: crates/pdfs-gui/src/app/main.rs:878 #: crates/pdfs-gui/src/app/pages/trash.rs:101 msgid "Trash" msgstr "" #. Translators: sidebar entry for the page listing this computer's synced folders. -#: crates/pdfs-gui/src/app/main.rs:879 +#: crates/pdfs-gui/src/app/main.rs:880 msgid "Sync" msgstr "" #. Translators: a failed action's toast. {what} says what failed, such as #. "Couldn't rename"; {detail} is the reason, usually untranslated text #. from the mount service. -#: crates/pdfs-gui/src/app/main.rs:1229 +#: crates/pdfs-gui/src/app/main.rs:1230 #: crates/pdfs-gui/src/app/pages/takeout.rs:714 #, rust-format msgid "{what}: {detail}" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1252 +#: crates/pdfs-gui/src/app/main.rs:1253 msgid "You're offline" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1253 +#: crates/pdfs-gui/src/app/main.rs:1254 msgid "That's not there any more" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1254 +#: crates/pdfs-gui/src/app/main.rs:1255 msgid "You don't have access to that" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1255 +#: crates/pdfs-gui/src/app/main.rs:1256 msgid "Something changed this first" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1256 +#: crates/pdfs-gui/src/app/main.rs:1257 msgid "Your Proton Drive is full" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1343 +#: crates/pdfs-gui/src/app/main.rs:1344 msgid "Proton Drive for Linux" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1351 +#: crates/pdfs-gui/src/app/main.rs:1352 msgid "" "Files-on-demand Proton Drive for the Linux desktop.\n" "\n" @@ -148,23 +148,23 @@ msgid "" "AG." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1356 +#: crates/pdfs-gui/src/app/main.rs:1357 msgid "Source Code" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1360 +#: crates/pdfs-gui/src/app/main.rs:1361 msgid "Proton Terms of Service" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1364 +#: crates/pdfs-gui/src/app/main.rs:1365 msgid "Proton Privacy Policy" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1369 +#: crates/pdfs-gui/src/app/main.rs:1370 msgid "Disclaimer" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1373 +#: crates/pdfs-gui/src/app/main.rs:1374 msgid "" "This is an unofficial, community-built client. It is not affiliated with, " "endorsed by, or supported by Proton AG.\n" @@ -177,21 +177,21 @@ msgid "" "of any data you cannot afford to lose." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1381 +#: crates/pdfs-gui/src/app/main.rs:1382 msgid "" "Places are named with data from GeoNames, licensed under CC BY 4.0." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " "public domain." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames udostępnionych na licencji CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -211,7 +211,7 @@ msgstr "" "www.naturalearthdata.com/\">Natural Earth, które należą do domeny " "publicznej." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, licenciados sob CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -207,7 +207,7 @@ msgstr "" "fronteiras de países do Natural Earth, que são de domínio público." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the