diff --git a/crates/pdfs-cli/src/main.rs b/crates/pdfs-cli/src/main.rs index 845e211..d40b616 100644 --- a/crates/pdfs-cli/src/main.rs +++ b/crates/pdfs-cli/src/main.rs @@ -709,6 +709,13 @@ enum SyncCmd { /// Optional synced-folder id; omit to reconcile every folder. id: Option, }, + /// Forget what a synced folder synced before and compare it with Proton + /// Drive afresh: what one side has alone is copied to the other, and a file + /// that differs keeps both versions. Nothing is deleted. + Reset { + /// Synced-folder id (from `sync list`). + id: i64, + }, /// Pause syncing: queued uploads and mirror folders wait, reads keep working. Pause { /// End the pause by itself after this long, e.g. `30m`, `1h`, `2d`. @@ -1165,6 +1172,7 @@ fn cmd_sync(action: SyncCmd) -> Result<()> { })?)? } SyncCmd::Now { id } => ok_or_bail(control_request(CtlRequest::SyncNow { id })?)?, + SyncCmd::Reset { id } => ok_or_bail(control_request(CtlRequest::ResetSyncFolder { id })?)?, SyncCmd::Pause { folder: Some(id), .. } => ok_or_bail(control_request(CtlRequest::SetSyncFolderPaused { diff --git a/crates/pdfs-core/src/control.rs b/crates/pdfs-core/src/control.rs index 0e17bd3..c111146 100644 --- a/crates/pdfs-core/src/control.rs +++ b/crates/pdfs-core/src/control.rs @@ -480,6 +480,11 @@ pub enum Request { /// Pause or resume one mirror folder's reconcile, independent of the /// global pause. Persisted until resumed. Replies with [`Response::Ok`]. SetSyncFolderPaused { id: i64, paused: bool }, + /// Forget what a mirror folder synced before, so its next pass compares + /// both sides afresh: what is on one side only is copied to the other, and + /// a file that differs keeps both versions. Nothing is deleted. Replies + /// with [`Response::Ok`]. + ResetSyncFolder { id: i64 }, /// Force a reconcile pass: one folder by id, or all when `id` is `None`. /// Replies with [`Response::Ok`]. SyncNow { id: Option }, @@ -3209,6 +3214,7 @@ mod tests { id: 3, paused: true, }, + Request::ResetSyncFolder { id: 3 }, Request::SetBandwidthLimits { upload: 1_000_000, download: 0, diff --git a/crates/pdfs-fuse/src/control.rs b/crates/pdfs-fuse/src/control.rs index 0d8604f..ea23938 100644 --- a/crates/pdfs-fuse/src/control.rs +++ b/crates/pdfs-fuse/src/control.rs @@ -388,6 +388,7 @@ fn touched_topics(request: &CtlRequest) -> &'static [Topic] { | R::RemoveSyncFolder { .. } | R::SetSyncFolderMode { .. } | R::SetSyncFolderPaused { .. } + | R::ResetSyncFolder { .. } | R::RestoreSyncFolders { .. } | R::RestoreDeviceFolders { .. } => &[Topic::Locations, Topic::Devices], R::RetryPendingOp { .. } => &[Topic::Queue], @@ -1432,6 +1433,13 @@ fn handle_control_conn(core: &Core, username: &str, mountpoint: &Path, stream: U Err(e) => CtlResponse::error(e), } } + Ok(CtlRequest::ResetSyncFolder { id }) => match core.reset_sync_folder(id) { + Ok(message) => { + core.log_activity(ActivityKind::Sync, &message, "", true); + CtlResponse::Ok { message } + } + Err(e) => CtlResponse::error(e), + }, Ok(CtlRequest::SyncNow { id }) => { core.sync_now(id); CtlResponse::Ok { diff --git a/crates/pdfs-fuse/src/devices.rs b/crates/pdfs-fuse/src/devices.rs index 72560b7..b278be6 100644 --- a/crates/pdfs-fuse/src/devices.rs +++ b/crates/pdfs-fuse/src/devices.rs @@ -1080,6 +1080,50 @@ impl Core { } } + /// Forget what a mirror folder synced before, so its next pass compares the + /// two sides as on the first sync: what one side has alone is copied to the + /// other, and a file that differs is kept twice as a conflict. Nothing is + /// deleted on either side. + /// + /// This is the way out for a folder whose passes refuse to run because its + /// whole local copy, or its whole copy on Drive, is gone (#46). The baseline + /// is what makes that read as "delete everything", and it is what this + /// drops. A queued switch to on-demand is dropped with it: the push pass + /// that switch runs reads an unrecorded local file as new and would upload + /// a second copy of every file Drive already has. + pub(crate) fn reset_sync_folder(&self, id: i64) -> CoreResult { + let lock = self.sync_lock(id); + let Some(_guard) = lock.try_lock() else { + return Err(CoreError::conflict( + "this folder is syncing; try again when the pass ends", + )); + }; + let folder = self + .db + .sync_folder_get(id) + .map_err(|e| CoreError::internal(format!("db: {e:?}")))? + .ok_or_else(|| CoreError::not_found(format!("no synced folder with id {id}")))?; + if folder.mode != "mirror" { + return Err(CoreError::invalid( + "an online-only folder keeps nothing on this computer to sync from scratch", + )); + } + self.db + .sync_entries_clear(id) + .map_err(|e| CoreError::internal(format!("db: {e:?}")))?; + if folder.pending_mode.as_deref() == Some("ondemand") { + self.db + .sync_folder_set_pending_mode(id, None) + .map_err(|e| CoreError::internal(format!("db: {e:?}")))?; + } + let _ = self.sync_tx.send(sync::SyncMsg::Reconcile(id)); + info!(id, path = %folder.local_path, "sync folder reset"); + Ok(format!( + "{} will sync from scratch", + base_name(&folder.local_path) + )) + } + /// Spawn a secondary FUSE session rooted at `root` over `local` from a /// [`Core::fork_state`] sibling. Clears any stale kernel mount first (a crashed run can leave /// one, which would fail the fresh mount with EBUSY). diff --git a/crates/pdfs-fuse/src/profile.rs b/crates/pdfs-fuse/src/profile.rs index b1df4bc..77f1f28 100644 --- a/crates/pdfs-fuse/src/profile.rs +++ b/crates/pdfs-fuse/src/profile.rs @@ -450,6 +450,10 @@ impl Core { } let _ = self.sync_tx.send(sync::SyncMsg::Rewatch); + // The reply is gone once the app has shown it; the log keeps why. + for reason in &skipped { + info!(reason, "restore skipped a folder"); + } let mut message = format!("restored {restored} folder(s)"); if !skipped.is_empty() { message.push_str(&format!("; skipped: {}", skipped.join(", "))); diff --git a/crates/pdfs-fuse/src/sim/daemon.rs b/crates/pdfs-fuse/src/sim/daemon.rs index 5a425a3..3b6ab15 100644 --- a/crates/pdfs-fuse/src/sim/daemon.rs +++ b/crates/pdfs-fuse/src/sim/daemon.rs @@ -2873,4 +2873,112 @@ mod tests { assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); let _ = std::fs::remove_dir_all(&dir); } + + /// The synced folder `id` as the daemon lists it. + fn listed_folder(daemon: &Daemon, id: i64) -> Option { + match daemon.request(&Request::ListSyncFolders) { + Ok(Response::SyncFolders { items }) => items.into_iter().find(|f| f.id == id), + _ => None, + } + } + + /// A mirror folder holding `a.txt` and `sub/b.txt`, synced to Drive, whose + /// local copy is then deleted in full while the folder is paused, so no + /// pass sees half of it. Waits for the pass that refuses to run (#46). + fn folder_whose_local_copy_is_gone(daemon: &Daemon, drive: &FakeDrive, local: &Path) -> i64 { + let id = sync_folder(daemon, local, "mirror"); + std::fs::write(local.join("a.txt"), b"alpha").unwrap(); + std::fs::create_dir(local.join("sub")).unwrap(); + std::fs::write(local.join("sub/b.txt"), b"beta").unwrap(); + daemon.request(&Request::SyncNow { id: Some(id) }).unwrap(); + let on_drive = |name: &str, content: &[u8]| { + drive.tree().iter().any(|(path, entry)| { + path.ends_with(name) && *entry == Entry::File(Arc::new(content.to_vec())) + }) + }; + assert!( + wait_until(Duration::from_secs(30), || on_drive("a.txt", b"alpha") + && on_drive("sub/b.txt", b"beta") + && listed_folder(daemon, id).is_some_and(|f| f.state == "idle")), + "the folder synced: {:?} {:?}", + listed_folder(daemon, id), + drive.tree().keys().collect::>() + ); + + daemon + .request(&Request::SetSyncFolderPaused { id, paused: true }) + .unwrap(); + std::fs::remove_file(local.join("a.txt")).unwrap(); + std::fs::remove_dir_all(local.join("sub")).unwrap(); + daemon + .request(&Request::SetSyncFolderPaused { id, paused: false }) + .unwrap(); + daemon.request(&Request::SyncNow { id: Some(id) }).unwrap(); + assert!( + wait_until(Duration::from_secs(30), || listed_folder(daemon, id) + .is_some_and(|f| f.state == "error")), + "the pass refused to trash everything: {:?}", + listed_folder(daemon, id) + ); + assert!( + on_drive("a.txt", b"alpha") && on_drive("sub/b.txt", b"beta"), + "nothing was trashed on Drive: {:?}", + drive.tree().keys().collect::>() + ); + id + } + + #[test] + #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_folder_whose_local_copy_is_gone_downloads_again_after_a_reset() { + let drive = FakeDrive::new(); + let dir = scratch("reset-gone-local-copy"); + let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap(); + let local = dir.join("docs"); + let id = folder_whose_local_copy_is_gone(&daemon, &drive, &local); + + daemon.request(&Request::ResetSyncFolder { id }).unwrap(); + let has = |rel: &str, content: &[u8]| { + std::fs::read(local.join(rel)).is_ok_and(|bytes| bytes == content) + }; + assert!( + wait_until(Duration::from_secs(30), || has("a.txt", b"alpha") + && has("sub/b.txt", b"beta") + && listed_folder(&daemon, id).is_some_and(|f| f.state == "idle")), + "the reset downloaded the folder again: {:?}", + listed_folder(&daemon, id) + ); + + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } + + #[test] + #[ignore = "mounts FUSE: run with `cargo test -p pdfs-fuse sim:: -- --ignored`"] + fn a_folder_whose_local_copy_is_gone_still_goes_on_demand() { + let drive = FakeDrive::new(); + let dir = scratch("ondemand-gone-local-copy"); + let daemon = Daemon::start(&dir, drive.client(1, Faults::lan())).unwrap(); + let local = dir.join("docs"); + let id = folder_whose_local_copy_is_gone(&daemon, &drive, &local); + + daemon + .request(&Request::SetSyncFolderMode { + id, + mode: "ondemand".into(), + }) + .unwrap(); + assert!( + wait_until(Duration::from_secs(30), || listed_folder(&daemon, id) + .is_some_and(|f| f.mode == "ondemand" && f.pending_mode.is_none()) + && is_mounted(&local)), + "the queued switch landed: {:?}", + listed_folder(&daemon, id) + ); + assert_eq!(std::fs::read(local.join("a.txt")).unwrap(), b"alpha"); + assert_eq!(std::fs::read(local.join("sub/b.txt")).unwrap(), b"beta"); + + assert!(matches!(daemon.stop(), Ok(MountOutcome::Shutdown))); + let _ = std::fs::remove_dir_all(&dir); + } } diff --git a/crates/pdfs-fuse/src/sync.rs b/crates/pdfs-fuse/src/sync.rs index 12cf67d..0356bbb 100644 --- a/crates/pdfs-fuse/src/sync.rs +++ b/crates/pdfs-fuse/src/sync.rs @@ -369,7 +369,20 @@ impl Core { // guard on every pass — wedging the folder's sync permanently — the // moment a rule covers the whole tree. let tracked = tracked_baseline(&baseline, rules, &unscanned); - guard_local_wipe(&tracked, &local)?; + // A local copy that is gone in its entirety is not trashed on Drive, + // for the reason `guard_local_wipe` gives. A full pass stops there, but + // this one exists for a switch to on-demand, which needs nothing local + // and leaves Drive as it is: refusing the pass would only keep the + // folder out of `idle`, wedging the switch for good (#46). So the pass + // forgets those paths instead of trashing them, and the mount then + // shows everything Drive still has. + let local_gone = match guard_local_wipe(&tracked, &local) { + Ok(()) => false, + Err(reason) => { + warn!(id = folder_id, %reason, "sync: going on-demand without trashing anything on Drive"); + true + } + }; // The remote folder uids come from the baseline instead of a walk: every // directory this device has synced recorded its uid there when it was @@ -579,8 +592,27 @@ impl Core { // showing the folder's remote contents — otherwise everything they deleted // comes back the moment the switch lands. Shallowest first, skipping anything // under a folder already trashed (its children went with it). + let deletions = local_deletions(&tracked, &local); + if local_gone { + // Forgotten instead of trashed. A row left behind would read to + // the switch as a deletion not on Drive yet and withdraw it, and + // to a later full pass as a reason to stop again. Forgotten, a full + // pass downloads the paths again. + let mut forgotten: HashSet<&str> = HashSet::new(); + for rel in &deletions { + let mut parent = parent_rel(rel); + while !parent.is_empty() && !forgotten.contains(parent) { + parent = parent_rel(parent); + } + if parent.is_empty() { + let _ = self.db.sync_entries_remove_subtree(folder_id, rel); + forgotten.insert(rel); + } + } + return Ok(outcome); + } let mut trashed: Vec = Vec::new(); - for rel in &local_deletions(&tracked, &local) { + for rel in &deletions { if trashed .iter() .any(|dir| rel.starts_with(&format!("{dir}/"))) diff --git a/crates/pdfs-fuse/src/sync/planner.rs b/crates/pdfs-fuse/src/sync/planner.rs index 95b6f04..988bdf6 100644 --- a/crates/pdfs-fuse/src/sync/planner.rs +++ b/crates/pdfs-fuse/src/sync/planner.rs @@ -192,7 +192,8 @@ pub(super) fn guard_local_wipe( if !baseline.is_empty() && baseline.keys().all(|rel| !local.contains_key(rel)) { return Err(format!( "every one of the {} synced paths is missing locally; refusing to trash \ - them on Drive. Check that the folder is mounted and readable.", + them on Drive. Check that the folder is mounted and readable; to download \ + them again, sync the folder from scratch.", baseline.len() )); } @@ -213,7 +214,8 @@ pub(super) fn guard_remote_wipe( if !baseline.is_empty() && baseline.keys().all(|rel| !remote.contains_key(rel)) { return Err(format!( "every one of the {} synced paths is missing on Proton Drive; refusing to \ - delete them here. If they were deleted on purpose, remove the folder from sync.", + delete them here. If they were deleted on purpose, remove the folder from sync; \ + to upload them again, sync the folder from scratch.", baseline.len() )); } diff --git a/crates/pdfs-gui/src/app/pages/locations.rs b/crates/pdfs-gui/src/app/pages/locations.rs index a758c92..65963d2 100644 --- a/crates/pdfs-gui/src/app/pages/locations.rs +++ b/crates/pdfs-gui/src/app/pages/locations.rs @@ -1506,8 +1506,13 @@ fn add_device_items(ui: &Rc, menu: &mut ActionMenu, spec: &MountSpec, id: i6 } else { gettext("Pause Syncing") }; + let ui_pause = ui.clone(); + menu.item(&label, move || set_folder_paused(&ui_pause, id, !paused)); let ui = ui.clone(); - menu.item(&label, move || set_folder_paused(&ui, id, !paused)); + let path = spec.local_path.clone(); + menu.item(&gettext("Sync From Scratch…"), move || { + confirm_reset_sync_folder(&ui, id, &path) + }); menu.section(); } let ui = ui.clone(); @@ -1520,6 +1525,51 @@ fn add_device_items(ui: &Rc, menu: &mut ActionMenu, spec: &MountSpec, id: i6 }); } +/// Ask before syncing a folder from scratch. Nothing is deleted, but files +/// that differ come back as conflict copies, so it is not a click to make by +/// accident. +fn confirm_reset_sync_folder(ui: &Rc, id: i64, path: &str) { + let dialog = adw::AlertDialog::builder() + .heading(gettext("Sync From Scratch?")) + // Translators: {path} is a local folder path. + .body(gettext_f("This computer forgets what it synced in {path} before and compares the folder with Proton Drive again. Nothing is deleted: a file on one side only is copied to the other, and a file that differs keeps both versions.", &[("path", path)])) + .build(); + dialog.add_response("cancel", &gettext("Cancel")); + dialog.add_response("reset", &gettext("Sync From Scratch")); + dialog.set_response_appearance("reset", adw::ResponseAppearance::Suggested); + dialog.set_default_response(Some("cancel")); + dialog.set_close_response("cancel"); + let win = ui_window(ui); + let ui = ui.clone(); + dialog.connect_response(None, move |_, response| { + if response == "reset" { + reset_sync_folder(&ui, id); + } + }); + dialog.present(win.as_ref()); +} + +/// Forget a folder's sync records, then repaint so its row shows the new pass. +fn reset_sync_folder(ui: &Rc, id: i64) { + let rx = spawn_request(ui.dirs.control_socket(), Request::ResetSyncFolder { id }); + let ui = ui.clone(); + glib::spawn_future_local(async move { + let failed = gettext("Couldn't sync the folder from scratch"); + match rx.recv().await { + Ok(Ok(Response::Ok { .. })) => toast(&ui, &gettext("Syncing folder…")), + Ok(Ok(Response::Error { message, kind })) => { + toast_failure(&ui, &failed, &message, kind) + } + _ => toast_error( + &ui, + &failed, + &gettext("The Proton Drive service didn't respond."), + ), + } + refresh_locations(&ui); + }); +} + /// Ask before making a synced folder online only: the switch frees disk space /// by removing the local copies, which is not something to do by accident. fn confirm_online_only(ui: &Rc, id: i64, path: &str) { diff --git a/docs/BUGS.md b/docs/BUGS.md index dd2fe73..ae9e943 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -101,6 +101,7 @@ a live account since. | Entry | Title | |---|---| | [B256](#b256--pdfs-copy-right-after-a-save-copies-the-old-version) | `pdfs copy` right after a save copies the old version | +| [B255](#b255--a-synced-folder-whose-files-are-all-gone-here-is-stuck-for-good) | A synced folder whose files are all gone here is stuck for good | | [B254](#b254--an-edit-in-the-same-second-as-a-new-upload-never-arrives) | An edit in the same second as a new upload never arrives | | [B253](#b253--the-app-shows-the-sign-in-page-when-the-keyring-is-locked) | The app shows the sign-in page when the keyring is locked | | [B252](#b252--computers-sharing-a-device-overwrite-each-others-profile) | Computers sharing a device overwrite each other's profile | @@ -382,6 +383,36 @@ A move checks the same set. --- +### B255 — A synced folder whose files are all gone here is stuck for good + +**Status:** Fixed, not verified live +**Found:** 2026-10-26, issue #46: a folder restored from another computer never downloaded. +**Where:** `push_pass` in `crates/pdfs-fuse/src/sync.rs`; `reset_sync_folder` in +`crates/pdfs-fuse/src/devices.rs` + +**Repro:** Sync a folder in mirror mode, then delete all of its files on this computer while +the folder is paused. Resume it. Every pass stops with `every one of the N synced paths is +missing locally`, the folder stays in error, and a switch to online only waits for good. + +**Cause.** The wipe guard is right to stop a pass that would trash the whole folder on Drive. +But nothing got the folder out of that state. A switch to on-demand waits for a pass that ends +`idle`, and its push pass hit the same guard. The baseline that made the empty folder read as +"delete everything" could only be cleared by removing the folder from sync. How the reporter's +folder lost its files is not known yet. + +**Fix.** The push pass for a switch to on-demand forgets the baseline rows of a local copy that +is gone in full, instead of trashing them on Drive, so the switch goes ahead and the mount shows +what Drive has. **Sync From Scratch…** in the app and `pdfs sync reset ID` clear a mirror +folder's baseline, so the next pass compares both sides as on the first sync: one-sided files +are copied across, files that differ keep both versions, and nothing is deleted. Restore now +logs why it skipped a folder. + +**Test:** The simulations `a_folder_whose_local_copy_is_gone_still_goes_on_demand` (which +failed in exactly the reported state before the fix) and +`a_folder_whose_local_copy_is_gone_downloads_again_after_a_reset`. + +--- + ### B254 — An edit in the same second as a new upload never arrives **Status:** Fixed, not verified live diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 12d0bd0..a922ff3 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -33,6 +33,11 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). - **Folder sizes.** **Details** shows how much a folder holds and how many items are in it, as Proton Drive counts it, including items in the trash. From a terminal: `pdfs du PATH`. +- **Sync a folder from scratch.** In a synced folder's menu on **Sync → Folders**, **Sync From + Scratch…** forgets what was synced before and compares the folder with Proton Drive again. A + file on one side only is copied to the other, and a file that differs keeps both versions. + Nothing is deleted. From the terminal: `pdfs sync reset ID`. + ### Changed - **Copying a file inside the mount is faster** when the computer already has the file, for example with `cp` or a file manager: the copy is made on this computer, about four times @@ -48,6 +53,12 @@ scratch (user data in `staging/` and `recovery/` is never touched by this). ### Fixed +- **A synced folder whose files were all gone from this computer no longer gets stuck** (#46). + The sync still refuses to delete everything on Proton Drive, but a switch to online only now + goes ahead and shows what Proton Drive has, instead of waiting for good. To download the + files again instead, sync the folder from scratch. Restoring folders also logs why it + skipped a folder. + - **Saved public links show the name of what they point at**, in the app and in `pdfs bookmarks`, instead of "Shared link". For a link with a custom password, the address no longer has the custom password stuck to its end, so it matches the link the web shows and the page asks for the diff --git a/docs/CLI.md b/docs/CLI.md index a4fa60d..ac41777 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -84,6 +84,7 @@ commands are for scripts and for cases where the mount is not available. | `pdfs sync rm ID [--delete-remote]` | Stop syncing. Local files stay; `--delete-remote` also removes the copy on Proton Drive. | | `pdfs sync mode ID mirror\|ondemand` | Switch between a full local copy (`mirror`) and online only (`ondemand`). | | `pdfs sync now [ID]` | Start a sync pass now, for all folders or one. | +| `pdfs sync reset ID` | Forget what a synced folder synced before and compare it with Proton Drive again. A file on one side only is copied to the other, and a file that differs keeps both versions. Nothing is deleted. | | `pdfs sync pause [--for 1h] [--folder ID]` | Pause uploads and synced folders. Reading files keeps working. `--for` ends the pause by itself (`30m`, `1h`, `2d`). | | `pdfs sync resume [--folder ID]` | Resume after a pause. | | `pdfs sync limit [--up RATE] [--down RATE]` | Cap bandwidth, for example `500K` or `2M` per second. `0` removes a cap. Without options, prints the current caps. | diff --git a/docs/SYNCED_FOLDERS.md b/docs/SYNCED_FOLDERS.md index aed940b..9d5a34b 100644 --- a/docs/SYNCED_FOLDERS.md +++ b/docs/SYNCED_FOLDERS.md @@ -76,6 +76,14 @@ again when they move into a synced one. Proton Drive. To delete the copy on Proton Drive as well, tick **Also delete from Proton Drive**, or add `--delete-remote`. +## Sync a folder from scratch + +**Sync From Scratch…** in the folder's menu, or `pdfs sync reset ID`, makes this computer forget +what it synced in the folder before and compare it with Proton Drive again, as on the first sync. +A file on one side only is copied to the other, and a file that differs keeps both versions. +Nothing is deleted. Use it when a folder's files went missing on this computer and the sync +refuses to go on (see [Troubleshooting](TROUBLESHOOTING.md#a-synced-folder-stays-in-error-and-nothing-downloads)). + ## Excluding files with `.pdfsignore` Synced folders skip build output, dependency folders and editor leftovers. Two sets of rules diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 539a13b..21b6eb7 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -226,6 +226,22 @@ Check that: `pdfs sync now` starts a sync pass at once. +### A synced folder stays in error and nothing downloads + +The log says `every one of the N synced paths is missing locally; refusing to trash them on +Drive`. The folder synced before, and now none of its files are on this computer. The sync +stops so that it does not delete them on Proton Drive too. Check that the folder is the right +one and that its disk is mounted. To get the files back, choose **Sync From Scratch…** in the +folder's menu on **Sync → Folders**, or run: + +```bash +pdfs sync list # find the folder's ID +pdfs sync reset 1 +``` + +This downloads what Proton Drive has and uploads what only this computer has. Nothing is deleted. +If you deleted the files on purpose, delete them on Proton Drive too, or stop syncing the folder. + ### Files named `(sync-conflict …)` appeared The file changed in two places at once. Nothing was lost. See diff --git a/po/de.po b/po/de.po index 1ad915c..b62253a 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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -64,7 +64,7 @@ msgstr "%A, %-d. %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -258,8 +258,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1285,8 +1286,9 @@ msgstr "Alben konnten nicht geladen werden" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2324,7 +2326,8 @@ msgid "Add Folder to Sync" msgstr "Ordner zur Synchronisierung hinzufügen" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Ordner wird synchronisiert …" @@ -3249,16 +3252,41 @@ msgstr "Synchronisierung fortsetzen" msgid "Pause Syncing" msgstr "Synchronisierung pausieren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Neu synchronisieren …" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Synchronisierung beenden …" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Neu synchronisieren?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Dieser Computer vergisst, was er in {path} bisher synchronisiert hat, und vergleicht den Ordner erneut mit Proton Drive. Es wird nichts gelöscht: Eine Datei, die nur auf einer Seite liegt, wird auf die andere kopiert, und von einer Datei, die sich unterscheidet, bleiben beide Versionen erhalten." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Neu synchronisieren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Der Ordner konnte nicht neu synchronisiert werden" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "Ordner auf „Nur online“ umstellen?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3267,11 +3295,11 @@ msgstr "" "Dateien in {path} werden von diesem Computer entfernt und nur in Proton " "Drive behalten. Jede Datei wird beim Öffnen erneut heruntergeladen." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Nur online verfügbar machen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3280,62 +3308,62 @@ msgstr "" "Jede Datei in {path} wird auf diesen Computer heruntergeladen und bleibt " "synchronisiert. Auf diesem Datenträger sind {free} frei." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Jede Datei in {path} wird auf diesen Computer heruntergeladen und bleibt " "synchronisiert." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Ordner herunterladen?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Herunterladen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Der Ordner konnte nicht pausiert werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Der Ordner konnte nicht fortgesetzt werden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Ordner pausiert" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Ordner fortgesetzt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Synchronisieren fehlgeschlagen" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Geteilter Ordner" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Wird auf „Nur online“ umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Wird auf synchronisiert umgestellt" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "pausiert" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "nicht verfügbar" @@ -5939,7 +5967,9 @@ msgstr "Link-Einstellungen" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Ändern, wer bearbeiten darf, das Passwort oder den Ablauf. Der Link bleibt derselbe." +msgstr "" +"Ändern, wer bearbeiten darf, das Passwort oder den Ablauf. Der Link bleibt " +"derselbe." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/en_GB.po b/po/en_GB.po index fc5ae38..6bd4006 100644 --- a/po/en_GB.po +++ b/po/en_GB.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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: English (United Kingdom)\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -254,8 +254,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1273,8 +1274,9 @@ msgstr "Couldn't load albums" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2301,7 +2303,8 @@ msgid "Add Folder to Sync" msgstr "Add Folder to Sync" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Syncing folder…" @@ -3199,16 +3202,41 @@ msgstr "Resume Syncing" msgid "Pause Syncing" msgstr "Pause Syncing" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sync From Scratch…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Stop Syncing…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Sync From Scratch?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "This computer forgets what it synced in {path} before and compares the folder with Proton Drive again. Nothing is deleted: a file on one side only is copied to the other, and a file that differs keeps both versions." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sync From Scratch" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Couldn't sync the folder from scratch" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "Make Folder Online Only?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3217,11 +3245,11 @@ msgstr "" "Files in {path} will be removed from this computer and kept in Proton Drive " "only. Each file downloads again when you open it." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Make Online Only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3230,60 +3258,60 @@ msgstr "" "Every file in {path} will download to this computer and stay synced. {free} " "is free on this disk." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "Every file in {path} will download to this computer and stay synced." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Download Folder?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Download" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Couldn't pause the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Couldn't resume the folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Folder paused" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Folder resumed" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Couldn't sync" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Shared folder" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Going online only" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Switching to synced" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "paused" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "not available" @@ -5822,7 +5850,8 @@ msgstr "Link settings" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Change who can edit, the password or the expiry. The link stays the same." +msgstr "" +"Change who can edit, the password or the expiry. The link stays the same." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/es.po b/po/es.po index 06647ae..6eb3038 100644 --- a/po/es.po +++ b/po/es.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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Spanish\n" @@ -64,7 +64,7 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -256,8 +256,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1279,8 +1280,9 @@ msgstr "No se pudieron cargar los álbumes" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2313,7 +2315,8 @@ msgid "Add Folder to Sync" msgstr "Añadir carpeta para sincronizar" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizando la carpeta…" @@ -3223,16 +3226,41 @@ msgstr "Reanudar la sincronización" msgid "Pause Syncing" msgstr "Pausar la sincronización" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sincronizar desde cero…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Dejar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "¿Sincronizar desde cero?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Este equipo olvida lo que sincronizó antes en {path} y vuelve a comparar la carpeta con Proton Drive. No se elimina nada: un archivo que solo está en un lado se copia al otro, y de un archivo que difiere se conservan ambas versiones." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sincronizar desde cero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "No se pudo sincronizar la carpeta desde cero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "¿Hacer la carpeta solo en línea?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3241,11 +3269,11 @@ msgstr "" "Los archivos de {path} se quitarán de este equipo y se conservarán solo en " "Proton Drive. Cada archivo se vuelve a descargar al abrirlo." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Hacer solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3254,62 +3282,62 @@ msgstr "" "Todos los archivos de {path} se descargarán en este equipo y se mantendrán " "sincronizados. Hay {free} libres en este disco." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Todos los archivos de {path} se descargarán en este equipo y se mantendrán " "sincronizados." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "¿Descargar la carpeta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Descargar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "No se pudo pausar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "No se pudo reanudar la carpeta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Carpeta en pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Carpeta reanudada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "No se pudo sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Carpeta compartida" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Pasando a solo en línea" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Pasando a sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "en pausa" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "no disponible" @@ -5895,7 +5923,8 @@ msgstr "Ajustes del enlace" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Cambie quién puede editar, la contraseña o la caducidad. El enlace no cambia." +msgstr "" +"Cambie quién puede editar, la contraseña o la caducidad. El enlace no cambia." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/fr.po b/po/fr.po index 6e41a9b..a2c7405 100644 --- a/po/fr.po +++ b/po/fr.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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: French\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y à %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -258,8 +258,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1290,8 +1291,9 @@ msgstr "Impossible de charger les albums" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2326,7 +2328,8 @@ msgid "Add Folder to Sync" msgstr "Ajouter un dossier à synchroniser" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Synchronisation du dossier…" @@ -3248,16 +3251,41 @@ msgstr "Reprendre la synchronisation" msgid "Pause Syncing" msgstr "Mettre en pause la synchronisation" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Resynchroniser depuis le début…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Arrêter la synchronisation…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Resynchroniser depuis le début ?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Cet ordinateur oublie ce qu’il a synchronisé auparavant dans {path} et compare à nouveau le dossier avec Proton Drive. Rien n’est supprimé : un fichier présent d’un seul côté est copié de l’autre, et un fichier qui diffère garde ses deux versions." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Resynchroniser depuis le début" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Impossible de resynchroniser le dossier depuis le début" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "Garder le dossier en ligne uniquement ?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3267,11 +3295,11 @@ msgstr "" "uniquement dans Proton Drive. Chaque fichier sera à nouveau téléchargé à son " "ouverture." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Garder en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3280,62 +3308,62 @@ msgstr "" "Chaque fichier de {path} sera téléchargé sur cet ordinateur et restera " "synchronisé. {free} sont libres sur ce disque." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Chaque fichier de {path} sera téléchargé sur cet ordinateur et restera " "synchronisé." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Télécharger le dossier ?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Télécharger" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Impossible de mettre en pause le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Impossible de reprendre le dossier" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Dossier en pause" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Dossier repris" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Impossible de synchroniser" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Dossier partagé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Passage en ligne uniquement" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Passage en mode synchronisé" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "en pause" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "non disponible" @@ -5941,7 +5969,9 @@ msgstr "Paramètres du lien" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Modifiez qui peut modifier, le mot de passe ou l’expiration. Le lien reste le même." +msgstr "" +"Modifiez qui peut modifier, le mot de passe ou l’expiration. Le lien reste " +"le même." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/it.po b/po/it.po index f87bb1f..070bc78 100644 --- a/po/it.po +++ b/po/it.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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Italian\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -254,8 +254,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1284,8 +1285,9 @@ msgstr "Impossibile caricare gli album" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2320,7 +2322,8 @@ msgid "Add Folder to Sync" msgstr "Aggiungi cartella da sincronizzare" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizzazione della cartella…" @@ -3241,16 +3244,41 @@ msgstr "Riprendi sincronizzazione" msgid "Pause Syncing" msgstr "Metti in pausa sincronizzazione" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sincronizza da zero…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Interrompi sincronizzazione…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Sincronizzare da zero?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Questo computer dimentica ciò che ha sincronizzato finora in {path} e confronta di nuovo la cartella con Proton Drive. Non viene eliminato nulla: un file presente su un solo lato viene copiato sull’altro e di un file diverso vengono mantenute entrambe le versioni." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sincronizza da zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Impossibile sincronizzare la cartella da zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "Rendere la cartella solo online?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3259,11 +3287,11 @@ msgstr "" "I file in {path} verranno rimossi da questo computer e mantenuti solo in " "Proton Drive. Ogni file viene scaricato di nuovo quando lo apri." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Rendi solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3272,62 +3300,62 @@ msgstr "" "Ogni file in {path} verrà scaricato su questo computer e resterà " "sincronizzato. Su questo disco sono liberi {free}." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Ogni file in {path} verrà scaricato su questo computer e resterà " "sincronizzato." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Scaricare la cartella?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Scarica" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Impossibile mettere in pausa la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Impossibile riprendere la cartella" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Cartella in pausa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Cartella ripresa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Impossibile sincronizzare" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Cartella condivisa" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Passaggio a solo online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Passaggio a sincronizzata" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "in pausa" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "non disponibile" @@ -5918,7 +5946,9 @@ msgstr "Impostazioni del collegamento" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Cambia chi può modificare, la password o la scadenza. Il collegamento resta lo stesso." +msgstr "" +"Cambia chi può modificare, la password o la scadenza. Il collegamento resta " +"lo stesso." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/nl.po b/po/nl.po index e3bad04..c5f8602 100644 --- a/po/nl.po +++ b/po/nl.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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Dutch\n" @@ -64,7 +64,7 @@ msgstr "%A %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -255,8 +255,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1280,8 +1281,9 @@ msgstr "Kon albums niet laden" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2314,7 +2316,8 @@ msgid "Add Folder to Sync" msgstr "Map toevoegen aan synchronisatie" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Map synchroniseren…" @@ -3233,16 +3236,41 @@ msgstr "Synchronisatie hervatten" msgid "Pause Syncing" msgstr "Synchronisatie pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Opnieuw synchroniseren…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Synchroniseren stoppen…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Opnieuw synchroniseren?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Deze computer vergeet wat hij eerder in {path} heeft gesynchroniseerd en vergelijkt de map opnieuw met Proton Drive. Er wordt niets verwijderd: een bestand dat maar aan één kant staat, wordt naar de andere kant gekopieerd, en van een bestand dat verschilt blijven beide versies bewaard." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Opnieuw synchroniseren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Kon de map niet opnieuw synchroniseren" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "Map alleen online maken?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3251,11 +3279,11 @@ msgstr "" "Bestanden in {path} worden van deze computer verwijderd en alleen in Proton " "Drive bewaard. Elk bestand wordt opnieuw gedownload wanneer je het opent." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Alleen online maken" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3264,62 +3292,62 @@ msgstr "" "Elk bestand in {path} wordt naar deze computer gedownload en blijft " "gesynchroniseerd. Er is {free} vrij op deze schijf." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Elk bestand in {path} wordt naar deze computer gedownload en blijft " "gesynchroniseerd." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Map downloaden?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Downloaden" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Kon de map niet pauzeren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Kon de map niet hervatten" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Map gepauzeerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Map hervat" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Kon niet synchroniseren" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Gedeelde map" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Wordt alleen online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Overschakelen naar gesynchroniseerd" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "gepauzeerd" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "niet beschikbaar" @@ -5906,7 +5934,9 @@ msgstr "Linkinstellingen" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Wijzig wie mag bewerken, het wachtwoord of de vervaldatum. De link blijft hetzelfde." +msgstr "" +"Wijzig wie mag bewerken, het wachtwoord of de vervaldatum. De link blijft " +"hetzelfde." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/pdfs.pot b/po/pdfs.pot index 7a4ca64..ff19449 100644 --- a/po/pdfs.pot +++ b/po/pdfs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 3.5.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -67,7 +67,7 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -231,8 +231,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1238,8 +1239,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2266,7 +2268,8 @@ msgid "Add Folder to Sync" msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "" @@ -3095,87 +3098,112 @@ msgstr "" msgid "Pause Syncing" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " "only. Each file downloads again when you open it." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " "is free on this disk." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "" diff --git a/po/pl.po b/po/pl.po index dbe0723..0569538 100644 --- a/po/pl.po +++ b/po/pl.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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Polish\n" @@ -66,7 +66,7 @@ msgstr "%A, %-d %B %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -259,8 +259,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1311,8 +1312,9 @@ msgstr "Nie można wczytać albumów" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2373,7 +2375,8 @@ msgid "Add Folder to Sync" msgstr "Dodaj katalog do synchronizacji" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Synchronizowanie katalogu…" @@ -3297,16 +3300,41 @@ msgstr "Wznów synchronizację" msgid "Pause Syncing" msgstr "Wstrzymaj synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Synchronizuj od nowa…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Zatrzymaj synchronizację…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Synchronizować od nowa?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Ten komputer zapomina, co wcześniej zsynchronizował w {path}, i ponownie porównuje katalog z Proton Drive. Nic nie zostanie usunięte: plik, który jest tylko po jednej stronie, zostanie skopiowany na drugą, a z pliku, który się różni, zostaną zachowane obie wersje." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Synchronizuj od nowa" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Nie można zsynchronizować katalogu od nowa" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "Oznaczyć katalog jako tylko online?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3315,11 +3343,11 @@ msgstr "" "Pliki w {path} zostaną usunięte z tego komputera i będą przechowywane tylko " "w Proton Drive. Każdy plik zostanie ponownie pobrany przy otwarciu." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Oznacz jako tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3328,62 +3356,62 @@ msgstr "" "Każdy plik w {path} zostanie pobrany na ten komputer i pozostanie " "synchronizowany. Wolne miejsce na tym dysku: {free}." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Każdy plik w {path} zostanie pobrany na ten komputer i pozostanie " "synchronizowany." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Pobrać katalog?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Pobierz" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Nie można wstrzymać katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Nie można wznowić katalogu" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Wstrzymano katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Wznowiono katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Nie można zsynchronizować" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Udostępniony katalog" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Przechodzenie w tryb tylko online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Przełączanie na synchronizację" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "wstrzymany" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "niedostępne" @@ -6003,7 +6031,9 @@ msgstr "Ustawienia odnośnika" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Proszę zmienić, kto może edytować, hasło lub datę wygaśnięcia. Odnośnik pozostaje ten sam." +msgstr "" +"Proszę zmienić, kto może edytować, hasło lub datę wygaśnięcia. Odnośnik " +"pozostaje ten sam." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password" diff --git a/po/pt_BR.po b/po/pt_BR.po index ebb9dca..a49aeca 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.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-10-25 22:10+0100\n" +"POT-Creation-Date: 2026-10-26 17:16+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: Portuguese (Brazil)\n" @@ -64,7 +64,7 @@ msgstr "%A, %-d de %B de %Y, %H:%M" #: crates/pdfs-gui/src/app/pages/browser.rs:1249 #: crates/pdfs-gui/src/app/pages/browser.rs:2167 #: crates/pdfs-gui/src/app/pages/browser.rs:2246 -#: crates/pdfs-gui/src/app/pages/locations.rs:1667 +#: crates/pdfs-gui/src/app/pages/locations.rs:1717 #: 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" @@ -254,8 +254,9 @@ msgstr "" #: crates/pdfs-gui/src/app/pages/devices.rs:1186 #: crates/pdfs-gui/src/app/pages/locations.rs:850 #: crates/pdfs-gui/src/app/pages/locations.rs:1054 -#: crates/pdfs-gui/src/app/pages/locations.rs:1531 +#: crates/pdfs-gui/src/app/pages/locations.rs:1537 #: crates/pdfs-gui/src/app/pages/locations.rs:1581 +#: crates/pdfs-gui/src/app/pages/locations.rs:1631 #: crates/pdfs-gui/src/app/pages/login.rs:480 #: crates/pdfs-gui/src/app/pages/login.rs:594 #: crates/pdfs-gui/src/app/pages/login.rs:640 @@ -1281,8 +1282,9 @@ msgstr "Não foi possível carregar os álbuns" #: crates/pdfs-gui/src/app/pages/locations.rs:881 #: crates/pdfs-gui/src/app/pages/locations.rs:904 #: crates/pdfs-gui/src/app/pages/locations.rs:1123 -#: crates/pdfs-gui/src/app/pages/locations.rs:1623 -#: crates/pdfs-gui/src/app/pages/locations.rs:1643 +#: crates/pdfs-gui/src/app/pages/locations.rs:1566 +#: crates/pdfs-gui/src/app/pages/locations.rs:1673 +#: crates/pdfs-gui/src/app/pages/locations.rs:1693 #: crates/pdfs-gui/src/app/pages/photo_viewer.rs:1504 #: crates/pdfs-gui/src/app/pages/photos.rs:1421 #: crates/pdfs-gui/src/app/pages/photos.rs:2141 @@ -2313,7 +2315,8 @@ msgid "Add Folder to Sync" msgstr "Adicionar pasta à sincronização" #: crates/pdfs-gui/src/app/pages/devices.rs:691 -#: crates/pdfs-gui/src/app/pages/locations.rs:1636 +#: crates/pdfs-gui/src/app/pages/locations.rs:1559 +#: crates/pdfs-gui/src/app/pages/locations.rs:1686 msgid "Syncing folder…" msgstr "Sincronizando pasta…" @@ -3226,16 +3229,41 @@ msgstr "Retomar sincronização" msgid "Pause Syncing" msgstr "Pausar sincronização" -#: crates/pdfs-gui/src/app/pages/locations.rs:1518 +#: crates/pdfs-gui/src/app/pages/locations.rs:1513 +msgid "Sync From Scratch…" +msgstr "Sincronizar do zero…" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1523 msgid "Stop Syncing…" msgstr "Parar de sincronizar…" -#: crates/pdfs-gui/src/app/pages/locations.rs:1527 +#: crates/pdfs-gui/src/app/pages/locations.rs:1533 +msgid "Sync From Scratch?" +msgstr "Sincronizar do zero?" + +#. Translators: {path} is a local folder path. +#: crates/pdfs-gui/src/app/pages/locations.rs:1535 +#, rust-format +msgid "" +"This computer forgets what it synced in {path} before and compares the " +"folder with Proton Drive again. Nothing is deleted: a file on one side only " +"is copied to the other, and a file that differs keeps both versions." +msgstr "Este computador esquece o que sincronizou antes em {path} e compara a pasta com o Proton Drive novamente. Nada é excluído: um arquivo que está em um lado só é copiado para o outro, e de um arquivo diferente as duas versões são mantidas." + +#: crates/pdfs-gui/src/app/pages/locations.rs:1538 +msgid "Sync From Scratch" +msgstr "Sincronizar do zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1557 +msgid "Couldn't sync the folder from scratch" +msgstr "Não foi possível sincronizar a pasta do zero" + +#: crates/pdfs-gui/src/app/pages/locations.rs:1577 msgid "Make Folder Online Only?" msgstr "Tornar a pasta somente online?" #. Translators: {path} is a local folder path. -#: crates/pdfs-gui/src/app/pages/locations.rs:1529 +#: crates/pdfs-gui/src/app/pages/locations.rs:1579 #, rust-format msgid "" "Files in {path} will be removed from this computer and kept in Proton Drive " @@ -3244,11 +3272,11 @@ msgstr "" "Os arquivos em {path} serão removidos deste computador e mantidos somente no " "Proton Drive. Cada arquivo é baixado novamente quando você o abre." -#: crates/pdfs-gui/src/app/pages/locations.rs:1532 +#: crates/pdfs-gui/src/app/pages/locations.rs:1582 msgid "Make Online Only" msgstr "Tornar somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1568 +#: crates/pdfs-gui/src/app/pages/locations.rs:1618 #, rust-format msgid "" "Every file in {path} will download to this computer and stay synced. {free} " @@ -3257,62 +3285,62 @@ msgstr "" "Todos os arquivos em {path} serão baixados para este computador e " "continuarão sincronizados. Há {free} livres neste disco." -#: crates/pdfs-gui/src/app/pages/locations.rs:1573 +#: crates/pdfs-gui/src/app/pages/locations.rs:1623 #, rust-format msgid "Every file in {path} will download to this computer and stay synced." msgstr "" "Todos os arquivos em {path} serão baixados para este computador e " "continuarão sincronizados." -#: crates/pdfs-gui/src/app/pages/locations.rs:1578 +#: crates/pdfs-gui/src/app/pages/locations.rs:1628 msgid "Download Folder?" msgstr "Baixar a pasta?" -#: crates/pdfs-gui/src/app/pages/locations.rs:1582 +#: crates/pdfs-gui/src/app/pages/locations.rs:1632 #: crates/pdfs-gui/src/app/update.rs:34 msgid "Download" msgstr "Baixar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1606 +#: crates/pdfs-gui/src/app/pages/locations.rs:1656 msgid "Couldn't pause the folder" msgstr "Não foi possível pausar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1607 +#: crates/pdfs-gui/src/app/pages/locations.rs:1657 msgid "Couldn't resume the folder" msgstr "Não foi possível retomar a pasta" -#: crates/pdfs-gui/src/app/pages/locations.rs:1613 +#: crates/pdfs-gui/src/app/pages/locations.rs:1663 msgid "Folder paused" msgstr "Pasta pausada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1614 +#: crates/pdfs-gui/src/app/pages/locations.rs:1664 msgid "Folder resumed" msgstr "Pasta retomada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1638 -#: crates/pdfs-gui/src/app/pages/locations.rs:1642 +#: crates/pdfs-gui/src/app/pages/locations.rs:1688 +#: crates/pdfs-gui/src/app/pages/locations.rs:1692 msgid "Couldn't sync" msgstr "Não foi possível sincronizar" -#: crates/pdfs-gui/src/app/pages/locations.rs:1668 +#: crates/pdfs-gui/src/app/pages/locations.rs:1718 msgid "Shared folder" msgstr "Pasta compartilhada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1670 +#: crates/pdfs-gui/src/app/pages/locations.rs:1720 msgid "Going online only" msgstr "Tornando somente online" -#: crates/pdfs-gui/src/app/pages/locations.rs:1671 +#: crates/pdfs-gui/src/app/pages/locations.rs:1721 msgid "Switching to synced" msgstr "Passando para sincronizada" -#: crates/pdfs-gui/src/app/pages/locations.rs:1681 +#: crates/pdfs-gui/src/app/pages/locations.rs:1731 msgctxt "state" msgid "paused" msgstr "pausada" #. Translators: a folder's files can't be opened right now. -#: crates/pdfs-gui/src/app/pages/locations.rs:1692 +#: crates/pdfs-gui/src/app/pages/locations.rs:1742 msgid "not available" msgstr "indisponível" @@ -5893,7 +5921,8 @@ msgstr "Configurações do link" #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:802 msgid "" "Change who can edit, the password or the expiry. The link stays the same." -msgstr "Altere quem pode editar, a senha ou a expiração. O link continua o mesmo." +msgstr "" +"Altere quem pode editar, a senha ou a expiração. O link continua o mesmo." #: crates/pdfs-gui/src/app/widgets/share_dialog.rs:849 msgid "New password"