fix(gui): run the CAPTCHA page in its own process (B195)

On secureblue, WebKit cannot start the sandbox for the verification page:
bubblewrap is kept from the journal socket, xdg-dbus-proxy fails, and
WebKit ends its process with g_error. The webview lived in pdfs-app, so
the whole app crashed after the sign-in (#29).

- gui: `pdfs-app --human-verification` shows the page in its own window,
  reads the URL on stdin and prints the token on stdout; its logs go to
  stderr
- gui: a child that dies or fails without a token ends the sign-in with a
  message that the page could not be opened, instead of "cancelled"
- i18n: translate the new message in every catalog
- docs: B195 in the bug ledger, the cause and a one-time workaround in
  TROUBLESHOOTING.md, the child process in ARCHITECTURE.md, changelog
This commit is contained in:
nvrl committed 2026-10-08 10:25:14 +02:00
1 parent c7fc85e943
commit a888e0bb28
16 files changed
+1355 -997

No files matched your search

+102 -95
View File
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: proton-drive-linux 3.1.0\n"
"Project-Id-Version: proton-drive-linux 3.1.1\n"
"Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n"
"POT-Creation-Date: 2026-10-07 02:39+0200\n"
"POT-Creation-Date: 2026-10-08 10:15+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -60,7 +60,7 @@ msgstr ""
msgid "%A, %B %-d, %Y, %H:%M"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:747
#: crates/pdfs-gui/src/app/main.rs:760
#: crates/pdfs-gui/src/app/pages/activity_text.rs:539
#: crates/pdfs-gui/src/app/pages/browser.rs:454
#: crates/pdfs-gui/src/app/pages/browser.rs:819
@@ -73,91 +73,91 @@ msgstr ""
msgid "My files"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:750 crates/pdfs-gui/src/app/main.rs:1394
#: crates/pdfs-gui/src/app/main.rs:763 crates/pdfs-gui/src/app/main.rs:1407
#: crates/pdfs-gui/src/app/pages/albums.rs:638
#: crates/pdfs-gui/src/app/pages/photos.rs:842
#: crates/pdfs-gui/src/app/pages/places.rs:441
msgid "Photos"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:755
#: crates/pdfs-gui/src/app/main.rs:768
#: crates/pdfs-gui/src/app/pages/shared.rs:168
#: crates/pdfs-gui/src/app/pages/shared.rs:482
msgid "Shared with me"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:760
#: crates/pdfs-gui/src/app/main.rs:773
#: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120
msgid "Shared by me"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:763
#: crates/pdfs-gui/src/app/main.rs:776
#: crates/pdfs-gui/src/app/pages/devices.rs:140
#: crates/pdfs-gui/src/app/pages/devices.rs:481
msgid "Computers"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:764
#: crates/pdfs-gui/src/app/main.rs:777
#: crates/pdfs-gui/src/app/pages/trash.rs:101
msgid "Trash"
msgstr ""
#. Translators: sidebar entry for the page listing this computer's synced folders.
#: crates/pdfs-gui/src/app/main.rs:766
#: crates/pdfs-gui/src/app/main.rs:779
msgid "Sync"
msgstr ""
#. Translators: a failed action's toast. {what} says what failed, such as
#. "Couldn't rename"; {detail} is the reason, usually untranslated text
#. from the mount service.
#: crates/pdfs-gui/src/app/main.rs:1083
#: crates/pdfs-gui/src/app/main.rs:1096
#, rust-format
msgid "{what}: {detail}"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1102
#: crates/pdfs-gui/src/app/main.rs:1115
msgid "You're offline"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1103
#: crates/pdfs-gui/src/app/main.rs:1116
msgid "That's not there any more"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1104
#: crates/pdfs-gui/src/app/main.rs:1117
msgid "You don't have access to that"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1105
#: crates/pdfs-gui/src/app/main.rs:1118
msgid "Something changed this first"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1106
#: crates/pdfs-gui/src/app/main.rs:1119
msgid "Your Proton Drive is full"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1147 crates/pdfs-gui/src/app/main.rs:1376
#: crates/pdfs-gui/src/app/main.rs:1160 crates/pdfs-gui/src/app/main.rs:1389
#: crates/pdfs-gui/src/app/pages/status.rs:385
msgid "Preferences"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1148
#: crates/pdfs-gui/src/app/main.rs:1161
#: crates/pdfs-gui/src/app/widgets/compat.rs:262
msgid "Keyboard Shortcuts"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1150
#: crates/pdfs-gui/src/app/main.rs:1163
msgid "About Proton Drive for Linux"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1155
#: crates/pdfs-gui/src/app/main.rs:1168
msgid "Main menu"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1211
#: crates/pdfs-gui/src/app/main.rs:1224
msgid "Proton Drive for Linux"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1219
#: crates/pdfs-gui/src/app/main.rs:1232
msgid ""
"Files-on-demand Proton Drive for the Linux desktop.\n"
"\n"
@@ -165,23 +165,23 @@ msgid ""
"AG."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1224
#: crates/pdfs-gui/src/app/main.rs:1237
msgid "Source Code"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1228
#: crates/pdfs-gui/src/app/main.rs:1241
msgid "Proton Terms of Service"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1232
#: crates/pdfs-gui/src/app/main.rs:1245
msgid "Proton Privacy Policy"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1237
#: crates/pdfs-gui/src/app/main.rs:1250
msgid "Disclaimer"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1241
#: crates/pdfs-gui/src/app/main.rs:1254
msgid ""
"This is an unofficial, community-built client. It is not affiliated with, "
"endorsed by, or supported by Proton AG.\n"
@@ -194,21 +194,21 @@ msgid ""
"of any data you cannot afford to lose."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1249
#: crates/pdfs-gui/src/app/main.rs:1262
msgid ""
"Places are named with data from <a href=\"https://www.geonames.org/"
"\">GeoNames</a>, licensed under <a href=\"https://creativecommons.org/"
"licenses/by/4.0/\">CC BY 4.0</a>."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1257
#: crates/pdfs-gui/src/app/main.rs:1270
msgid ""
"The places map is drawn from <a href=\"https://www.naturalearthdata.com/"
"\">Natural Earth</a> land outlines and country borders, which are in the "
"public domain."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1265
#: crates/pdfs-gui/src/app/main.rs:1278
msgid ""
"The street map, when turned on, comes from <a href=\"https://openfreemap.org/"
"\">OpenFreeMap</a> in the <a href=\"https://www.openmaptiles.org/"
@@ -219,21 +219,21 @@ msgstr ""
#. Translators: replace with your name(s) and email address(es), one
#. per line, to be credited in the About dialog.
#: crates/pdfs-gui/src/app/main.rs:1276
#: crates/pdfs-gui/src/app/main.rs:1289
msgid "translator-credits"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1314
#: crates/pdfs-gui/src/app/main.rs:1327
msgid "Stop Proton Drive?"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1315
#: crates/pdfs-gui/src/app/main.rs:1328
msgid ""
"My files goes offline and nothing syncs until you connect again. Proton "
"Drive starts again at your next login."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1317 crates/pdfs-gui/src/app/main.rs:1592
#: crates/pdfs-gui/src/app/main.rs:1330 crates/pdfs-gui/src/app/main.rs:1605
#: crates/pdfs-gui/src/app/pages/albums.rs:243
#: crates/pdfs-gui/src/app/pages/albums.rs:428
#: crates/pdfs-gui/src/app/pages/browser.rs:1892
@@ -248,8 +248,8 @@ msgstr ""
#: crates/pdfs-gui/src/app/pages/locations.rs:1013
#: crates/pdfs-gui/src/app/pages/locations.rs:1488
#: crates/pdfs-gui/src/app/pages/locations.rs:1538
#: crates/pdfs-gui/src/app/pages/login.rs:378
#: crates/pdfs-gui/src/app/pages/login.rs:492
#: crates/pdfs-gui/src/app/pages/login.rs:393
#: crates/pdfs-gui/src/app/pages/login.rs:507
#: crates/pdfs-gui/src/app/pages/photos.rs:2055
#: crates/pdfs-gui/src/app/pages/shared.rs:946
#: crates/pdfs-gui/src/app/pages/shared.rs:1027
@@ -264,30 +264,30 @@ msgstr ""
msgid "Cancel"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1318
#: crates/pdfs-gui/src/app/main.rs:1331
msgctxt "verb"
msgid "Stop"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1335
#: crates/pdfs-gui/src/app/main.rs:1348
msgid "Couldn't stop Proton Drive"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1336
#: crates/pdfs-gui/src/app/main.rs:1349
msgid "The Proton Drive service did not stop."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1372
#: crates/pdfs-gui/src/app/main.rs:1385
#: crates/pdfs-gui/src/app/pages/status.rs:254
msgid "General"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1374
#: crates/pdfs-gui/src/app/main.rs:1387
#: crates/pdfs-gui/src/app/pages/browser.rs:247
msgid "Search Drive"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1375
#: crates/pdfs-gui/src/app/main.rs:1388
#: crates/pdfs-gui/src/app/pages/browser.rs:957
#: crates/pdfs-gui/src/app/pages/devices.rs:554
#: crates/pdfs-gui/src/app/pages/shared.rs:586
@@ -296,38 +296,38 @@ msgstr ""
msgid "Refresh"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1377
#: crates/pdfs-gui/src/app/main.rs:1390
msgid "Keyboard shortcuts"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1381
#: crates/pdfs-gui/src/app/main.rs:1394
msgid "Files"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1383
#: crates/pdfs-gui/src/app/main.rs:1396
#: crates/pdfs-gui/src/app/pages/browser.rs:294
msgid "New folder"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1384
#: crates/pdfs-gui/src/app/main.rs:1397
#: crates/pdfs-gui/src/app/pages/browser.rs:290
msgid "Upload files"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1385
#: crates/pdfs-gui/src/app/main.rs:1398
msgid "Back / forward"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1386
#: crates/pdfs-gui/src/app/main.rs:1399
#: crates/pdfs-gui/src/app/pages/browser.rs:1943
msgid "Parent folder"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1387
#: crates/pdfs-gui/src/app/main.rs:1400
msgid "Grid / list"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1388
#: crates/pdfs-gui/src/app/main.rs:1401
#: crates/pdfs-gui/src/app/pages/albums.rs:298
#: crates/pdfs-gui/src/app/pages/browser.rs:1871
#: crates/pdfs-gui/src/app/pages/browser.rs:1893
@@ -336,7 +336,7 @@ msgstr ""
msgid "Rename"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1389 crates/pdfs-gui/src/app/main.rs:1409
#: crates/pdfs-gui/src/app/main.rs:1402 crates/pdfs-gui/src/app/main.rs:1422
#: crates/pdfs-gui/src/app/pages/browser.rs:357
#: crates/pdfs-gui/src/app/pages/browser.rs:900
#: crates/pdfs-gui/src/app/pages/browser.rs:932
@@ -346,73 +346,73 @@ msgstr ""
msgid "Move to Trash"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1390
#: crates/pdfs-gui/src/app/main.rs:1403
msgid "Clear the selection"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1396
#: crates/pdfs-gui/src/app/main.rs:1409
msgid "Larger thumbnails"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1397
#: crates/pdfs-gui/src/app/main.rs:1410
msgid "Smaller thumbnails"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1398
#: crates/pdfs-gui/src/app/main.rs:1411
msgid "Reset thumbnail size"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1399
#: crates/pdfs-gui/src/app/main.rs:1412
msgid "Select all"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1403
#: crates/pdfs-gui/src/app/main.rs:1416
msgid "Photo Viewer"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1405
#: crates/pdfs-gui/src/app/main.rs:1418
msgid "Previous / next photo"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1406
#: crates/pdfs-gui/src/app/main.rs:1419
msgid "First / last photo"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1407
#: crates/pdfs-gui/src/app/main.rs:1420
msgid "Show details"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1408
#: crates/pdfs-gui/src/app/main.rs:1421
msgid "Fullscreen"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1410
#: crates/pdfs-gui/src/app/main.rs:1423
msgid "Close"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1500
#: crates/pdfs-gui/src/app/main.rs:1513
msgid "Select a single item to rename it"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1660
#: crates/pdfs-gui/src/app/main.rs:1673
#: crates/pdfs-gui/src/app/pages/albums.rs:85
#: crates/pdfs-gui/src/app/pages/places.rs:104
#: crates/pdfs-gui/src/app/pages/status.rs:1371
msgid "Not connected"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1661
#: crates/pdfs-gui/src/app/main.rs:1674
msgid "The Proton Drive service isn't running."
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1669
#: crates/pdfs-gui/src/app/main.rs:1682
#: crates/pdfs-gui/src/app/pages/status.rs:336
#: crates/pdfs-gui/src/hud/mod.rs:274 crates/pdfs-gui/src/hud/mod.rs:595
#: crates/pdfs-gui/src/main.rs:453
msgid "Connecting…"
msgstr ""
#: crates/pdfs-gui/src/app/main.rs:1670
#: crates/pdfs-gui/src/app/main.rs:1683
msgid "Waiting for the Proton Drive service to start."
msgstr ""
@@ -3053,124 +3053,131 @@ msgstr ""
msgid "Signing in…"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:160
#: crates/pdfs-gui/src/app/pages/login.rs:164
msgid "Complete the verification to continue…"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:185
#: crates/pdfs-gui/src/app/pages/login.rs:197
msgid "login cancelled"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:218
#: crates/pdfs-gui/src/app/pages/login.rs:210
msgid ""
"The verification page couldn't be opened, so the sign-in was cancelled. Your "
"system may keep the web view's sandbox from starting; the troubleshooting "
"guide explains what to do."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:233
msgid "Too many sign-in attempts. Wait a few minutes and try again."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:224
#: crates/pdfs-gui/src/app/pages/login.rs:239
msgid "Couldn't reach Proton. Check your internet connection and try again."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:227
#: crates/pdfs-gui/src/app/pages/login.rs:242
msgid ""
"Signed in, but the session couldn't be saved to the system keyring. Make "
"sure a keyring (GNOME Keyring or KWallet) is running and unlocked."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:230
#: crates/pdfs-gui/src/app/pages/login.rs:245
msgid "Sign-in cancelled: no two-factor code was entered."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:233
#: crates/pdfs-gui/src/app/pages/login.rs:248
msgid "Sign-in cancelled: no mailbox password was entered."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:236
#: crates/pdfs-gui/src/app/pages/login.rs:251
msgid "That mailbox password didn't unlock your account."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:239
#: crates/pdfs-gui/src/app/pages/login.rs:254
msgid ""
"Sign-in cancelled: the verification wasn't completed. Sign in again to get a "
"new one."
msgstr ""
#. Translators: {error} is an error message, usually in English.
#: crates/pdfs-gui/src/app/pages/login.rs:244
#: crates/pdfs-gui/src/app/pages/login.rs:259
#, rust-format
msgid "Sign-in failed: {error}"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:354
#: crates/pdfs-gui/src/app/pages/login.rs:369
msgid "That mailbox password didn't unlock your account. Try again."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:356
#: crates/pdfs-gui/src/app/pages/login.rs:371
msgid ""
"This account has a separate mailbox password. Enter it to unlock your files."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:359
#: crates/pdfs-gui/src/app/pages/login.rs:374
msgid "Mailbox Password"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:365
#: crates/pdfs-gui/src/app/pages/login.rs:380
msgid "Mailbox password"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:369
#: crates/pdfs-gui/src/app/pages/login.rs:384
msgid "Keep unlocked on this computer"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:371
#: crates/pdfs-gui/src/app/pages/login.rs:386
msgid ""
"Stores the unlock in the system keyring, so Proton Drive opens without "
"asking after every login. Otherwise you enter the password once per session."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:379
#: crates/pdfs-gui/src/app/pages/login.rs:432
#: crates/pdfs-gui/src/app/pages/login.rs:394
#: crates/pdfs-gui/src/app/pages/login.rs:447
msgid "Unlock"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:431
#: crates/pdfs-gui/src/app/pages/login.rs:446
msgid "Proton Drive is locked. Enter your mailbox password to unlock it."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:460
#: crates/pdfs-gui/src/app/pages/login.rs:475
msgid "Unlocked."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:465
#: crates/pdfs-gui/src/app/pages/login.rs:480
msgid "Couldn't unlock"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:478
#: crates/pdfs-gui/src/app/pages/login.rs:493
msgid "Two-Factor Authentication"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:480
#: crates/pdfs-gui/src/app/pages/login.rs:495
msgid ""
"Enter the code from your authenticator app, or one of your recovery codes."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:486
#: crates/pdfs-gui/src/app/pages/login.rs:501
msgid "Authentication code"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:493
#: crates/pdfs-gui/src/app/pages/login.rs:508
msgid "Confirm"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:521
#: crates/pdfs-gui/src/app/pages/login.rs:536
msgid "Sign Out?"
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:523
#: crates/pdfs-gui/src/app/pages/login.rs:538
msgid ""
"Proton Drive will disconnect and stop syncing until you sign in again. Files "
"already on this computer stay where they are."
msgstr ""
#: crates/pdfs-gui/src/app/pages/login.rs:525
#: crates/pdfs-gui/src/app/pages/login.rs:540
msgid "Sign Out"
msgstr ""
@@ -5076,7 +5083,7 @@ msgstr ""
msgid "Couldn't empty the trash"
msgstr ""
#: crates/pdfs-gui/src/app/pages/verify.rs:57
#: crates/pdfs-gui/src/app/pages/verify.rs:162
msgid "Verification"
msgstr ""