Merge branch 'feature/server-tasks'
This commit is contained in:
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Opdaterer servere...",
|
||||
"loadingServers": "Indlæser servere...",
|
||||
"connectingToServers": "Forbinder til servere...",
|
||||
"startingOfflineMode": "Starter offlinetilstand..."
|
||||
"startingOfflineMode": "Starter offlinetilstand...",
|
||||
"loading": "Indlæser..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licenser",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Manuelt valgt",
|
||||
"shownWithForeignAudio": "Vist med fremmedsproget lyd",
|
||||
"alwaysEnabled": "Altid aktiveret"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Serveropgaver",
|
||||
"failedToLoad": "Kunne ikke indlæse opgaver",
|
||||
"noTasks": "Ingen opgaver kører"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Server werden aktualisiert...",
|
||||
"loadingServers": "Server werden geladen...",
|
||||
"connectingToServers": "Verbindung zu Servern...",
|
||||
"startingOfflineMode": "Offlinemodus wird gestartet..."
|
||||
"startingOfflineMode": "Offlinemodus wird gestartet...",
|
||||
"loading": "Laden..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Lizenzen",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Manuell ausgewählt",
|
||||
"shownWithForeignAudio": "Bei fremdsprachigem Audio anzeigen",
|
||||
"alwaysEnabled": "Immer aktiviert"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Serveraufgaben",
|
||||
"failedToLoad": "Aufgaben konnten nicht geladen werden",
|
||||
"noTasks": "Keine laufenden Aufgaben"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Refreshing servers...",
|
||||
"loadingServers": "Loading servers...",
|
||||
"connectingToServers": "Connecting to servers...",
|
||||
"startingOfflineMode": "Starting offline mode..."
|
||||
"startingOfflineMode": "Starting offline mode...",
|
||||
"loading": "Loading..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licenses",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Manually selected",
|
||||
"shownWithForeignAudio": "Shown with foreign audio",
|
||||
"alwaysEnabled": "Always enabled"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Server Tasks",
|
||||
"failedToLoad": "Failed to load tasks",
|
||||
"noTasks": "No tasks running"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Actualizando servidores...",
|
||||
"loadingServers": "Cargando servidores...",
|
||||
"connectingToServers": "Conectando a servidores...",
|
||||
"startingOfflineMode": "Iniciando modo sin conexión..."
|
||||
"startingOfflineMode": "Iniciando modo sin conexión...",
|
||||
"loading": "Cargando..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licencias",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Seleccionado manualmente",
|
||||
"shownWithForeignAudio": "Mostrar con audio extranjero",
|
||||
"alwaysEnabled": "Siempre activado"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Tareas del servidor",
|
||||
"failedToLoad": "Error al cargar tareas",
|
||||
"noTasks": "No hay tareas en ejecución"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Actualisation des serveurs...",
|
||||
"loadingServers": "Chargement des serveurs...",
|
||||
"connectingToServers": "Connexion aux serveurs...",
|
||||
"startingOfflineMode": "Démarrage en mode hors-ligne..."
|
||||
"startingOfflineMode": "Démarrage en mode hors-ligne...",
|
||||
"loading": "Chargement..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licenses",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Sélectionné manuellement",
|
||||
"shownWithForeignAudio": "Affichés avec audio étranger",
|
||||
"alwaysEnabled": "Toujours activé"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Tâches du serveur",
|
||||
"failedToLoad": "Échec du chargement des tâches",
|
||||
"noTasks": "Aucune tâche en cours"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Aggiornamento server...",
|
||||
"loadingServers": "Caricamento server...",
|
||||
"connectingToServers": "Connessione ai server...",
|
||||
"startingOfflineMode": "Avvio modalità offline..."
|
||||
"startingOfflineMode": "Avvio modalità offline...",
|
||||
"loading": "Caricamento..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licenze",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Selezionato manualmente",
|
||||
"shownWithForeignAudio": "Mostrati con audio straniero",
|
||||
"alwaysEnabled": "Sempre attivo"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Attività del server",
|
||||
"failedToLoad": "Impossibile caricare le attività",
|
||||
"noTasks": "Nessuna attività in corso"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "サーバーを更新中...",
|
||||
"loadingServers": "サーバーを読み込み中...",
|
||||
"connectingToServers": "サーバーに接続中...",
|
||||
"startingOfflineMode": "オフラインモードを開始中..."
|
||||
"startingOfflineMode": "オフラインモードを開始中...",
|
||||
"loading": "読み込み中..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "ライセンス",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "手動選択",
|
||||
"shownWithForeignAudio": "外国語音声時に表示",
|
||||
"alwaysEnabled": "常に有効"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "サーバータスク",
|
||||
"failedToLoad": "タスクの読み込みに失敗しました",
|
||||
"noTasks": "実行中のタスクはありません"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "서버 새로고침 중...",
|
||||
"loadingServers": "서버 로딩 중...",
|
||||
"connectingToServers": "서버 연결 중...",
|
||||
"startingOfflineMode": "오프라인 모드 시작 중..."
|
||||
"startingOfflineMode": "오프라인 모드 시작 중...",
|
||||
"loading": "로딩 중..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "라이선스",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "수동 선택",
|
||||
"shownWithForeignAudio": "외국어 오디오 시 표시",
|
||||
"alwaysEnabled": "항상 활성화"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "서버 작업",
|
||||
"failedToLoad": "작업을 불러올 수 없습니다",
|
||||
"noTasks": "실행 중인 작업 없음"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Oppdaterer servere...",
|
||||
"loadingServers": "Laster servere...",
|
||||
"connectingToServers": "Kobler til servere...",
|
||||
"startingOfflineMode": "Starter frakoblet modus..."
|
||||
"startingOfflineMode": "Starter frakoblet modus...",
|
||||
"loading": "Laster..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Lisenser",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Manuelt valgt",
|
||||
"shownWithForeignAudio": "Vist med fremmedspråklig lyd",
|
||||
"alwaysEnabled": "Alltid aktivert"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Serveroppgaver",
|
||||
"failedToLoad": "Kunne ikke laste oppgaver",
|
||||
"noTasks": "Ingen oppgaver kjører"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Servers vernieuwen...",
|
||||
"loadingServers": "Servers laden...",
|
||||
"connectingToServers": "Verbinden met servers...",
|
||||
"startingOfflineMode": "Offlinemodus starten..."
|
||||
"startingOfflineMode": "Offlinemodus starten...",
|
||||
"loading": "Laden..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licenties",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Handmatig geselecteerd",
|
||||
"shownWithForeignAudio": "Weergeven bij anderstalig geluid",
|
||||
"alwaysEnabled": "Altijd ingeschakeld"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Servertaken",
|
||||
"failedToLoad": "Taken konden niet worden geladen",
|
||||
"noTasks": "Geen actieve taken"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Odświeżanie serwerów...",
|
||||
"loadingServers": "Ładowanie serwerów...",
|
||||
"connectingToServers": "Łączenie z serwerami...",
|
||||
"startingOfflineMode": "Uruchamianie trybu offline..."
|
||||
"startingOfflineMode": "Uruchamianie trybu offline...",
|
||||
"loading": "Ładowanie..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licencje",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Wybrany ręcznie",
|
||||
"shownWithForeignAudio": "Wyświetlane przy obcojęzycznym audio",
|
||||
"alwaysEnabled": "Zawsze włączone"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Zadania serwera",
|
||||
"failedToLoad": "Nie udało się załadować zadań",
|
||||
"noTasks": "Brak uruchomionych zadań"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Atualizando servidores...",
|
||||
"loadingServers": "Carregando servidores...",
|
||||
"connectingToServers": "Conectando aos servidores...",
|
||||
"startingOfflineMode": "Iniciando modo offline..."
|
||||
"startingOfflineMode": "Iniciando modo offline...",
|
||||
"loading": "Carregando..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licenças",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Seleção manual",
|
||||
"shownWithForeignAudio": "Exibir com áudio estrangeiro",
|
||||
"alwaysEnabled": "Sempre ativado"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Tarefas do servidor",
|
||||
"failedToLoad": "Falha ao carregar tarefas",
|
||||
"noTasks": "Nenhuma tarefa em execução"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Обновление серверов...",
|
||||
"loadingServers": "Загрузка серверов...",
|
||||
"connectingToServers": "Подключение к серверам...",
|
||||
"startingOfflineMode": "Запуск автономного режима..."
|
||||
"startingOfflineMode": "Запуск автономного режима...",
|
||||
"loading": "Загрузка..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Лицензии",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Выбор вручную",
|
||||
"shownWithForeignAudio": "Показывать при иноязычном аудио",
|
||||
"alwaysEnabled": "Всегда включены"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Задачи сервера",
|
||||
"failedToLoad": "Не удалось загрузить задачи",
|
||||
"noTasks": "Нет выполняемых задач"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 15
|
||||
/// Strings: 11970 (798 per locale)
|
||||
/// Strings: 12030 (802 per locale)
|
||||
///
|
||||
/// Built on 2026-03-22 at 10:44 UTC
|
||||
/// Built on 2026-03-27 at 07:32 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsDa with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsDa videoSettings = _TranslationsVideoSettingsDa._(_root);
|
||||
@override late final _TranslationsExternalPlayerDa externalPlayer = _TranslationsExternalPlayerDa._(_root);
|
||||
@override late final _TranslationsMetadataEditDa metadataEdit = _TranslationsMetadataEditDa._(_root);
|
||||
@override late final _TranslationsServerTasksDa serverTasks = _TranslationsServerTasksDa._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonDa implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Indlæser servere...';
|
||||
@override String get connectingToServers => 'Forbinder til servere...';
|
||||
@override String get startingOfflineMode => 'Starter offlinetilstand...';
|
||||
@override String get loading => 'Indlæser...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditDa implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Altid aktiveret';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksDa implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksDa._(this._root);
|
||||
|
||||
final TranslationsDa _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Serveropgaver';
|
||||
@override String get failedToLoad => 'Kunne ikke indlæse opgaver';
|
||||
@override String get noTasks => 'Ingen opgaver kører';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsDa implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsDa._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsDa {
|
||||
'common.loadingServers' => 'Indlæser servere...',
|
||||
'common.connectingToServers' => 'Forbinder til servere...',
|
||||
'common.startingOfflineMode' => 'Starter offlinetilstand...',
|
||||
'common.loading' => 'Indlæser...',
|
||||
'screens.licenses' => 'Licenser',
|
||||
'screens.switchProfile' => 'Skift profil',
|
||||
'screens.subtitleStyling' => 'Undertekststil',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsDa {
|
||||
'liveTv.evening' => 'Aften',
|
||||
'liveTv.lateNight' => 'Sen aften',
|
||||
'liveTv.whatsOn' => 'Hvad der kører',
|
||||
'liveTv.watchChannel' => 'Se kanal',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Se kanal',
|
||||
'liveTv.favorites' => 'Favoritter',
|
||||
'collections.title' => 'Samlinger',
|
||||
'collections.collection' => 'Samling',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsDa {
|
||||
'metadataEdit.manuallySelected' => 'Manuelt valgt',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Vist med fremmedsproget lyd',
|
||||
'metadataEdit.alwaysEnabled' => 'Altid aktiveret',
|
||||
'serverTasks.title' => 'Serveropgaver',
|
||||
'serverTasks.failedToLoad' => 'Kunne ikke indlæse opgaver',
|
||||
'serverTasks.noTasks' => 'Ingen opgaver kører',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsDe with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsDe videoSettings = _TranslationsVideoSettingsDe._(_root);
|
||||
@override late final _TranslationsExternalPlayerDe externalPlayer = _TranslationsExternalPlayerDe._(_root);
|
||||
@override late final _TranslationsMetadataEditDe metadataEdit = _TranslationsMetadataEditDe._(_root);
|
||||
@override late final _TranslationsServerTasksDe serverTasks = _TranslationsServerTasksDe._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonDe implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Server werden geladen...';
|
||||
@override String get connectingToServers => 'Verbindung zu Servern...';
|
||||
@override String get startingOfflineMode => 'Offlinemodus wird gestartet...';
|
||||
@override String get loading => 'Laden...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditDe implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Immer aktiviert';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksDe implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksDe._(this._root);
|
||||
|
||||
final TranslationsDe _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Serveraufgaben';
|
||||
@override String get failedToLoad => 'Aufgaben konnten nicht geladen werden';
|
||||
@override String get noTasks => 'Keine laufenden Aufgaben';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsDe implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsDe._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsDe {
|
||||
'common.loadingServers' => 'Server werden geladen...',
|
||||
'common.connectingToServers' => 'Verbindung zu Servern...',
|
||||
'common.startingOfflineMode' => 'Offlinemodus wird gestartet...',
|
||||
'common.loading' => 'Laden...',
|
||||
'screens.licenses' => 'Lizenzen',
|
||||
'screens.switchProfile' => 'Profil wechseln',
|
||||
'screens.subtitleStyling' => 'Untertitel-Stil',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsDe {
|
||||
'liveTv.evening' => 'Abend',
|
||||
'liveTv.lateNight' => 'Spätnacht',
|
||||
'liveTv.whatsOn' => 'Jetzt im TV',
|
||||
'liveTv.watchChannel' => 'Kanal ansehen',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Kanal ansehen',
|
||||
'liveTv.favorites' => 'Favoriten',
|
||||
'downloads.title' => 'Downloads',
|
||||
'downloads.manage' => 'Verwalten',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsDe {
|
||||
'metadataEdit.manuallySelected' => 'Manuell ausgewählt',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Bei fremdsprachigem Audio anzeigen',
|
||||
'metadataEdit.alwaysEnabled' => 'Immer aktiviert',
|
||||
'serverTasks.title' => 'Serveraufgaben',
|
||||
'serverTasks.failedToLoad' => 'Aufgaben konnten nicht geladen werden',
|
||||
'serverTasks.noTasks' => 'Keine laufenden Aufgaben',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -77,6 +77,7 @@ class Translations with BaseTranslations<AppLocale, Translations> {
|
||||
late final TranslationsVideoSettingsEn videoSettings = TranslationsVideoSettingsEn._(_root);
|
||||
late final TranslationsExternalPlayerEn externalPlayer = TranslationsExternalPlayerEn._(_root);
|
||||
late final TranslationsMetadataEditEn metadataEdit = TranslationsMetadataEditEn._(_root);
|
||||
late final TranslationsServerTasksEn serverTasks = TranslationsServerTasksEn._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -254,6 +255,9 @@ class TranslationsCommonEn {
|
||||
|
||||
/// en: 'Starting offline mode...'
|
||||
String get startingOfflineMode => 'Starting offline mode...';
|
||||
|
||||
/// en: 'Loading...'
|
||||
String get loading => 'Loading...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -2499,6 +2503,24 @@ class TranslationsMetadataEditEn {
|
||||
String get alwaysEnabled => 'Always enabled';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class TranslationsServerTasksEn {
|
||||
TranslationsServerTasksEn._(this._root);
|
||||
|
||||
final Translations _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
|
||||
/// en: 'Server Tasks'
|
||||
String get title => 'Server Tasks';
|
||||
|
||||
/// en: 'Failed to load tasks'
|
||||
String get failedToLoad => 'Failed to load tasks';
|
||||
|
||||
/// en: 'No tasks running'
|
||||
String get noTasks => 'No tasks running';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class TranslationsHotkeysActionsEn {
|
||||
TranslationsHotkeysActionsEn._(this._root);
|
||||
@@ -2938,6 +2960,7 @@ extension on Translations {
|
||||
'common.loadingServers' => 'Loading servers...',
|
||||
'common.connectingToServers' => 'Connecting to servers...',
|
||||
'common.startingOfflineMode' => 'Starting offline mode...',
|
||||
'common.loading' => 'Loading...',
|
||||
'screens.licenses' => 'Licenses',
|
||||
'screens.switchProfile' => 'Switch Profile',
|
||||
'screens.subtitleStyling' => 'Subtitle Styling',
|
||||
@@ -3399,9 +3422,9 @@ extension on Translations {
|
||||
'liveTv.evening' => 'Evening',
|
||||
'liveTv.lateNight' => 'Late Night',
|
||||
'liveTv.whatsOn' => 'What\'s On',
|
||||
'liveTv.watchChannel' => 'Watch Channel',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Watch Channel',
|
||||
'liveTv.favorites' => 'Favorites',
|
||||
'collections.title' => 'Collections',
|
||||
'collections.collection' => 'Collection',
|
||||
@@ -3688,6 +3711,9 @@ extension on Translations {
|
||||
'metadataEdit.manuallySelected' => 'Manually selected',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Shown with foreign audio',
|
||||
'metadataEdit.alwaysEnabled' => 'Always enabled',
|
||||
'serverTasks.title' => 'Server Tasks',
|
||||
'serverTasks.failedToLoad' => 'Failed to load tasks',
|
||||
'serverTasks.noTasks' => 'No tasks running',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsEs with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsEs videoSettings = _TranslationsVideoSettingsEs._(_root);
|
||||
@override late final _TranslationsExternalPlayerEs externalPlayer = _TranslationsExternalPlayerEs._(_root);
|
||||
@override late final _TranslationsMetadataEditEs metadataEdit = _TranslationsMetadataEditEs._(_root);
|
||||
@override late final _TranslationsServerTasksEs serverTasks = _TranslationsServerTasksEs._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonEs implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Cargando servidores...';
|
||||
@override String get connectingToServers => 'Conectando a servidores...';
|
||||
@override String get startingOfflineMode => 'Iniciando modo sin conexión...';
|
||||
@override String get loading => 'Cargando...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditEs implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Siempre activado';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksEs implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksEs._(this._root);
|
||||
|
||||
final TranslationsEs _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Tareas del servidor';
|
||||
@override String get failedToLoad => 'Error al cargar tareas';
|
||||
@override String get noTasks => 'No hay tareas en ejecución';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsEs implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsEs._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsEs {
|
||||
'common.loadingServers' => 'Cargando servidores...',
|
||||
'common.connectingToServers' => 'Conectando a servidores...',
|
||||
'common.startingOfflineMode' => 'Iniciando modo sin conexión...',
|
||||
'common.loading' => 'Cargando...',
|
||||
'screens.licenses' => 'Licencias',
|
||||
'screens.switchProfile' => 'Cambiar Perfil',
|
||||
'screens.subtitleStyling' => 'Estilo de Subtítulos',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsEs {
|
||||
'liveTv.evening' => 'Noche',
|
||||
'liveTv.lateNight' => 'Trasnoche',
|
||||
'liveTv.whatsOn' => 'En emisión',
|
||||
'liveTv.watchChannel' => 'Ver canal',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Ver canal',
|
||||
'liveTv.favorites' => 'Favoritos',
|
||||
'collections.title' => 'Colecciones',
|
||||
'collections.collection' => 'Colección',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsEs {
|
||||
'metadataEdit.manuallySelected' => 'Seleccionado manualmente',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Mostrar con audio extranjero',
|
||||
'metadataEdit.alwaysEnabled' => 'Siempre activado',
|
||||
'serverTasks.title' => 'Tareas del servidor',
|
||||
'serverTasks.failedToLoad' => 'Error al cargar tareas',
|
||||
'serverTasks.noTasks' => 'No hay tareas en ejecución',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsFr with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsFr videoSettings = _TranslationsVideoSettingsFr._(_root);
|
||||
@override late final _TranslationsExternalPlayerFr externalPlayer = _TranslationsExternalPlayerFr._(_root);
|
||||
@override late final _TranslationsMetadataEditFr metadataEdit = _TranslationsMetadataEditFr._(_root);
|
||||
@override late final _TranslationsServerTasksFr serverTasks = _TranslationsServerTasksFr._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonFr implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Chargement des serveurs...';
|
||||
@override String get connectingToServers => 'Connexion aux serveurs...';
|
||||
@override String get startingOfflineMode => 'Démarrage en mode hors-ligne...';
|
||||
@override String get loading => 'Chargement...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditFr implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Toujours activé';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksFr implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksFr._(this._root);
|
||||
|
||||
final TranslationsFr _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Tâches du serveur';
|
||||
@override String get failedToLoad => 'Échec du chargement des tâches';
|
||||
@override String get noTasks => 'Aucune tâche en cours';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsFr implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsFr._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsFr {
|
||||
'common.loadingServers' => 'Chargement des serveurs...',
|
||||
'common.connectingToServers' => 'Connexion aux serveurs...',
|
||||
'common.startingOfflineMode' => 'Démarrage en mode hors-ligne...',
|
||||
'common.loading' => 'Chargement...',
|
||||
'screens.licenses' => 'Licenses',
|
||||
'screens.switchProfile' => 'Changer de profil',
|
||||
'screens.subtitleStyling' => 'Configuration des sous-titres',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsFr {
|
||||
'liveTv.evening' => 'Soirée',
|
||||
'liveTv.lateNight' => 'Nuit tardive',
|
||||
'liveTv.whatsOn' => 'En ce moment',
|
||||
'liveTv.watchChannel' => 'Regarder la chaîne',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Regarder la chaîne',
|
||||
'liveTv.favorites' => 'Favoris',
|
||||
'collections.title' => 'Collections',
|
||||
'collections.collection' => 'Collection',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsFr {
|
||||
'metadataEdit.manuallySelected' => 'Sélectionné manuellement',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Affichés avec audio étranger',
|
||||
'metadataEdit.alwaysEnabled' => 'Toujours activé',
|
||||
'serverTasks.title' => 'Tâches du serveur',
|
||||
'serverTasks.failedToLoad' => 'Échec du chargement des tâches',
|
||||
'serverTasks.noTasks' => 'Aucune tâche en cours',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsIt with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsIt videoSettings = _TranslationsVideoSettingsIt._(_root);
|
||||
@override late final _TranslationsExternalPlayerIt externalPlayer = _TranslationsExternalPlayerIt._(_root);
|
||||
@override late final _TranslationsMetadataEditIt metadataEdit = _TranslationsMetadataEditIt._(_root);
|
||||
@override late final _TranslationsServerTasksIt serverTasks = _TranslationsServerTasksIt._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonIt implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Caricamento server...';
|
||||
@override String get connectingToServers => 'Connessione ai server...';
|
||||
@override String get startingOfflineMode => 'Avvio modalità offline...';
|
||||
@override String get loading => 'Caricamento...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditIt implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Sempre attivo';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksIt implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksIt._(this._root);
|
||||
|
||||
final TranslationsIt _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Attività del server';
|
||||
@override String get failedToLoad => 'Impossibile caricare le attività';
|
||||
@override String get noTasks => 'Nessuna attività in corso';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsIt implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsIt._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsIt {
|
||||
'common.loadingServers' => 'Caricamento server...',
|
||||
'common.connectingToServers' => 'Connessione ai server...',
|
||||
'common.startingOfflineMode' => 'Avvio modalità offline...',
|
||||
'common.loading' => 'Caricamento...',
|
||||
'screens.licenses' => 'Licenze',
|
||||
'screens.switchProfile' => 'Cambia profilo',
|
||||
'screens.subtitleStyling' => 'Stile sottotitoli',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsIt {
|
||||
'liveTv.evening' => 'Sera',
|
||||
'liveTv.lateNight' => 'Notte tarda',
|
||||
'liveTv.whatsOn' => 'In onda ora',
|
||||
'liveTv.watchChannel' => 'Guarda canale',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Guarda canale',
|
||||
'liveTv.favorites' => 'Preferiti',
|
||||
'downloads.title' => 'Download',
|
||||
'downloads.manage' => 'Gestisci',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsIt {
|
||||
'metadataEdit.manuallySelected' => 'Selezionato manualmente',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Mostrati con audio straniero',
|
||||
'metadataEdit.alwaysEnabled' => 'Sempre attivo',
|
||||
'serverTasks.title' => 'Attività del server',
|
||||
'serverTasks.failedToLoad' => 'Impossibile caricare le attività',
|
||||
'serverTasks.noTasks' => 'Nessuna attività in corso',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsJa with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsJa videoSettings = _TranslationsVideoSettingsJa._(_root);
|
||||
@override late final _TranslationsExternalPlayerJa externalPlayer = _TranslationsExternalPlayerJa._(_root);
|
||||
@override late final _TranslationsMetadataEditJa metadataEdit = _TranslationsMetadataEditJa._(_root);
|
||||
@override late final _TranslationsServerTasksJa serverTasks = _TranslationsServerTasksJa._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonJa implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'サーバーを読み込み中...';
|
||||
@override String get connectingToServers => 'サーバーに接続中...';
|
||||
@override String get startingOfflineMode => 'オフラインモードを開始中...';
|
||||
@override String get loading => '読み込み中...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditJa implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => '常に有効';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksJa implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksJa._(this._root);
|
||||
|
||||
final TranslationsJa _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'サーバータスク';
|
||||
@override String get failedToLoad => 'タスクの読み込みに失敗しました';
|
||||
@override String get noTasks => '実行中のタスクはありません';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsJa implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsJa._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsJa {
|
||||
'common.loadingServers' => 'サーバーを読み込み中...',
|
||||
'common.connectingToServers' => 'サーバーに接続中...',
|
||||
'common.startingOfflineMode' => 'オフラインモードを開始中...',
|
||||
'common.loading' => '読み込み中...',
|
||||
'screens.licenses' => 'ライセンス',
|
||||
'screens.switchProfile' => 'プロフィール切替',
|
||||
'screens.subtitleStyling' => '字幕スタイル',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsJa {
|
||||
'liveTv.evening' => '夕方',
|
||||
'liveTv.lateNight' => '深夜',
|
||||
'liveTv.whatsOn' => '放送中',
|
||||
'liveTv.watchChannel' => 'チャンネルを視聴',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'チャンネルを視聴',
|
||||
'liveTv.favorites' => 'お気に入り',
|
||||
'collections.title' => 'コレクション',
|
||||
'collections.collection' => 'コレクション',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsJa {
|
||||
'metadataEdit.manuallySelected' => '手動選択',
|
||||
'metadataEdit.shownWithForeignAudio' => '外国語音声時に表示',
|
||||
'metadataEdit.alwaysEnabled' => '常に有効',
|
||||
'serverTasks.title' => 'サーバータスク',
|
||||
'serverTasks.failedToLoad' => 'タスクの読み込みに失敗しました',
|
||||
'serverTasks.noTasks' => '実行中のタスクはありません',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsKo with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsKo videoSettings = _TranslationsVideoSettingsKo._(_root);
|
||||
@override late final _TranslationsExternalPlayerKo externalPlayer = _TranslationsExternalPlayerKo._(_root);
|
||||
@override late final _TranslationsMetadataEditKo metadataEdit = _TranslationsMetadataEditKo._(_root);
|
||||
@override late final _TranslationsServerTasksKo serverTasks = _TranslationsServerTasksKo._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonKo implements TranslationsCommonEn {
|
||||
@override String get loadingServers => '서버 로딩 중...';
|
||||
@override String get connectingToServers => '서버 연결 중...';
|
||||
@override String get startingOfflineMode => '오프라인 모드 시작 중...';
|
||||
@override String get loading => '로딩 중...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditKo implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => '항상 활성화';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksKo implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksKo._(this._root);
|
||||
|
||||
final TranslationsKo _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => '서버 작업';
|
||||
@override String get failedToLoad => '작업을 불러올 수 없습니다';
|
||||
@override String get noTasks => '실행 중인 작업 없음';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsKo implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsKo._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsKo {
|
||||
'common.loadingServers' => '서버 로딩 중...',
|
||||
'common.connectingToServers' => '서버 연결 중...',
|
||||
'common.startingOfflineMode' => '오프라인 모드 시작 중...',
|
||||
'common.loading' => '로딩 중...',
|
||||
'screens.licenses' => '라이선스',
|
||||
'screens.switchProfile' => '프로필 전환',
|
||||
'screens.subtitleStyling' => '자막 스타일 설정',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsKo {
|
||||
'liveTv.evening' => '저녁',
|
||||
'liveTv.lateNight' => '심야 방송',
|
||||
'liveTv.whatsOn' => '지금 방송 중',
|
||||
'liveTv.watchChannel' => '채널 시청',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => '채널 시청',
|
||||
'liveTv.favorites' => '즐겨찾기',
|
||||
'collections.title' => '컬렉션',
|
||||
'collections.collection' => '컬렉션',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsKo {
|
||||
'metadataEdit.manuallySelected' => '수동 선택',
|
||||
'metadataEdit.shownWithForeignAudio' => '외국어 오디오 시 표시',
|
||||
'metadataEdit.alwaysEnabled' => '항상 활성화',
|
||||
'serverTasks.title' => '서버 작업',
|
||||
'serverTasks.failedToLoad' => '작업을 불러올 수 없습니다',
|
||||
'serverTasks.noTasks' => '실행 중인 작업 없음',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsNb with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsNb videoSettings = _TranslationsVideoSettingsNb._(_root);
|
||||
@override late final _TranslationsExternalPlayerNb externalPlayer = _TranslationsExternalPlayerNb._(_root);
|
||||
@override late final _TranslationsMetadataEditNb metadataEdit = _TranslationsMetadataEditNb._(_root);
|
||||
@override late final _TranslationsServerTasksNb serverTasks = _TranslationsServerTasksNb._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonNb implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Laster servere...';
|
||||
@override String get connectingToServers => 'Kobler til servere...';
|
||||
@override String get startingOfflineMode => 'Starter frakoblet modus...';
|
||||
@override String get loading => 'Laster...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditNb implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Alltid aktivert';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksNb implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksNb._(this._root);
|
||||
|
||||
final TranslationsNb _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Serveroppgaver';
|
||||
@override String get failedToLoad => 'Kunne ikke laste oppgaver';
|
||||
@override String get noTasks => 'Ingen oppgaver kjører';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsNb implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsNb._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsNb {
|
||||
'common.loadingServers' => 'Laster servere...',
|
||||
'common.connectingToServers' => 'Kobler til servere...',
|
||||
'common.startingOfflineMode' => 'Starter frakoblet modus...',
|
||||
'common.loading' => 'Laster...',
|
||||
'screens.licenses' => 'Lisenser',
|
||||
'screens.switchProfile' => 'Bytt profil',
|
||||
'screens.subtitleStyling' => 'Undertekststil',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsNb {
|
||||
'liveTv.evening' => 'Kveld',
|
||||
'liveTv.lateNight' => 'Sen kveld',
|
||||
'liveTv.whatsOn' => 'Hva går nå',
|
||||
'liveTv.watchChannel' => 'Se kanal',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Se kanal',
|
||||
'liveTv.favorites' => 'Favoritter',
|
||||
'collections.title' => 'Samlinger',
|
||||
'collections.collection' => 'Samling',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsNb {
|
||||
'metadataEdit.manuallySelected' => 'Manuelt valgt',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Vist med fremmedspråklig lyd',
|
||||
'metadataEdit.alwaysEnabled' => 'Alltid aktivert',
|
||||
'serverTasks.title' => 'Serveroppgaver',
|
||||
'serverTasks.failedToLoad' => 'Kunne ikke laste oppgaver',
|
||||
'serverTasks.noTasks' => 'Ingen oppgaver kjører',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsNl with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsNl videoSettings = _TranslationsVideoSettingsNl._(_root);
|
||||
@override late final _TranslationsExternalPlayerNl externalPlayer = _TranslationsExternalPlayerNl._(_root);
|
||||
@override late final _TranslationsMetadataEditNl metadataEdit = _TranslationsMetadataEditNl._(_root);
|
||||
@override late final _TranslationsServerTasksNl serverTasks = _TranslationsServerTasksNl._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonNl implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Servers laden...';
|
||||
@override String get connectingToServers => 'Verbinden met servers...';
|
||||
@override String get startingOfflineMode => 'Offlinemodus starten...';
|
||||
@override String get loading => 'Laden...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditNl implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Altijd ingeschakeld';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksNl implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksNl._(this._root);
|
||||
|
||||
final TranslationsNl _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Servertaken';
|
||||
@override String get failedToLoad => 'Taken konden niet worden geladen';
|
||||
@override String get noTasks => 'Geen actieve taken';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsNl implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsNl._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsNl {
|
||||
'common.loadingServers' => 'Servers laden...',
|
||||
'common.connectingToServers' => 'Verbinden met servers...',
|
||||
'common.startingOfflineMode' => 'Offlinemodus starten...',
|
||||
'common.loading' => 'Laden...',
|
||||
'screens.licenses' => 'Licenties',
|
||||
'screens.switchProfile' => 'Wissel van profiel',
|
||||
'screens.subtitleStyling' => 'Ondertitel opmaak',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsNl {
|
||||
'liveTv.evening' => 'Avond',
|
||||
'liveTv.lateNight' => 'Late avond',
|
||||
'liveTv.whatsOn' => 'Nu op TV',
|
||||
'liveTv.watchChannel' => 'Kanaal bekijken',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Kanaal bekijken',
|
||||
'liveTv.favorites' => 'Favorieten',
|
||||
'downloads.title' => 'Downloads',
|
||||
'downloads.manage' => 'Beheren',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsNl {
|
||||
'metadataEdit.manuallySelected' => 'Handmatig geselecteerd',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Weergeven bij anderstalig geluid',
|
||||
'metadataEdit.alwaysEnabled' => 'Altijd ingeschakeld',
|
||||
'serverTasks.title' => 'Servertaken',
|
||||
'serverTasks.failedToLoad' => 'Taken konden niet worden geladen',
|
||||
'serverTasks.noTasks' => 'Geen actieve taken',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsPl with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsPl videoSettings = _TranslationsVideoSettingsPl._(_root);
|
||||
@override late final _TranslationsExternalPlayerPl externalPlayer = _TranslationsExternalPlayerPl._(_root);
|
||||
@override late final _TranslationsMetadataEditPl metadataEdit = _TranslationsMetadataEditPl._(_root);
|
||||
@override late final _TranslationsServerTasksPl serverTasks = _TranslationsServerTasksPl._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonPl implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Ładowanie serwerów...';
|
||||
@override String get connectingToServers => 'Łączenie z serwerami...';
|
||||
@override String get startingOfflineMode => 'Uruchamianie trybu offline...';
|
||||
@override String get loading => 'Ładowanie...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditPl implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Zawsze włączone';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksPl implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksPl._(this._root);
|
||||
|
||||
final TranslationsPl _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Zadania serwera';
|
||||
@override String get failedToLoad => 'Nie udało się załadować zadań';
|
||||
@override String get noTasks => 'Brak uruchomionych zadań';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsPl implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsPl._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsPl {
|
||||
'common.loadingServers' => 'Ładowanie serwerów...',
|
||||
'common.connectingToServers' => 'Łączenie z serwerami...',
|
||||
'common.startingOfflineMode' => 'Uruchamianie trybu offline...',
|
||||
'common.loading' => 'Ładowanie...',
|
||||
'screens.licenses' => 'Licencje',
|
||||
'screens.switchProfile' => 'Zmień profil',
|
||||
'screens.subtitleStyling' => 'Styl napisów',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsPl {
|
||||
'liveTv.evening' => 'Wieczorem',
|
||||
'liveTv.lateNight' => 'Późna noc',
|
||||
'liveTv.whatsOn' => 'Co leci',
|
||||
'liveTv.watchChannel' => 'Oglądaj kanał',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Oglądaj kanał',
|
||||
'liveTv.favorites' => 'Ulubione',
|
||||
'collections.title' => 'Kolekcje',
|
||||
'collections.collection' => 'Kolekcja',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsPl {
|
||||
'metadataEdit.manuallySelected' => 'Wybrany ręcznie',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Wyświetlane przy obcojęzycznym audio',
|
||||
'metadataEdit.alwaysEnabled' => 'Zawsze włączone',
|
||||
'serverTasks.title' => 'Zadania serwera',
|
||||
'serverTasks.failedToLoad' => 'Nie udało się załadować zadań',
|
||||
'serverTasks.noTasks' => 'Brak uruchomionych zadań',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsPt with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsPt videoSettings = _TranslationsVideoSettingsPt._(_root);
|
||||
@override late final _TranslationsExternalPlayerPt externalPlayer = _TranslationsExternalPlayerPt._(_root);
|
||||
@override late final _TranslationsMetadataEditPt metadataEdit = _TranslationsMetadataEditPt._(_root);
|
||||
@override late final _TranslationsServerTasksPt serverTasks = _TranslationsServerTasksPt._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonPt implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Carregando servidores...';
|
||||
@override String get connectingToServers => 'Conectando aos servidores...';
|
||||
@override String get startingOfflineMode => 'Iniciando modo offline...';
|
||||
@override String get loading => 'Carregando...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditPt implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Sempre ativado';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksPt implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksPt._(this._root);
|
||||
|
||||
final TranslationsPt _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Tarefas do servidor';
|
||||
@override String get failedToLoad => 'Falha ao carregar tarefas';
|
||||
@override String get noTasks => 'Nenhuma tarefa em execução';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsPt implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsPt._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsPt {
|
||||
'common.loadingServers' => 'Carregando servidores...',
|
||||
'common.connectingToServers' => 'Conectando aos servidores...',
|
||||
'common.startingOfflineMode' => 'Iniciando modo offline...',
|
||||
'common.loading' => 'Carregando...',
|
||||
'screens.licenses' => 'Licenças',
|
||||
'screens.switchProfile' => 'Trocar Perfil',
|
||||
'screens.subtitleStyling' => 'Estilo de Legendas',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsPt {
|
||||
'liveTv.evening' => 'Noite',
|
||||
'liveTv.lateNight' => 'Madrugada',
|
||||
'liveTv.whatsOn' => 'O que Está Passando',
|
||||
'liveTv.watchChannel' => 'Assistir Canal',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Assistir Canal',
|
||||
'liveTv.favorites' => 'Favoritos',
|
||||
'collections.title' => 'Coleções',
|
||||
'collections.collection' => 'Coleção',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsPt {
|
||||
'metadataEdit.manuallySelected' => 'Seleção manual',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Exibir com áudio estrangeiro',
|
||||
'metadataEdit.alwaysEnabled' => 'Sempre ativado',
|
||||
'serverTasks.title' => 'Tarefas do servidor',
|
||||
'serverTasks.failedToLoad' => 'Falha ao carregar tarefas',
|
||||
'serverTasks.noTasks' => 'Nenhuma tarefa em execução',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsRu with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsRu videoSettings = _TranslationsVideoSettingsRu._(_root);
|
||||
@override late final _TranslationsExternalPlayerRu externalPlayer = _TranslationsExternalPlayerRu._(_root);
|
||||
@override late final _TranslationsMetadataEditRu metadataEdit = _TranslationsMetadataEditRu._(_root);
|
||||
@override late final _TranslationsServerTasksRu serverTasks = _TranslationsServerTasksRu._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonRu implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Загрузка серверов...';
|
||||
@override String get connectingToServers => 'Подключение к серверам...';
|
||||
@override String get startingOfflineMode => 'Запуск автономного режима...';
|
||||
@override String get loading => 'Загрузка...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditRu implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Всегда включены';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksRu implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksRu._(this._root);
|
||||
|
||||
final TranslationsRu _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Задачи сервера';
|
||||
@override String get failedToLoad => 'Не удалось загрузить задачи';
|
||||
@override String get noTasks => 'Нет выполняемых задач';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsRu implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsRu._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsRu {
|
||||
'common.loadingServers' => 'Загрузка серверов...',
|
||||
'common.connectingToServers' => 'Подключение к серверам...',
|
||||
'common.startingOfflineMode' => 'Запуск автономного режима...',
|
||||
'common.loading' => 'Загрузка...',
|
||||
'screens.licenses' => 'Лицензии',
|
||||
'screens.switchProfile' => 'Сменить профиль',
|
||||
'screens.subtitleStyling' => 'Стиль субтитров',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsRu {
|
||||
'liveTv.evening' => 'Вечер',
|
||||
'liveTv.lateNight' => 'Поздний вечер',
|
||||
'liveTv.whatsOn' => 'Что идёт',
|
||||
'liveTv.watchChannel' => 'Смотреть канал',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Смотреть канал',
|
||||
'liveTv.favorites' => 'Избранное',
|
||||
'collections.title' => 'Коллекции',
|
||||
'collections.collection' => 'Коллекция',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsRu {
|
||||
'metadataEdit.manuallySelected' => 'Выбор вручную',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Показывать при иноязычном аудио',
|
||||
'metadataEdit.alwaysEnabled' => 'Всегда включены',
|
||||
'serverTasks.title' => 'Задачи сервера',
|
||||
'serverTasks.failedToLoad' => 'Не удалось загрузить задачи',
|
||||
'serverTasks.noTasks' => 'Нет выполняемых задач',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsSv with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsSv videoSettings = _TranslationsVideoSettingsSv._(_root);
|
||||
@override late final _TranslationsExternalPlayerSv externalPlayer = _TranslationsExternalPlayerSv._(_root);
|
||||
@override late final _TranslationsMetadataEditSv metadataEdit = _TranslationsMetadataEditSv._(_root);
|
||||
@override late final _TranslationsServerTasksSv serverTasks = _TranslationsServerTasksSv._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonSv implements TranslationsCommonEn {
|
||||
@override String get loadingServers => 'Laddar servrar...';
|
||||
@override String get connectingToServers => 'Ansluter till servrar...';
|
||||
@override String get startingOfflineMode => 'Startar offlineläge...';
|
||||
@override String get loading => 'Laddar...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditSv implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => 'Alltid aktiverad';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksSv implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksSv._(this._root);
|
||||
|
||||
final TranslationsSv _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => 'Serveruppgifter';
|
||||
@override String get failedToLoad => 'Kunde inte ladda uppgifter';
|
||||
@override String get noTasks => 'Inga pågående uppgifter';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsSv implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsSv._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsSv {
|
||||
'common.loadingServers' => 'Laddar servrar...',
|
||||
'common.connectingToServers' => 'Ansluter till servrar...',
|
||||
'common.startingOfflineMode' => 'Startar offlineläge...',
|
||||
'common.loading' => 'Laddar...',
|
||||
'screens.licenses' => 'Licenser',
|
||||
'screens.switchProfile' => 'Byt profil',
|
||||
'screens.subtitleStyling' => 'Undertext-styling',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsSv {
|
||||
'liveTv.evening' => 'Kväll',
|
||||
'liveTv.lateNight' => 'Sen kväll',
|
||||
'liveTv.whatsOn' => 'På TV nu',
|
||||
'liveTv.watchChannel' => 'Titta på kanal',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => 'Titta på kanal',
|
||||
'liveTv.favorites' => 'Favoriter',
|
||||
'downloads.title' => 'Nedladdningar',
|
||||
'downloads.manage' => 'Hantera',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsSv {
|
||||
'metadataEdit.manuallySelected' => 'Manuellt vald',
|
||||
'metadataEdit.shownWithForeignAudio' => 'Visas vid främmande ljud',
|
||||
'metadataEdit.alwaysEnabled' => 'Alltid aktiverad',
|
||||
'serverTasks.title' => 'Serveruppgifter',
|
||||
'serverTasks.failedToLoad' => 'Kunde inte ladda uppgifter',
|
||||
'serverTasks.noTasks' => 'Inga pågående uppgifter',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ class TranslationsZh with BaseTranslations<AppLocale, Translations> implements T
|
||||
@override late final _TranslationsVideoSettingsZh videoSettings = _TranslationsVideoSettingsZh._(_root);
|
||||
@override late final _TranslationsExternalPlayerZh externalPlayer = _TranslationsExternalPlayerZh._(_root);
|
||||
@override late final _TranslationsMetadataEditZh metadataEdit = _TranslationsMetadataEditZh._(_root);
|
||||
@override late final _TranslationsServerTasksZh serverTasks = _TranslationsServerTasksZh._(_root);
|
||||
}
|
||||
|
||||
// Path: app
|
||||
@@ -151,6 +152,7 @@ class _TranslationsCommonZh implements TranslationsCommonEn {
|
||||
@override String get loadingServers => '正在加载服务器...';
|
||||
@override String get connectingToServers => '正在连接服务器...';
|
||||
@override String get startingOfflineMode => '正在启动离线模式...';
|
||||
@override String get loading => '加载中...';
|
||||
}
|
||||
|
||||
// Path: screens
|
||||
@@ -1108,6 +1110,18 @@ class _TranslationsMetadataEditZh implements TranslationsMetadataEditEn {
|
||||
@override String get alwaysEnabled => '始终启用';
|
||||
}
|
||||
|
||||
// Path: serverTasks
|
||||
class _TranslationsServerTasksZh implements TranslationsServerTasksEn {
|
||||
_TranslationsServerTasksZh._(this._root);
|
||||
|
||||
final TranslationsZh _root; // ignore: unused_field
|
||||
|
||||
// Translations
|
||||
@override String get title => '服务器任务';
|
||||
@override String get failedToLoad => '加载任务失败';
|
||||
@override String get noTasks => '没有正在运行的任务';
|
||||
}
|
||||
|
||||
// Path: hotkeys.actions
|
||||
class _TranslationsHotkeysActionsZh implements TranslationsHotkeysActionsEn {
|
||||
_TranslationsHotkeysActionsZh._(this._root);
|
||||
@@ -1335,6 +1349,7 @@ extension on TranslationsZh {
|
||||
'common.loadingServers' => '正在加载服务器...',
|
||||
'common.connectingToServers' => '正在连接服务器...',
|
||||
'common.startingOfflineMode' => '正在启动离线模式...',
|
||||
'common.loading' => '加载中...',
|
||||
'screens.licenses' => '许可证',
|
||||
'screens.switchProfile' => '切换用户',
|
||||
'screens.subtitleStyling' => '字幕样式',
|
||||
@@ -1796,9 +1811,9 @@ extension on TranslationsZh {
|
||||
'liveTv.evening' => '晚上',
|
||||
'liveTv.lateNight' => '深夜',
|
||||
'liveTv.whatsOn' => '正在播出',
|
||||
'liveTv.watchChannel' => '观看频道',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'liveTv.watchChannel' => '观看频道',
|
||||
'liveTv.favorites' => '收藏',
|
||||
'downloads.title' => '下载',
|
||||
'downloads.manage' => '管理',
|
||||
@@ -2085,6 +2100,9 @@ extension on TranslationsZh {
|
||||
'metadataEdit.manuallySelected' => '手动选择',
|
||||
'metadataEdit.shownWithForeignAudio' => '外语音频时显示',
|
||||
'metadataEdit.alwaysEnabled' => '始终启用',
|
||||
'serverTasks.title' => '服务器任务',
|
||||
'serverTasks.failedToLoad' => '加载任务失败',
|
||||
'serverTasks.noTasks' => '没有正在运行的任务',
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "Uppdaterar servrar...",
|
||||
"loadingServers": "Laddar servrar...",
|
||||
"connectingToServers": "Ansluter till servrar...",
|
||||
"startingOfflineMode": "Startar offlineläge..."
|
||||
"startingOfflineMode": "Startar offlineläge...",
|
||||
"loading": "Laddar..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "Licenser",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "Manuellt vald",
|
||||
"shownWithForeignAudio": "Visas vid främmande ljud",
|
||||
"alwaysEnabled": "Alltid aktiverad"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "Serveruppgifter",
|
||||
"failedToLoad": "Kunde inte ladda uppgifter",
|
||||
"noTasks": "Inga pågående uppgifter"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
"refreshingServers": "正在刷新服务器...",
|
||||
"loadingServers": "正在加载服务器...",
|
||||
"connectingToServers": "正在连接服务器...",
|
||||
"startingOfflineMode": "正在启动离线模式..."
|
||||
"startingOfflineMode": "正在启动离线模式...",
|
||||
"loading": "加载中..."
|
||||
},
|
||||
"screens": {
|
||||
"licenses": "许可证",
|
||||
@@ -884,5 +885,10 @@
|
||||
"manuallySelected": "手动选择",
|
||||
"shownWithForeignAudio": "外语音频时显示",
|
||||
"alwaysEnabled": "始终启用"
|
||||
},
|
||||
"serverTasks": {
|
||||
"title": "服务器任务",
|
||||
"failedToLoad": "加载任务失败",
|
||||
"noTasks": "没有正在运行的任务"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/// Represents a running background task on a Plex Media Server (from /activities endpoint).
|
||||
class PlexActivity {
|
||||
final String uuid;
|
||||
final String type;
|
||||
final String title;
|
||||
final String? subtitle;
|
||||
final int progress; // 0–100
|
||||
final bool cancellable;
|
||||
|
||||
const PlexActivity({
|
||||
required this.uuid,
|
||||
required this.type,
|
||||
required this.title,
|
||||
this.subtitle,
|
||||
required this.progress,
|
||||
required this.cancellable,
|
||||
});
|
||||
|
||||
factory PlexActivity.fromJson(Map<String, dynamic> json) {
|
||||
return PlexActivity(
|
||||
uuid: json['uuid'] as String? ?? '',
|
||||
type: json['type'] as String? ?? '',
|
||||
title: json['title'] as String? ?? '',
|
||||
subtitle: json['subtitle'] as String?,
|
||||
progress: (json['progress'] as num?)?.toInt() ?? 0,
|
||||
cancellable: json['cancellable'] as bool? ?? false,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ import 'dart:io' show Platform;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:plezy/widgets/app_icon.dart';
|
||||
import '../widgets/server_activities_button.dart';
|
||||
import 'package:material_symbols_icons/symbols.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../focus/focusable_action_bar.dart';
|
||||
@@ -994,6 +995,9 @@ class _DiscoverScreenState extends State<DiscoverScreen>
|
||||
],
|
||||
),
|
||||
),
|
||||
// Server Tasks
|
||||
if (PlatformDetector.isDesktop(context))
|
||||
const FocusableAction(child: ServerActivitiesButton()),
|
||||
// User menu
|
||||
FocusableAction(
|
||||
onPressed: () => _showUserMenu(context, userProvider),
|
||||
|
||||
@@ -10,6 +10,7 @@ import '../models/livetv_channel.dart';
|
||||
import '../models/livetv_dvr.dart';
|
||||
import '../models/livetv_hub_result.dart';
|
||||
import '../models/livetv_program.dart';
|
||||
import '../models/plex_activity.dart';
|
||||
import '../models/plex_config.dart';
|
||||
import '../models/play_queue_response.dart';
|
||||
import '../models/plex_file_info.dart';
|
||||
@@ -523,6 +524,26 @@ class PlexClient {
|
||||
}
|
||||
}
|
||||
|
||||
/// Get running background tasks (thumbnail generation, credit detection, etc.)
|
||||
Future<List<PlexActivity>> getActivities() async {
|
||||
try {
|
||||
final response = await _dio.get('/activities');
|
||||
final container = _getMediaContainer(response);
|
||||
if (container == null) return [];
|
||||
final activityList = container['Activity'] as List?;
|
||||
if (activityList == null) return [];
|
||||
return activityList.map((json) => PlexActivity.fromJson(json as Map<String, dynamic>)).toList();
|
||||
} catch (e) {
|
||||
appLogger.e('Failed to get activities', error: e);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/// Cancel a running background task by its UUID.
|
||||
Future<void> cancelActivity(String uuid) async {
|
||||
await _dio.delete('/activities/$uuid');
|
||||
}
|
||||
|
||||
/// Get library sections
|
||||
/// Returns libraries automatically tagged with this client's serverId and serverName.
|
||||
/// Prefers /media/providers data (includes individually shared items),
|
||||
|
||||
@@ -0,0 +1,373 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:material_symbols_icons/symbols.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../focus/key_event_utils.dart';
|
||||
import '../i18n/strings.g.dart';
|
||||
import '../theme/mono_tokens.dart';
|
||||
import 'package:plezy/widgets/app_icon.dart';
|
||||
import '../models/plex_activity.dart';
|
||||
import '../providers/multi_server_provider.dart';
|
||||
|
||||
class ServerActivitiesButton extends StatefulWidget {
|
||||
const ServerActivitiesButton({super.key});
|
||||
|
||||
@override
|
||||
State<ServerActivitiesButton> createState() => _ServerActivitiesButtonState();
|
||||
}
|
||||
|
||||
enum _FetchState { loading, loaded, error }
|
||||
|
||||
class _ServerResult {
|
||||
final String serverId;
|
||||
final String serverName;
|
||||
final List<PlexActivity> activities;
|
||||
|
||||
_ServerResult({
|
||||
required this.serverId,
|
||||
required this.serverName,
|
||||
required this.activities,
|
||||
});
|
||||
}
|
||||
|
||||
class _PanelData {
|
||||
final _FetchState fetchState;
|
||||
final List<_ServerResult> results;
|
||||
|
||||
const _PanelData({required this.fetchState, required this.results});
|
||||
|
||||
static const loading = _PanelData(fetchState: _FetchState.loading, results: []);
|
||||
}
|
||||
|
||||
class _ServerActivitiesButtonState extends State<ServerActivitiesButton> {
|
||||
final _buttonKey = GlobalKey();
|
||||
OverlayEntry? _overlayEntry;
|
||||
final _panelNotifier = ValueNotifier<_PanelData>(_PanelData.loading);
|
||||
Timer? _pollTimer;
|
||||
|
||||
@override
|
||||
void deactivate() {
|
||||
_removeOverlay();
|
||||
super.deactivate();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_removeOverlay();
|
||||
_panelNotifier.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _removeOverlay() {
|
||||
_pollTimer?.cancel();
|
||||
_pollTimer = null;
|
||||
_overlayEntry?.remove();
|
||||
_overlayEntry = null;
|
||||
}
|
||||
|
||||
void _togglePanel() {
|
||||
if (_overlayEntry != null) {
|
||||
_removeOverlay();
|
||||
return;
|
||||
}
|
||||
|
||||
final renderBox = _buttonKey.currentContext?.findRenderObject() as RenderBox?;
|
||||
if (renderBox == null) return;
|
||||
final buttonOffset = renderBox.localToGlobal(Offset.zero);
|
||||
final buttonSize = renderBox.size;
|
||||
final screenSize = MediaQuery.of(context).size;
|
||||
|
||||
final right = screenSize.width - (buttonOffset.dx + buttonSize.width);
|
||||
final top = buttonOffset.dy + buttonSize.height + 4;
|
||||
|
||||
_panelNotifier.value = _PanelData.loading;
|
||||
_overlayEntry = OverlayEntry(
|
||||
builder: (ctx) => _buildOverlay(ctx, right: right, top: top),
|
||||
);
|
||||
Overlay.of(context).insert(_overlayEntry!);
|
||||
_fetchActivities();
|
||||
}
|
||||
|
||||
Future<List<_ServerResult>> _loadFromServers() async {
|
||||
final multiServer = Provider.of<MultiServerProvider>(context, listen: false);
|
||||
final serverIds = multiServer.onlineServerIds;
|
||||
|
||||
final futures = serverIds.map((serverId) async {
|
||||
final client = multiServer.getClientForServer(serverId);
|
||||
if (client == null) return null;
|
||||
final activities = await client.getActivities();
|
||||
return _ServerResult(
|
||||
serverId: serverId,
|
||||
serverName: client.serverName ?? serverId,
|
||||
activities: activities,
|
||||
);
|
||||
});
|
||||
|
||||
final rawResults = await Future.wait(futures);
|
||||
return rawResults.whereType<_ServerResult>().toList();
|
||||
}
|
||||
|
||||
Future<void> _fetchActivities() async {
|
||||
try {
|
||||
final results = await _loadFromServers();
|
||||
if (!mounted) return;
|
||||
_panelNotifier.value = _PanelData(fetchState: _FetchState.loaded, results: results);
|
||||
_startPolling();
|
||||
} catch (_) {
|
||||
if (!mounted) return;
|
||||
_panelNotifier.value = const _PanelData(fetchState: _FetchState.error, results: []);
|
||||
}
|
||||
}
|
||||
|
||||
void _startPolling() {
|
||||
_pollTimer?.cancel();
|
||||
if (mounted && _overlayEntry != null) {
|
||||
_pollTimer = Timer.periodic(const Duration(seconds: 3), (_) => _silentRefresh());
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _silentRefresh() async {
|
||||
if (!mounted) return;
|
||||
try {
|
||||
final results = await _loadFromServers();
|
||||
if (!mounted) return;
|
||||
_panelNotifier.value = _PanelData(fetchState: _FetchState.loaded, results: results);
|
||||
} catch (_) {
|
||||
// silently ignore poll errors
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _cancelActivity(String serverId, String uuid) async {
|
||||
final multiServer = Provider.of<MultiServerProvider>(context, listen: false);
|
||||
final client = multiServer.getClientForServer(serverId);
|
||||
if (client == null) return;
|
||||
try {
|
||||
await client.cancelActivity(uuid);
|
||||
} catch (_) {
|
||||
return;
|
||||
}
|
||||
_pollTimer?.cancel();
|
||||
_pollTimer = null;
|
||||
_panelNotifier.value = _PanelData.loading;
|
||||
_fetchActivities();
|
||||
}
|
||||
|
||||
Widget _buildOverlay(BuildContext overlayContext, {required double right, required double top}) {
|
||||
return Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: GestureDetector(
|
||||
onTap: _removeOverlay,
|
||||
behavior: HitTestBehavior.opaque,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
right: right,
|
||||
top: top,
|
||||
child: Focus(
|
||||
autofocus: true,
|
||||
onKeyEvent: (_, event) => handleBackKeyAction(event, _removeOverlay),
|
||||
child: ValueListenableBuilder<_PanelData>(
|
||||
valueListenable: _panelNotifier,
|
||||
builder: (context, data, _) => _buildPanel(context, data),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildPanel(BuildContext context, _PanelData data) {
|
||||
final theme = Theme.of(context);
|
||||
return Material(
|
||||
elevation: 8,
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
clipBehavior: Clip.antiAlias,
|
||||
color: theme.colorScheme.surface,
|
||||
child: SizedBox(
|
||||
width: 320,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
_buildPanelHeader(context),
|
||||
Divider(height: 1, color: theme.dividerColor),
|
||||
ConstrainedBox(
|
||||
constraints: const BoxConstraints(maxHeight: 360),
|
||||
child: SingleChildScrollView(
|
||||
child: _buildPanelBody(context, data),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildPanelHeader(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
return Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 10, 16, 10),
|
||||
child: Row(
|
||||
children: [
|
||||
AppIcon(Symbols.monitor_heart_rounded, size: 18, color: theme.colorScheme.onSurface),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
t.serverTasks.title,
|
||||
style: theme.textTheme.titleSmall?.copyWith(fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildPanelBody(BuildContext context, _PanelData data) {
|
||||
final theme = Theme.of(context);
|
||||
|
||||
if (data.fetchState == _FetchState.loading) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: Center(
|
||||
child: Text(
|
||||
t.common.loading,
|
||||
style: theme.textTheme.bodyMedium?.copyWith(
|
||||
color: theme.colorScheme.onSurface.withValues(alpha: 0.55),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (data.fetchState == _FetchState.error) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Icon(Icons.error_outline, color: theme.colorScheme.error),
|
||||
const SizedBox(height: 8),
|
||||
Text(t.serverTasks.failedToLoad, style: theme.textTheme.bodyMedium),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
final hasAnyActivities = data.results.any((r) => r.activities.isNotEmpty);
|
||||
if (!hasAnyActivities) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: Center(
|
||||
child: Text(
|
||||
t.serverTasks.noTasks,
|
||||
style: theme.textTheme.bodyMedium?.copyWith(
|
||||
color: theme.colorScheme.onSurface.withValues(alpha: 0.55),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
for (final result in data.results)
|
||||
if (result.activities.isNotEmpty) ...[
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 12, 16, 4),
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
result.serverName.toUpperCase(),
|
||||
style: theme.textTheme.labelSmall?.copyWith(
|
||||
color: theme.colorScheme.onSurface.withValues(alpha: 0.45),
|
||||
letterSpacing: 0.8,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 6),
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 1),
|
||||
decoration: BoxDecoration(
|
||||
color: tokens(context).text,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
child: Text(
|
||||
'${result.activities.length}',
|
||||
style: theme.textTheme.labelSmall?.copyWith(
|
||||
color: tokens(context).bg,
|
||||
letterSpacing: 0,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
for (final activity in result.activities)
|
||||
_buildActivityTile(context, result.serverId, activity),
|
||||
],
|
||||
const SizedBox(height: 8),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildActivityTile(BuildContext context, String serverId, PlexActivity activity) {
|
||||
final theme = Theme.of(context);
|
||||
return Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 8, 8, 4),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
activity.title,
|
||||
style: theme.textTheme.bodySmall?.copyWith(fontWeight: FontWeight.w500),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
if (activity.subtitle != null) ...[
|
||||
const SizedBox(height: 2),
|
||||
Text(
|
||||
activity.subtitle!,
|
||||
style: theme.textTheme.bodySmall?.copyWith(
|
||||
color: theme.colorScheme.onSurface.withValues(alpha: 0.6),
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
],
|
||||
const SizedBox(height: 6),
|
||||
LinearProgressIndicator(
|
||||
value: activity.progress / 100.0,
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
minHeight: 4,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
if (activity.cancellable)
|
||||
IconButton(
|
||||
icon: AppIcon(Symbols.close_rounded, size: 16, color: theme.colorScheme.onSurface),
|
||||
onPressed: () => _cancelActivity(serverId, activity.uuid),
|
||||
visualDensity: VisualDensity.compact,
|
||||
tooltip: t.common.cancel,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return IconButton(
|
||||
key: _buttonKey,
|
||||
icon: const AppIcon(Symbols.monitor_heart_rounded, color: Colors.white),
|
||||
onPressed: _togglePanel,
|
||||
tooltip: t.serverTasks.title,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user