fix(sync,gui,cli): get a synced folder unstuck when its local copy is gone (#46)

A mirror folder whose files were all gone from this computer stayed in
error for good. The wipe guard rightly refuses to trash the whole folder
on Drive, but nothing got the folder out of that state: a queued switch
to on-demand waits for a pass that ends idle, and its push pass hit the
same guard. Only removing the folder from sync cleared the baseline that
made the empty folder read as "delete everything".

- 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, so the
  switch goes ahead and the mount shows what Drive has.
- New Request::ResetSyncFolder, `pdfs sync reset ID` and "Sync From
  Scratch…" in a synced folder's menu clear a mirror folder's baseline
  (and a queued switch to on-demand, whose push pass would upload a
  duplicate of every file). The next pass compares both sides as on the
  first sync: one-sided files are copied across, files that differ keep
  both versions, nothing is deleted.
- The wipe guards' messages name the reset; restore logs why it skipped
  a folder.

Two simulations cover it. The on-demand one failed in exactly the
reported state (mirror, pending ondemand, error) before the fix.
All 8 catalogs translated.
This commit is contained in:
nvrl committed 2026-10-26 17:45:22 +01:00
1 parent ea10a43216
commit a5acae41b3
23 files changed
+832 -238

No files matched your search

+56 -26
View File
@@ -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"