fix(startup): report and repair a failed launch instead of showing "Error"
Since 2.10.0 the whole app sits behind one all-or-nothing initialization gate, and that gate discarded the only evidence of its own failure. It caught the error, logged nothing but `error.runtimeType`, rendered an icon plus the word "Error" plus Retry, and never reported the error because catching it kept the crash reporter from ever seeing it. There is no log file on any platform, the buffer is in memory only, a double-clicked Windows release build has no console, and the log viewer lives in Settings, behind the gate that just failed. #1732 is the result: a Windows 11 user whose app will not boot and who cannot produce a single byte of diagnostic detail. The gate now names its phases. Each step is wrapped so a throw carries the phase it came from, replacing a `Future.wait` that discarded every error but the first and could not attribute it to any of four concurrent steps. The failure screen renders the phase, the exception type, the message and an expandable stack, plus copy and upload actions that reuse the existing log-relay flow. The record is persisted next to the database so the next successful launch can surface it in Settings > Logs, and it is reported to the crash reporter explicitly. Only preferences and the database still gate the launch. Window chrome, locale, crash-reporting init, TV/performance detection, the image-cache budget and download storage are best-effort and time-bounded, so a stalled platform thread degrades instead of holding the splash forever. Sentry no longer receives the startup work as its `appRunner`: that made a startup failure indistinguishable from a Sentry failure, and the guard would then have re-run migrations and the database open a second time. The two remaining fatal steps become recoverable. Preference reads tolerate a value whose stored type no longer matches, dropping the key and defaulting instead of failing the boot. A store that cannot be parsed is detected before either desktop plugin backend can memoise it, which is what makes an in-process repair possible at all. Repair is never automatic: it states what it will cost, salvages the credential-vault key and every tracker and Seerr session it can validate out of the damaged bytes, reseeds them, and moves the original aside rather than deleting it. Servers and profiles survive a salvaged key because their tokens are ciphertext in the database; tracker and Seerr sessions are plaintext preference entries, so the copy says they may still need reconnecting. Nothing derived from the store reaches a diagnostic. `FormatException` prints an excerpt of whatever it failed to parse, and during startup that document holds the vault key, refresh tokens and session cookies while the redaction manager still has nothing registered, so the wrapper keeps only the cause's type and offset and the record is an allowlist of already-redacted fields. The quarantined copy is labelled as containing credentials, is never offered for upload, and can be deleted from the dialog. Also self-heals orphaned WAL/SHM sidecars on desktop rather than only tvOS, makes every `createTable` migration step idempotent, keeps MSVC link by-products out of the Windows bundle, and asserts bundle contents in CI. Refs #1732
This commit is contained in:
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Jurnalları kopyala",
|
||||
"uploadLogs": "Jurnalları yüklə"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Əlaqəli paketlər",
|
||||
"license": "Lisenziya",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Копирай логовете",
|
||||
"uploadLogs": "Качи логовете"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Свързани пакети",
|
||||
"license": "Лиценз",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Kopiér logfiler",
|
||||
"uploadLogs": "Upload logfiler"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Relaterede pakker",
|
||||
"license": "Licens",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Protokolle kopieren",
|
||||
"uploadLogs": "Protokolle hochladen"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Verwandte Pakete",
|
||||
"license": "Lizenz",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Copy Logs",
|
||||
"uploadLogs": "Upload Logs"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "Plezy could not start",
|
||||
"failedBody": "Something went wrong during startup. The details below identify what failed.",
|
||||
"phaseLabel": "Step",
|
||||
"showDetails": "Show details",
|
||||
"hideDetails": "Hide details",
|
||||
"copyDetails": "Copy details",
|
||||
"detailsCopied": "Details copied to clipboard",
|
||||
"uploadDetails": "Upload details",
|
||||
"repairStorage": "Repair storage",
|
||||
"repairTitle": "Repair stored data?",
|
||||
"repairBodyCommon": "Plezy's settings file is damaged and cannot be read. Repairing resets every setting to its default.",
|
||||
"repairBodyOneCredential": "One saved sign-in is damaged and cannot be read. Repairing removes just that one; your other settings are left alone.",
|
||||
"repairBodySessionsAtRisk": "Servers and profiles normally stay signed in, but trackers (MAL, AniList, Simkl, Trakt) and Seerr may need to be reconnected. Plezy will tell you exactly what it kept.",
|
||||
"repairConfirm": "Repair",
|
||||
"repairSucceeded": "Storage repaired",
|
||||
"repairNeedsRestart": "Storage repaired — restart required",
|
||||
"repairFailed": "Repair failed",
|
||||
"repairKeptSignIns": "Your servers and profiles are still signed in.",
|
||||
"repairLostSignIns": "The key protecting your saved sign-ins could not be recovered. You will have to sign in to every server and profile again.",
|
||||
"repairLostSessions": "At least one tracker or Seerr connection was lost and has to be reconnected.",
|
||||
"backupTitle": "A copy of the damaged file was kept",
|
||||
"backupWarning": "It contains your sign-in credentials. Do not upload or share it.",
|
||||
"deleteBackup": "Delete copy",
|
||||
"backupDeleted": "Copy deleted.",
|
||||
"previousFailureTitle": "Plezy failed to start last time"
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Related Packages",
|
||||
"license": "License",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Copiar registros",
|
||||
"uploadLogs": "Subir registros"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Paquetes relacionados",
|
||||
"license": "Licencia",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Copier les journaux",
|
||||
"uploadLogs": "Envoyer les journaux"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Paquets associés",
|
||||
"license": "Licence",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Naplók másolása",
|
||||
"uploadLogs": "Naplók feltöltése"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Kapcsolódó csomagok",
|
||||
"license": "Licenc",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Copia log",
|
||||
"uploadLogs": "Carica log"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Pacchetti correlati",
|
||||
"license": "Licenza",
|
||||
|
||||
@@ -968,6 +968,33 @@
|
||||
"copyLogs": "ログをコピー",
|
||||
"uploadLogs": "ログをアップロード"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "関連パッケージ",
|
||||
"license": "ライセンス",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Журналдарды көшіру",
|
||||
"uploadLogs": "Журналдарды жүктеу"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Байланысты пакеттер",
|
||||
"license": "Лицензия",
|
||||
|
||||
@@ -968,6 +968,33 @@
|
||||
"copyLogs": "로그 복사",
|
||||
"uploadLogs": "로그 업로드"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "관련 소프트웨어 패키지",
|
||||
"license": "라이선스",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Kopier logger",
|
||||
"uploadLogs": "Last opp logger"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Relaterte pakker",
|
||||
"license": "Lisens",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Logbestanden kopiëren",
|
||||
"uploadLogs": "Logbestanden uploaden"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Gerelateerde pakketten",
|
||||
"license": "Licentie",
|
||||
|
||||
@@ -971,6 +971,33 @@
|
||||
"copyLogs": "Kopiuj logi",
|
||||
"uploadLogs": "Prześlij logi"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Powiązane pakiety",
|
||||
"license": "Licencja",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Copiar Logs",
|
||||
"uploadLogs": "Enviar Logs"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Pacotes Relacionados",
|
||||
"license": "Licença",
|
||||
|
||||
@@ -971,6 +971,33 @@
|
||||
"copyLogs": "Скопировать логи",
|
||||
"uploadLogs": "Загрузить логи"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Связанные пакеты",
|
||||
"license": "Лицензия",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 22
|
||||
/// Strings: 32913 (1496 per locale)
|
||||
/// Strings: 32938 (1497 per locale)
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
||||
+114
-4
@@ -68,6 +68,7 @@ class Translations with BaseTranslations<AppLocale, Translations> {
|
||||
late final Translations$serverSelection$en serverSelection = Translations$serverSelection$en.internal(_root);
|
||||
late final Translations$hubDetail$en hubDetail = Translations$hubDetail$en.internal(_root);
|
||||
late final Translations$logs$en logs = Translations$logs$en.internal(_root);
|
||||
late final Translations$startup$en startup = Translations$startup$en.internal(_root);
|
||||
late final Translations$licenses$en licenses = Translations$licenses$en.internal(_root);
|
||||
late final Translations$navigation$en navigation = Translations$navigation$en.internal(_root);
|
||||
late final Translations$explore$en explore = Translations$explore$en.internal(_root);
|
||||
@@ -2830,6 +2831,90 @@ class Translations$logs$en {
|
||||
String get uploadLogs => 'Upload Logs';
|
||||
}
|
||||
|
||||
// Path: startup
|
||||
class Translations$startup$en {
|
||||
Translations$startup$en.internal(this._root);
|
||||
|
||||
final Translations _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
|
||||
/// en: 'Plezy could not start'
|
||||
String get failedTitle => 'Plezy could not start';
|
||||
|
||||
/// en: 'Something went wrong during startup. The details below identify what failed.'
|
||||
String get failedBody => 'Something went wrong during startup. The details below identify what failed.';
|
||||
|
||||
/// en: 'Step'
|
||||
String get phaseLabel => 'Step';
|
||||
|
||||
/// en: 'Show details'
|
||||
String get showDetails => 'Show details';
|
||||
|
||||
/// en: 'Hide details'
|
||||
String get hideDetails => 'Hide details';
|
||||
|
||||
/// en: 'Copy details'
|
||||
String get copyDetails => 'Copy details';
|
||||
|
||||
/// en: 'Details copied to clipboard'
|
||||
String get detailsCopied => 'Details copied to clipboard';
|
||||
|
||||
/// en: 'Upload details'
|
||||
String get uploadDetails => 'Upload details';
|
||||
|
||||
/// en: 'Repair storage'
|
||||
String get repairStorage => 'Repair storage';
|
||||
|
||||
/// en: 'Repair stored data?'
|
||||
String get repairTitle => 'Repair stored data?';
|
||||
|
||||
/// en: 'Plezy's settings file is damaged and cannot be read. Repairing resets every setting to its default.'
|
||||
String get repairBodyCommon => 'Plezy\'s settings file is damaged and cannot be read. Repairing resets every setting to its default.';
|
||||
|
||||
/// en: 'One saved sign-in is damaged and cannot be read. Repairing removes just that one; your other settings are left alone.'
|
||||
String get repairBodyOneCredential => 'One saved sign-in is damaged and cannot be read. Repairing removes just that one; your other settings are left alone.';
|
||||
|
||||
/// en: 'Servers and profiles normally stay signed in, but trackers (MAL, AniList, Simkl, Trakt) and Seerr may need to be reconnected. Plezy will tell you exactly what it kept.'
|
||||
String get repairBodySessionsAtRisk => 'Servers and profiles normally stay signed in, but trackers (MAL, AniList, Simkl, Trakt) and Seerr may need to be reconnected. Plezy will tell you exactly what it kept.';
|
||||
|
||||
/// en: 'Repair'
|
||||
String get repairConfirm => 'Repair';
|
||||
|
||||
/// en: 'Storage repaired'
|
||||
String get repairSucceeded => 'Storage repaired';
|
||||
|
||||
/// en: 'Storage repaired — restart required'
|
||||
String get repairNeedsRestart => 'Storage repaired — restart required';
|
||||
|
||||
/// en: 'Repair failed'
|
||||
String get repairFailed => 'Repair failed';
|
||||
|
||||
/// en: 'Your servers and profiles are still signed in.'
|
||||
String get repairKeptSignIns => 'Your servers and profiles are still signed in.';
|
||||
|
||||
/// en: 'The key protecting your saved sign-ins could not be recovered. You will have to sign in to every server and profile again.'
|
||||
String get repairLostSignIns => 'The key protecting your saved sign-ins could not be recovered. You will have to sign in to every server and profile again.';
|
||||
|
||||
/// en: 'At least one tracker or Seerr connection was lost and has to be reconnected.'
|
||||
String get repairLostSessions => 'At least one tracker or Seerr connection was lost and has to be reconnected.';
|
||||
|
||||
/// en: 'A copy of the damaged file was kept'
|
||||
String get backupTitle => 'A copy of the damaged file was kept';
|
||||
|
||||
/// en: 'It contains your sign-in credentials. Do not upload or share it.'
|
||||
String get backupWarning => 'It contains your sign-in credentials. Do not upload or share it.';
|
||||
|
||||
/// en: 'Delete copy'
|
||||
String get deleteBackup => 'Delete copy';
|
||||
|
||||
/// en: 'Copy deleted.'
|
||||
String get backupDeleted => 'Copy deleted.';
|
||||
|
||||
/// en: 'Plezy failed to start last time'
|
||||
String get previousFailureTitle => 'Plezy failed to start last time';
|
||||
}
|
||||
|
||||
// Path: licenses
|
||||
class Translations$licenses$en {
|
||||
Translations$licenses$en.internal(this._root);
|
||||
@@ -6825,6 +6910,31 @@ extension on Translations {
|
||||
'logs.clearLogs' => 'Clear Logs',
|
||||
'logs.copyLogs' => 'Copy Logs',
|
||||
'logs.uploadLogs' => 'Upload Logs',
|
||||
'startup.failedTitle' => 'Plezy could not start',
|
||||
'startup.failedBody' => 'Something went wrong during startup. The details below identify what failed.',
|
||||
'startup.phaseLabel' => 'Step',
|
||||
'startup.showDetails' => 'Show details',
|
||||
'startup.hideDetails' => 'Hide details',
|
||||
'startup.copyDetails' => 'Copy details',
|
||||
'startup.detailsCopied' => 'Details copied to clipboard',
|
||||
'startup.uploadDetails' => 'Upload details',
|
||||
'startup.repairStorage' => 'Repair storage',
|
||||
'startup.repairTitle' => 'Repair stored data?',
|
||||
'startup.repairBodyCommon' => 'Plezy\'s settings file is damaged and cannot be read. Repairing resets every setting to its default.',
|
||||
'startup.repairBodyOneCredential' => 'One saved sign-in is damaged and cannot be read. Repairing removes just that one; your other settings are left alone.',
|
||||
'startup.repairBodySessionsAtRisk' => 'Servers and profiles normally stay signed in, but trackers (MAL, AniList, Simkl, Trakt) and Seerr may need to be reconnected. Plezy will tell you exactly what it kept.',
|
||||
'startup.repairConfirm' => 'Repair',
|
||||
'startup.repairSucceeded' => 'Storage repaired',
|
||||
'startup.repairNeedsRestart' => 'Storage repaired — restart required',
|
||||
'startup.repairFailed' => 'Repair failed',
|
||||
'startup.repairKeptSignIns' => 'Your servers and profiles are still signed in.',
|
||||
'startup.repairLostSignIns' => 'The key protecting your saved sign-ins could not be recovered. You will have to sign in to every server and profile again.',
|
||||
'startup.repairLostSessions' => 'At least one tracker or Seerr connection was lost and has to be reconnected.',
|
||||
'startup.backupTitle' => 'A copy of the damaged file was kept',
|
||||
'startup.backupWarning' => 'It contains your sign-in credentials. Do not upload or share it.',
|
||||
'startup.deleteBackup' => 'Delete copy',
|
||||
'startup.backupDeleted' => 'Copy deleted.',
|
||||
'startup.previousFailureTitle' => 'Plezy failed to start last time',
|
||||
'licenses.relatedPackages' => 'Related Packages',
|
||||
'licenses.license' => 'License',
|
||||
'licenses.licenseNumber' => ({required Object number}) => 'License ${number}',
|
||||
@@ -6926,6 +7036,8 @@ extension on Translations {
|
||||
'explore.sourceMaterial.game' => 'Game',
|
||||
'explore.sourceMaterial.webComic' => 'Web comic',
|
||||
'explore.sourceMaterial.musicRelease' => 'Music',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'explore.sourceMaterial.otherMedia' => 'Other',
|
||||
'explore.creditRole.director' => 'Director',
|
||||
'explore.creditRole.writer' => 'Writer',
|
||||
@@ -6951,8 +7063,6 @@ extension on Translations {
|
||||
'explore.detail.country' => 'Country',
|
||||
'explore.detail.language' => 'Language',
|
||||
'explore.detail.released' => 'Released',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'explore.detail.physicalRelease' => 'On disc',
|
||||
'explore.detail.ended' => 'Ended',
|
||||
'explore.detail.addedOn' => ({required Object date}) => 'Added ${date}',
|
||||
@@ -7440,6 +7550,8 @@ extension on Translations {
|
||||
'metadataEdit.artwork' => 'Artwork',
|
||||
'metadataEdit.advancedSettings' => 'Advanced Settings',
|
||||
'metadataEdit.title' => 'Title',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'metadataEdit.sortTitle' => 'Sort Title',
|
||||
'metadataEdit.originalTitle' => 'Original Title',
|
||||
'metadataEdit.releaseDate' => 'Release Date',
|
||||
@@ -7465,8 +7577,6 @@ extension on Translations {
|
||||
'metadataEdit.artworkUpdateFailed' => 'Failed to update artwork',
|
||||
'metadataEdit.noArtworkAvailable' => 'No artwork available',
|
||||
'metadataEdit.artworkOption' => ({required Object index}) => 'Artwork option ${index}',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'metadataEdit.selectedArtworkOption' => ({required Object index}) => 'Artwork option ${index}, selected',
|
||||
'metadataEdit.notSet' => 'Not set',
|
||||
'metadataEdit.libraryDefault' => 'Library default',
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Kopiera loggar",
|
||||
"uploadLogs": "Ladda upp loggar"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Relaterade paket",
|
||||
"license": "Licens",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Günlükleri Kopyala",
|
||||
"uploadLogs": "Günlükleri Yükle"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "İlgili Paketler",
|
||||
"license": "Lisans",
|
||||
|
||||
@@ -969,6 +969,33 @@
|
||||
"copyLogs": "Jurnallarni nusxalash",
|
||||
"uploadLogs": "Jurnallarni yuklash"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "Bogʻliq paketlar",
|
||||
"license": "Litsenziya",
|
||||
|
||||
@@ -968,6 +968,33 @@
|
||||
"copyLogs": "複製日誌",
|
||||
"uploadLogs": "上傳日誌"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "相關套件",
|
||||
"license": "授權",
|
||||
|
||||
@@ -968,6 +968,33 @@
|
||||
"copyLogs": "复制日志",
|
||||
"uploadLogs": "上传日志"
|
||||
},
|
||||
"startup": {
|
||||
"failedTitle": "",
|
||||
"failedBody": "",
|
||||
"phaseLabel": "",
|
||||
"showDetails": "",
|
||||
"hideDetails": "",
|
||||
"copyDetails": "",
|
||||
"detailsCopied": "",
|
||||
"uploadDetails": "",
|
||||
"repairStorage": "",
|
||||
"repairTitle": "",
|
||||
"repairBodyCommon": "",
|
||||
"repairBodyOneCredential": "",
|
||||
"repairBodySessionsAtRisk": "",
|
||||
"repairConfirm": "",
|
||||
"repairSucceeded": "",
|
||||
"repairNeedsRestart": "",
|
||||
"repairFailed": "",
|
||||
"repairKeptSignIns": "",
|
||||
"repairLostSignIns": "",
|
||||
"repairLostSessions": "",
|
||||
"backupTitle": "",
|
||||
"backupWarning": "",
|
||||
"deleteBackup": "",
|
||||
"backupDeleted": "",
|
||||
"previousFailureTitle": ""
|
||||
},
|
||||
"licenses": {
|
||||
"relatedPackages": "相关软件包",
|
||||
"license": "许可证",
|
||||
|
||||
Reference in New Issue
Block a user