fix: treat 500 as permanent failure, show error in UI
This commit is contained in:
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Slet download",
|
||||
"retryDownload": "Prøv download igen",
|
||||
"downloadQueued": "Download i kø",
|
||||
"serverErrorBitrate": "Serverfejl — filen overskrider muligvis grænsen for fjernstreaming-bitrate",
|
||||
"episodesQueued": "${count} episoder i downloadkø",
|
||||
"downloadDeleted": "Download slettet",
|
||||
"deleteConfirm": "Er du sikker på, at du vil slette \"${title}\"? Den downloadede fil fjernes fra din enhed.",
|
||||
|
||||
@@ -632,6 +632,7 @@
|
||||
"deleteDownload": "Download löschen",
|
||||
"retryDownload": "Download wiederholen",
|
||||
"downloadQueued": "Download in Warteschlange",
|
||||
"serverErrorBitrate": "Serverfehler — die Datei überschreitet möglicherweise das Remote-Streaming-Bitratenlimit",
|
||||
"episodesQueued": "${count} Episoden zum Download hinzugefügt",
|
||||
"downloadDeleted": "Download gelöscht",
|
||||
"deleteConfirm": "Möchtest du \"${title}\" wirklich löschen? Die heruntergeladene Datei wird von deinem Gerät entfernt.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Delete download",
|
||||
"retryDownload": "Retry download",
|
||||
"downloadQueued": "Download queued",
|
||||
"serverErrorBitrate": "Server error — the file may exceed the remote streaming bitrate limit",
|
||||
"episodesQueued": "${count} episodes queued for download",
|
||||
"downloadDeleted": "Download deleted",
|
||||
"deleteConfirm": "Are you sure you want to delete \"${title}\"? This will remove the downloaded file from your device.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Eliminar descarga",
|
||||
"retryDownload": "Reintentar descarga",
|
||||
"downloadQueued": "Descarga en cola",
|
||||
"serverErrorBitrate": "Error del servidor — el archivo puede exceder el límite de bitrate de transmisión remota",
|
||||
"episodesQueued": "${count} episodios en cola para descargar",
|
||||
"downloadDeleted": "Descarga eliminada",
|
||||
"deleteConfirm": "¿Estás seguro de que quieres eliminar \"${title}\"? Esto borrará el archivo descargado de tu dispositivo.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Supprimer le téléchargement",
|
||||
"retryDownload": "Réessayer le téléchargement",
|
||||
"downloadQueued": "Téléchargement en attente",
|
||||
"serverErrorBitrate": "Erreur serveur — le fichier dépasse peut-être la limite de débit du streaming à distance",
|
||||
"episodesQueued": "${count} épisodes en attente de téléchargement",
|
||||
"downloadDeleted": "Télécharger supprimé",
|
||||
"deleteConfirm": "Êtes-vous sûr de vouloir supprimer \"${title}\" ? Cela supprimera le fichier téléchargé de votre appareil.",
|
||||
|
||||
@@ -632,6 +632,7 @@
|
||||
"deleteDownload": "Elimina download",
|
||||
"retryDownload": "Riprova download",
|
||||
"downloadQueued": "Download in coda",
|
||||
"serverErrorBitrate": "Errore del server — il file potrebbe superare il limite di bitrate dello streaming remoto",
|
||||
"episodesQueued": "${count} episodi in coda per il download",
|
||||
"downloadDeleted": "Download eliminato",
|
||||
"deleteConfirm": "Sei sicuro di voler eliminare \"${title}\"? Il file scaricato verrà rimosso dal tuo dispositivo.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "ダウンロードを削除",
|
||||
"retryDownload": "ダウンロードを再試行",
|
||||
"downloadQueued": "ダウンロードをキューに追加しました",
|
||||
"serverErrorBitrate": "サーバーエラー — ファイルがリモートストリーミングのビットレート制限を超えている可能性があります",
|
||||
"episodesQueued": "${count}エピソードをダウンロードキューに追加しました",
|
||||
"downloadDeleted": "ダウンロードを削除しました",
|
||||
"deleteConfirm": "\"${title}\"を削除してもよろしいですか?ダウンロードしたファイルがデバイスから削除されます。",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "다운로드 삭제",
|
||||
"retryDownload": "다운로드 재시도",
|
||||
"downloadQueued": "다운로드 대기 중",
|
||||
"serverErrorBitrate": "서버 오류 — 파일이 원격 스트리밍 비트레이트 제한을 초과할 수 있습니다",
|
||||
"episodesQueued": "${count} 에피소드가 다운로드 대기열에 추가 되었습니다",
|
||||
"downloadDeleted": "다운로드 삭제됨",
|
||||
"deleteConfirm": "\"${title}\"를 삭제 하시겠습니까? 다운로드한 파일이 기기에서 삭제됩니다.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Slett nedlasting",
|
||||
"retryDownload": "Prøv nedlasting på nytt",
|
||||
"downloadQueued": "Nedlasting i kø",
|
||||
"serverErrorBitrate": "Serverfeil — filen overskrider muligens grensen for fjernstrømming-bitrate",
|
||||
"episodesQueued": "${count} episoder i nedlastingskø",
|
||||
"downloadDeleted": "Nedlasting slettet",
|
||||
"deleteConfirm": "Er du sikker på at du vil slette \"${title}\"? Dette vil fjerne den nedlastede filen fra enheten din.",
|
||||
|
||||
@@ -632,6 +632,7 @@
|
||||
"deleteDownload": "Download verwijderen",
|
||||
"retryDownload": "Download opnieuw proberen",
|
||||
"downloadQueued": "Download in wachtrij",
|
||||
"serverErrorBitrate": "Serverfout — het bestand overschrijdt mogelijk de bitrate-limiet voor remote streaming",
|
||||
"episodesQueued": "${count} afleveringen in wachtrij voor download",
|
||||
"downloadDeleted": "Download verwijderd",
|
||||
"deleteConfirm": "Weet je zeker dat je \"${title}\" wilt verwijderen? Het gedownloade bestand wordt van je apparaat verwijderd.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Usuń pobranie",
|
||||
"retryDownload": "Ponów pobieranie",
|
||||
"downloadQueued": "Pobranie w kolejce",
|
||||
"serverErrorBitrate": "Błąd serwera — plik może przekraczać limit bitrate zdalnego streamingu",
|
||||
"episodesQueued": "${count} odcinków w kolejce pobierania",
|
||||
"downloadDeleted": "Pobranie usunięte",
|
||||
"deleteConfirm": "Czy na pewno chcesz usunąć \"${title}\"? Spowoduje to usunięcie pobranego pliku z urządzenia.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Excluir download",
|
||||
"retryDownload": "Tentar download novamente",
|
||||
"downloadQueued": "Download na fila",
|
||||
"serverErrorBitrate": "Erro do servidor — o arquivo pode exceder o limite de bitrate de streaming remoto",
|
||||
"episodesQueued": "${count} episódios na fila de download",
|
||||
"downloadDeleted": "Download excluído",
|
||||
"deleteConfirm": "Tem certeza que deseja excluir \"${title}\"? Isso removerá o arquivo baixado do seu dispositivo.",
|
||||
|
||||
@@ -743,6 +743,7 @@
|
||||
"deleteDownload": "Удалить загрузку",
|
||||
"retryDownload": "Повторить загрузку",
|
||||
"downloadQueued": "Загрузка поставлена в очередь",
|
||||
"serverErrorBitrate": "Ошибка сервера — файл может превышать лимит битрейта удалённого стриминга",
|
||||
"episodesQueued": "${count} эпизодов поставлено в очередь загрузки",
|
||||
"downloadDeleted": "Загрузка удалена",
|
||||
"deleteConfirm": "Вы уверены, что хотите удалить \"${title}\"? Загруженный файл будет удалён с устройства.",
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 15
|
||||
/// Strings: 12990 (866 per locale)
|
||||
/// Strings: 13005 (867 per locale)
|
||||
///
|
||||
/// Built on 2026-04-14 at 19:56 UTC
|
||||
/// Built on 2026-04-14 at 20:28 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsDa implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Slet download';
|
||||
@override String get retryDownload => 'Prøv download igen';
|
||||
@override String get downloadQueued => 'Download i kø';
|
||||
@override String get serverErrorBitrate => 'Serverfejl — filen overskrider muligvis grænsen for fjernstreaming-bitrate';
|
||||
@override String episodesQueued({required Object count}) => '${count} episoder i downloadkø';
|
||||
@override String get downloadDeleted => 'Download slettet';
|
||||
@override String deleteConfirm({required Object title}) => 'Er du sikker på, at du vil slette "${title}"? Den downloadede fil fjernes fra din enhed.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsDa {
|
||||
'downloads.deleteDownload' => 'Slet download',
|
||||
'downloads.retryDownload' => 'Prøv download igen',
|
||||
'downloads.downloadQueued' => 'Download i kø',
|
||||
'downloads.serverErrorBitrate' => 'Serverfejl — filen overskrider muligvis grænsen for fjernstreaming-bitrate',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} episoder i downloadkø',
|
||||
'downloads.downloadDeleted' => 'Download slettet',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Er du sikker på, at du vil slette "${title}"? Den downloadede fil fjernes fra din enhed.',
|
||||
|
||||
@@ -871,6 +871,7 @@ class _TranslationsDownloadsDe implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Download löschen';
|
||||
@override String get retryDownload => 'Download wiederholen';
|
||||
@override String get downloadQueued => 'Download in Warteschlange';
|
||||
@override String get serverErrorBitrate => 'Serverfehler — die Datei überschreitet möglicherweise das Remote-Streaming-Bitratenlimit';
|
||||
@override String episodesQueued({required Object count}) => '${count} Episoden zum Download hinzugefügt';
|
||||
@override String get downloadDeleted => 'Download gelöscht';
|
||||
@override String deleteConfirm({required Object title}) => 'Möchtest du "${title}" wirklich löschen? Die heruntergeladene Datei wird von deinem Gerät entfernt.';
|
||||
@@ -1933,6 +1934,7 @@ extension on TranslationsDe {
|
||||
'downloads.deleteDownload' => 'Download löschen',
|
||||
'downloads.retryDownload' => 'Download wiederholen',
|
||||
'downloads.downloadQueued' => 'Download in Warteschlange',
|
||||
'downloads.serverErrorBitrate' => 'Serverfehler — die Datei überschreitet möglicherweise das Remote-Streaming-Bitratenlimit',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} Episoden zum Download hinzugefügt',
|
||||
'downloads.downloadDeleted' => 'Download gelöscht',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Möchtest du "${title}" wirklich löschen? Die heruntergeladene Datei wird von deinem Gerät entfernt.',
|
||||
|
||||
@@ -2282,6 +2282,9 @@ class TranslationsDownloadsEn {
|
||||
/// en: 'Download queued'
|
||||
String get downloadQueued => 'Download queued';
|
||||
|
||||
/// en: 'Server error — the file may exceed the remote streaming bitrate limit'
|
||||
String get serverErrorBitrate => 'Server error — the file may exceed the remote streaming bitrate limit';
|
||||
|
||||
/// en: '${count} episodes queued for download'
|
||||
String episodesQueued({required Object count}) => '${count} episodes queued for download';
|
||||
|
||||
@@ -3777,6 +3780,7 @@ extension on Translations {
|
||||
'downloads.deleteDownload' => 'Delete download',
|
||||
'downloads.retryDownload' => 'Retry download',
|
||||
'downloads.downloadQueued' => 'Download queued',
|
||||
'downloads.serverErrorBitrate' => 'Server error — the file may exceed the remote streaming bitrate limit',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} episodes queued for download',
|
||||
'downloads.downloadDeleted' => 'Download deleted',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Are you sure you want to delete "${title}"? This will remove the downloaded file from your device.',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsEs implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Eliminar descarga';
|
||||
@override String get retryDownload => 'Reintentar descarga';
|
||||
@override String get downloadQueued => 'Descarga en cola';
|
||||
@override String get serverErrorBitrate => 'Error del servidor — el archivo puede exceder el límite de bitrate de transmisión remota';
|
||||
@override String episodesQueued({required Object count}) => '${count} episodios en cola para descargar';
|
||||
@override String get downloadDeleted => 'Descarga eliminada';
|
||||
@override String deleteConfirm({required Object title}) => '¿Estás seguro de que quieres eliminar "${title}"? Esto borrará el archivo descargado de tu dispositivo.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsEs {
|
||||
'downloads.deleteDownload' => 'Eliminar descarga',
|
||||
'downloads.retryDownload' => 'Reintentar descarga',
|
||||
'downloads.downloadQueued' => 'Descarga en cola',
|
||||
'downloads.serverErrorBitrate' => 'Error del servidor — el archivo puede exceder el límite de bitrate de transmisión remota',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} episodios en cola para descargar',
|
||||
'downloads.downloadDeleted' => 'Descarga eliminada',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => '¿Estás seguro de que quieres eliminar "${title}"? Esto borrará el archivo descargado de tu dispositivo.',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsFr implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Supprimer le téléchargement';
|
||||
@override String get retryDownload => 'Réessayer le téléchargement';
|
||||
@override String get downloadQueued => 'Téléchargement en attente';
|
||||
@override String get serverErrorBitrate => 'Erreur serveur — le fichier dépasse peut-être la limite de débit du streaming à distance';
|
||||
@override String episodesQueued({required Object count}) => '${count} épisodes en attente de téléchargement';
|
||||
@override String get downloadDeleted => 'Télécharger supprimé';
|
||||
@override String deleteConfirm({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cela supprimera le fichier téléchargé de votre appareil.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsFr {
|
||||
'downloads.deleteDownload' => 'Supprimer le téléchargement',
|
||||
'downloads.retryDownload' => 'Réessayer le téléchargement',
|
||||
'downloads.downloadQueued' => 'Téléchargement en attente',
|
||||
'downloads.serverErrorBitrate' => 'Erreur serveur — le fichier dépasse peut-être la limite de débit du streaming à distance',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} épisodes en attente de téléchargement',
|
||||
'downloads.downloadDeleted' => 'Télécharger supprimé',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cela supprimera le fichier téléchargé de votre appareil.',
|
||||
|
||||
@@ -871,6 +871,7 @@ class _TranslationsDownloadsIt implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Elimina download';
|
||||
@override String get retryDownload => 'Riprova download';
|
||||
@override String get downloadQueued => 'Download in coda';
|
||||
@override String get serverErrorBitrate => 'Errore del server — il file potrebbe superare il limite di bitrate dello streaming remoto';
|
||||
@override String episodesQueued({required Object count}) => '${count} episodi in coda per il download';
|
||||
@override String get downloadDeleted => 'Download eliminato';
|
||||
@override String deleteConfirm({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Il file scaricato verrà rimosso dal tuo dispositivo.';
|
||||
@@ -1933,6 +1934,7 @@ extension on TranslationsIt {
|
||||
'downloads.deleteDownload' => 'Elimina download',
|
||||
'downloads.retryDownload' => 'Riprova download',
|
||||
'downloads.downloadQueued' => 'Download in coda',
|
||||
'downloads.serverErrorBitrate' => 'Errore del server — il file potrebbe superare il limite di bitrate dello streaming remoto',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} episodi in coda per il download',
|
||||
'downloads.downloadDeleted' => 'Download eliminato',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Il file scaricato verrà rimosso dal tuo dispositivo.',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsJa implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'ダウンロードを削除';
|
||||
@override String get retryDownload => 'ダウンロードを再試行';
|
||||
@override String get downloadQueued => 'ダウンロードをキューに追加しました';
|
||||
@override String get serverErrorBitrate => 'サーバーエラー — ファイルがリモートストリーミングのビットレート制限を超えている可能性があります';
|
||||
@override String episodesQueued({required Object count}) => '${count}エピソードをダウンロードキューに追加しました';
|
||||
@override String get downloadDeleted => 'ダウンロードを削除しました';
|
||||
@override String deleteConfirm({required Object title}) => '"${title}"を削除してもよろしいですか?ダウンロードしたファイルがデバイスから削除されます。';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsJa {
|
||||
'downloads.deleteDownload' => 'ダウンロードを削除',
|
||||
'downloads.retryDownload' => 'ダウンロードを再試行',
|
||||
'downloads.downloadQueued' => 'ダウンロードをキューに追加しました',
|
||||
'downloads.serverErrorBitrate' => 'サーバーエラー — ファイルがリモートストリーミングのビットレート制限を超えている可能性があります',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count}エピソードをダウンロードキューに追加しました',
|
||||
'downloads.downloadDeleted' => 'ダウンロードを削除しました',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => '"${title}"を削除してもよろしいですか?ダウンロードしたファイルがデバイスから削除されます。',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsKo implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => '다운로드 삭제';
|
||||
@override String get retryDownload => '다운로드 재시도';
|
||||
@override String get downloadQueued => '다운로드 대기 중';
|
||||
@override String get serverErrorBitrate => '서버 오류 — 파일이 원격 스트리밍 비트레이트 제한을 초과할 수 있습니다';
|
||||
@override String episodesQueued({required Object count}) => '${count} 에피소드가 다운로드 대기열에 추가 되었습니다';
|
||||
@override String get downloadDeleted => '다운로드 삭제됨';
|
||||
@override String deleteConfirm({required Object title}) => '"${title}"를 삭제 하시겠습니까? 다운로드한 파일이 기기에서 삭제됩니다.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsKo {
|
||||
'downloads.deleteDownload' => '다운로드 삭제',
|
||||
'downloads.retryDownload' => '다운로드 재시도',
|
||||
'downloads.downloadQueued' => '다운로드 대기 중',
|
||||
'downloads.serverErrorBitrate' => '서버 오류 — 파일이 원격 스트리밍 비트레이트 제한을 초과할 수 있습니다',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} 에피소드가 다운로드 대기열에 추가 되었습니다',
|
||||
'downloads.downloadDeleted' => '다운로드 삭제됨',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => '"${title}"를 삭제 하시겠습니까? 다운로드한 파일이 기기에서 삭제됩니다.',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsNb implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Slett nedlasting';
|
||||
@override String get retryDownload => 'Prøv nedlasting på nytt';
|
||||
@override String get downloadQueued => 'Nedlasting i kø';
|
||||
@override String get serverErrorBitrate => 'Serverfeil — filen overskrider muligens grensen for fjernstrømming-bitrate';
|
||||
@override String episodesQueued({required Object count}) => '${count} episoder i nedlastingskø';
|
||||
@override String get downloadDeleted => 'Nedlasting slettet';
|
||||
@override String deleteConfirm({required Object title}) => 'Er du sikker på at du vil slette "${title}"? Dette vil fjerne den nedlastede filen fra enheten din.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsNb {
|
||||
'downloads.deleteDownload' => 'Slett nedlasting',
|
||||
'downloads.retryDownload' => 'Prøv nedlasting på nytt',
|
||||
'downloads.downloadQueued' => 'Nedlasting i kø',
|
||||
'downloads.serverErrorBitrate' => 'Serverfeil — filen overskrider muligens grensen for fjernstrømming-bitrate',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} episoder i nedlastingskø',
|
||||
'downloads.downloadDeleted' => 'Nedlasting slettet',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Er du sikker på at du vil slette "${title}"? Dette vil fjerne den nedlastede filen fra enheten din.',
|
||||
|
||||
@@ -871,6 +871,7 @@ class _TranslationsDownloadsNl implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Download verwijderen';
|
||||
@override String get retryDownload => 'Download opnieuw proberen';
|
||||
@override String get downloadQueued => 'Download in wachtrij';
|
||||
@override String get serverErrorBitrate => 'Serverfout — het bestand overschrijdt mogelijk de bitrate-limiet voor remote streaming';
|
||||
@override String episodesQueued({required Object count}) => '${count} afleveringen in wachtrij voor download';
|
||||
@override String get downloadDeleted => 'Download verwijderd';
|
||||
@override String deleteConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Het gedownloade bestand wordt van je apparaat verwijderd.';
|
||||
@@ -1933,6 +1934,7 @@ extension on TranslationsNl {
|
||||
'downloads.deleteDownload' => 'Download verwijderen',
|
||||
'downloads.retryDownload' => 'Download opnieuw proberen',
|
||||
'downloads.downloadQueued' => 'Download in wachtrij',
|
||||
'downloads.serverErrorBitrate' => 'Serverfout — het bestand overschrijdt mogelijk de bitrate-limiet voor remote streaming',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} afleveringen in wachtrij voor download',
|
||||
'downloads.downloadDeleted' => 'Download verwijderd',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Het gedownloade bestand wordt van je apparaat verwijderd.',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsPl implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Usuń pobranie';
|
||||
@override String get retryDownload => 'Ponów pobieranie';
|
||||
@override String get downloadQueued => 'Pobranie w kolejce';
|
||||
@override String get serverErrorBitrate => 'Błąd serwera — plik może przekraczać limit bitrate zdalnego streamingu';
|
||||
@override String episodesQueued({required Object count}) => '${count} odcinków w kolejce pobierania';
|
||||
@override String get downloadDeleted => 'Pobranie usunięte';
|
||||
@override String deleteConfirm({required Object title}) => 'Czy na pewno chcesz usunąć "${title}"? Spowoduje to usunięcie pobranego pliku z urządzenia.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsPl {
|
||||
'downloads.deleteDownload' => 'Usuń pobranie',
|
||||
'downloads.retryDownload' => 'Ponów pobieranie',
|
||||
'downloads.downloadQueued' => 'Pobranie w kolejce',
|
||||
'downloads.serverErrorBitrate' => 'Błąd serwera — plik może przekraczać limit bitrate zdalnego streamingu',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} odcinków w kolejce pobierania',
|
||||
'downloads.downloadDeleted' => 'Pobranie usunięte',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Czy na pewno chcesz usunąć "${title}"? Spowoduje to usunięcie pobranego pliku z urządzenia.',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsPt implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Excluir download';
|
||||
@override String get retryDownload => 'Tentar download novamente';
|
||||
@override String get downloadQueued => 'Download na fila';
|
||||
@override String get serverErrorBitrate => 'Erro do servidor — o arquivo pode exceder o limite de bitrate de streaming remoto';
|
||||
@override String episodesQueued({required Object count}) => '${count} episódios na fila de download';
|
||||
@override String get downloadDeleted => 'Download excluído';
|
||||
@override String deleteConfirm({required Object title}) => 'Tem certeza que deseja excluir "${title}"? Isso removerá o arquivo baixado do seu dispositivo.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsPt {
|
||||
'downloads.deleteDownload' => 'Excluir download',
|
||||
'downloads.retryDownload' => 'Tentar download novamente',
|
||||
'downloads.downloadQueued' => 'Download na fila',
|
||||
'downloads.serverErrorBitrate' => 'Erro do servidor — o arquivo pode exceder o limite de bitrate de streaming remoto',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} episódios na fila de download',
|
||||
'downloads.downloadDeleted' => 'Download excluído',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Tem certeza que deseja excluir "${title}"? Isso removerá o arquivo baixado do seu dispositivo.',
|
||||
|
||||
@@ -1003,6 +1003,7 @@ class _TranslationsDownloadsRu implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Удалить загрузку';
|
||||
@override String get retryDownload => 'Повторить загрузку';
|
||||
@override String get downloadQueued => 'Загрузка поставлена в очередь';
|
||||
@override String get serverErrorBitrate => 'Ошибка сервера — файл может превышать лимит битрейта удалённого стриминга';
|
||||
@override String episodesQueued({required Object count}) => '${count} эпизодов поставлено в очередь загрузки';
|
||||
@override String get downloadDeleted => 'Загрузка удалена';
|
||||
@override String deleteConfirm({required Object title}) => 'Вы уверены, что хотите удалить "${title}"? Загруженный файл будет удалён с устройства.';
|
||||
@@ -2038,6 +2039,7 @@ extension on TranslationsRu {
|
||||
'downloads.deleteDownload' => 'Удалить загрузку',
|
||||
'downloads.retryDownload' => 'Повторить загрузку',
|
||||
'downloads.downloadQueued' => 'Загрузка поставлена в очередь',
|
||||
'downloads.serverErrorBitrate' => 'Ошибка сервера — файл может превышать лимит битрейта удалённого стриминга',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} эпизодов поставлено в очередь загрузки',
|
||||
'downloads.downloadDeleted' => 'Загрузка удалена',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Вы уверены, что хотите удалить "${title}"? Загруженный файл будет удалён с устройства.',
|
||||
|
||||
@@ -871,6 +871,7 @@ class _TranslationsDownloadsSv implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => 'Ta bort nedladdning';
|
||||
@override String get retryDownload => 'Försök igen';
|
||||
@override String get downloadQueued => 'Nedladdning köad';
|
||||
@override String get serverErrorBitrate => 'Serverfel — filen överskrider möjligen gränsen för fjärrströmning-bitrate';
|
||||
@override String episodesQueued({required Object count}) => '${count} avsnitt köade för nedladdning';
|
||||
@override String get downloadDeleted => 'Nedladdning borttagen';
|
||||
@override String deleteConfirm({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Den nedladdade filen kommer att tas bort från din enhet.';
|
||||
@@ -1933,6 +1934,7 @@ extension on TranslationsSv {
|
||||
'downloads.deleteDownload' => 'Ta bort nedladdning',
|
||||
'downloads.retryDownload' => 'Försök igen',
|
||||
'downloads.downloadQueued' => 'Nedladdning köad',
|
||||
'downloads.serverErrorBitrate' => 'Serverfel — filen överskrider möjligen gränsen för fjärrströmning-bitrate',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} avsnitt köade för nedladdning',
|
||||
'downloads.downloadDeleted' => 'Nedladdning borttagen',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Den nedladdade filen kommer att tas bort från din enhet.',
|
||||
|
||||
@@ -871,6 +871,7 @@ class _TranslationsDownloadsZh implements TranslationsDownloadsEn {
|
||||
@override String get deleteDownload => '删除下载';
|
||||
@override String get retryDownload => '重试下载';
|
||||
@override String get downloadQueued => '下载已排队';
|
||||
@override String get serverErrorBitrate => '服务器错误 — 文件可能超出远程流媒体比特率限制';
|
||||
@override String episodesQueued({required Object count}) => '${count} 集已加入下载队列';
|
||||
@override String get downloadDeleted => '下载已删除';
|
||||
@override String deleteConfirm({required Object title}) => '确定要删除 "${title}" 吗?下载的文件将从您的设备中删除。';
|
||||
@@ -1933,6 +1934,7 @@ extension on TranslationsZh {
|
||||
'downloads.deleteDownload' => '删除下载',
|
||||
'downloads.retryDownload' => '重试下载',
|
||||
'downloads.downloadQueued' => '下载已排队',
|
||||
'downloads.serverErrorBitrate' => '服务器错误 — 文件可能超出远程流媒体比特率限制',
|
||||
'downloads.episodesQueued' => ({required Object count}) => '${count} 集已加入下载队列',
|
||||
'downloads.downloadDeleted' => '下载已删除',
|
||||
'downloads.deleteConfirm' => ({required Object title}) => '确定要删除 "${title}" 吗?下载的文件将从您的设备中删除。',
|
||||
|
||||
@@ -632,6 +632,7 @@
|
||||
"deleteDownload": "Ta bort nedladdning",
|
||||
"retryDownload": "Försök igen",
|
||||
"downloadQueued": "Nedladdning köad",
|
||||
"serverErrorBitrate": "Serverfel — filen överskrider möjligen gränsen för fjärrströmning-bitrate",
|
||||
"episodesQueued": "${count} avsnitt köade för nedladdning",
|
||||
"downloadDeleted": "Nedladdning borttagen",
|
||||
"deleteConfirm": "Är du säker på att du vill ta bort \"${title}\"? Den nedladdade filen kommer att tas bort från din enhet.",
|
||||
|
||||
@@ -632,6 +632,7 @@
|
||||
"deleteDownload": "删除下载",
|
||||
"retryDownload": "重试下载",
|
||||
"downloadQueued": "下载已排队",
|
||||
"serverErrorBitrate": "服务器错误 — 文件可能超出远程流媒体比特率限制",
|
||||
"episodesQueued": "${count} 集已加入下载队列",
|
||||
"downloadDeleted": "下载已删除",
|
||||
"deleteConfirm": "确定要删除 \"${title}\" 吗?下载的文件将从您的设备中删除。",
|
||||
|
||||
@@ -106,6 +106,7 @@ class DownloadProvider extends ChangeNotifier {
|
||||
progress: item.progress,
|
||||
downloadedBytes: item.downloadedBytes,
|
||||
totalBytes: item.totalBytes ?? 0,
|
||||
errorMessage: item.errorMessage,
|
||||
);
|
||||
|
||||
// Store Plex thumb path reference (file path computed from hash when needed)
|
||||
|
||||
@@ -15,6 +15,7 @@ import '../models/plex_media_info.dart';
|
||||
import '../services/plex_client.dart';
|
||||
import '../services/download_storage_service.dart';
|
||||
import '../services/plex_api_cache.dart';
|
||||
import '../i18n/strings.g.dart';
|
||||
import '../utils/app_logger.dart';
|
||||
import '../utils/codec_utils.dart';
|
||||
import '../utils/global_key_utils.dart';
|
||||
@@ -742,11 +743,12 @@ class DownloadManagerService {
|
||||
errorMessage.contains('No address associated with hostname') ||
|
||||
errorMessage.contains('Network is unreachable') ||
|
||||
errorMessage.contains('Connection refused');
|
||||
final isServerError = errorMessage.contains('500 Internal Server Error');
|
||||
|
||||
final client = _getClient(parseGlobalKey(globalKey)?.serverId);
|
||||
final hadProgress = (existing?.downloadedBytes ?? 0) > 0;
|
||||
|
||||
if (!isNetworkError && retryCount < _maxAppRetries && client != null) {
|
||||
if (!isNetworkError && !isServerError && retryCount < _maxAppRetries && client != null) {
|
||||
// App-level auto-retry: schedule a fresh download after a delay.
|
||||
// Each new task gets 5 native retries with Range-based resume.
|
||||
appLogger.w(
|
||||
@@ -768,7 +770,10 @@ class DownloadManagerService {
|
||||
if (isNetworkError) {
|
||||
appLogger.w('Network error for $globalKey, failing permanently (no auto-retry): $errorMessage');
|
||||
}
|
||||
await _onDownloadPermanentlyFailed(globalKey, errorMessage);
|
||||
final userMessage = isServerError
|
||||
? t.downloads.serverErrorBitrate
|
||||
: errorMessage;
|
||||
await _onDownloadPermanentlyFailed(globalKey, userMessage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -689,6 +689,18 @@ class _DownloadTreeItemState extends State<_DownloadTreeItem> {
|
||||
style: theme.textTheme.bodySmall?.copyWith(color: theme.colorScheme.onSurface.withValues(alpha: 0.5)),
|
||||
),
|
||||
],
|
||||
|
||||
// Error message for failed downloads
|
||||
if (_effectiveStatus == DownloadStatus.failed &&
|
||||
widget.node.downloadProgress?.errorMessage != null) ...[
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
widget.node.downloadProgress!.errorMessage!,
|
||||
style: theme.textTheme.bodySmall?.copyWith(color: Colors.red.withValues(alpha: 0.8)),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user