diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 46d221df..04f962f1 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -566,7 +566,8 @@ "daytime": "Tagsüber", "evening": "Abend", "lateNight": "Spätnacht", - "whatsOn": "Jetzt im TV" + "whatsOn": "Jetzt im TV", + "watchChannel": "Kanal ansehen" }, "downloads": { "title": "Downloads", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index ccd29217..69b37cf0 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -566,7 +566,8 @@ "daytime": "Daytime", "evening": "Evening", "lateNight": "Late Night", - "whatsOn": "What's On" + "whatsOn": "What's On", + "watchChannel": "Watch Channel" }, "collections": { "title": "Collections", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index e4b28479..fbc80ad6 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -566,7 +566,8 @@ "daytime": "Día", "evening": "Noche", "lateNight": "Trasnoche", - "whatsOn": "En emisión" + "whatsOn": "En emisión", + "watchChannel": "Ver canal" }, "collections": { "title": "Colecciones", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index 7a7751e4..b5e28757 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -566,7 +566,8 @@ "daytime": "Journée", "evening": "Soirée", "lateNight": "Nuit tardive", - "whatsOn": "En ce moment" + "whatsOn": "En ce moment", + "watchChannel": "Regarder la chaîne" }, "collections": { "title": "Collections", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 33aa2e8b..a0899e2a 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -566,7 +566,8 @@ "daytime": "Giorno", "evening": "Sera", "lateNight": "Notte tarda", - "whatsOn": "In onda ora" + "whatsOn": "In onda ora", + "watchChannel": "Guarda canale" }, "downloads": { "title": "Download", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index d6e395d5..1bb248b1 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -566,7 +566,8 @@ "daytime": "낮", "evening": "저녁", "lateNight": "심야 방송", - "whatsOn": "지금 방송 중" + "whatsOn": "지금 방송 중", + "watchChannel": "채널 시청" }, "collections": { "title": "컬렉션", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index f3e6a78c..bf2c26c3 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -566,7 +566,8 @@ "daytime": "Overdag", "evening": "Avond", "lateNight": "Late avond", - "whatsOn": "Nu op TV" + "whatsOn": "Nu op TV", + "watchChannel": "Kanaal bekijken" }, "downloads": { "title": "Downloads", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 5d6216f1..aefb9520 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 9 -/// Strings: 6552 (728 per locale) +/// Strings: 6561 (729 per locale) /// -/// Built on 2026-02-12 at 14:47 UTC +/// Built on 2026-02-12 at 17:06 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index bf26a3fc..4cde9ea7 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvDe implements TranslationsLiveTvEn { @override String get evening => 'Abend'; @override String get lateNight => 'Spätnacht'; @override String get whatsOn => 'Jetzt im TV'; + @override String get watchChannel => 'Kanal ansehen'; } // Path: downloads @@ -1718,6 +1719,7 @@ extension on TranslationsDe { 'liveTv.evening' => 'Abend', 'liveTv.lateNight' => 'Spätnacht', 'liveTv.whatsOn' => 'Jetzt im TV', + 'liveTv.watchChannel' => 'Kanal ansehen', 'downloads.title' => 'Downloads', 'downloads.manage' => 'Verwalten', 'downloads.tvShows' => 'Serien', @@ -1726,9 +1728,9 @@ extension on TranslationsDe { 'downloads.noDownloadsDescription' => 'Heruntergeladene Inhalte werden hier für die Offline-Wiedergabe angezeigt', 'downloads.downloadNow' => 'Herunterladen', 'downloads.deleteDownload' => 'Download löschen', - 'downloads.retryDownload' => 'Download wiederholen', _ => null, } ?? switch (path) { + 'downloads.retryDownload' => 'Download wiederholen', 'downloads.downloadQueued' => 'Download in Warteschlange', 'downloads.episodesQueued' => ({required Object count}) => '${count} Episoden zum Download hinzugefügt', 'downloads.downloadDeleted' => 'Download gelöscht', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index 2b6898e0..c6ea9bcc 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -1752,6 +1752,9 @@ class TranslationsLiveTvEn { /// en: 'What's On' String get whatsOn => 'What\'s On'; + + /// en: 'Watch Channel' + String get watchChannel => 'Watch Channel'; } // Path: collections @@ -3181,6 +3184,7 @@ extension on Translations { 'liveTv.evening' => 'Evening', 'liveTv.lateNight' => 'Late Night', 'liveTv.whatsOn' => 'What\'s On', + 'liveTv.watchChannel' => 'Watch Channel', 'collections.title' => 'Collections', 'collections.collection' => 'Collection', 'collections.empty' => 'Collection is empty', @@ -3189,9 +3193,9 @@ extension on Translations { 'collections.deleteConfirm' => ({required Object title}) => 'Are you sure you want to delete "${title}"? This action cannot be undone.', 'collections.deleted' => 'Collection deleted', 'collections.deleteFailed' => 'Failed to delete collection', - 'collections.deleteFailedWithError' => ({required Object error}) => 'Failed to delete collection: ${error}', _ => null, } ?? switch (path) { + 'collections.deleteFailedWithError' => ({required Object error}) => 'Failed to delete collection: ${error}', 'collections.failedToLoadItems' => ({required Object error}) => 'Failed to load collection items: ${error}', 'collections.selectCollection' => 'Select Collection', 'collections.createNewCollection' => 'Create New Collection', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index fe224961..afec841d 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvEs implements TranslationsLiveTvEn { @override String get evening => 'Noche'; @override String get lateNight => 'Trasnoche'; @override String get whatsOn => 'En emisión'; + @override String get watchChannel => 'Ver canal'; } // Path: collections @@ -1718,6 +1719,7 @@ extension on TranslationsEs { 'liveTv.evening' => 'Noche', 'liveTv.lateNight' => 'Trasnoche', 'liveTv.whatsOn' => 'En emisión', + 'liveTv.watchChannel' => 'Ver canal', 'collections.title' => 'Colecciones', 'collections.collection' => 'Colección', 'collections.empty' => 'La colección está vacía', @@ -1726,9 +1728,9 @@ extension on TranslationsEs { 'collections.deleteConfirm' => ({required Object title}) => '¿Estás seguro de que quieres eliminar "${title}"? Esta acción no se puede deshacer.', 'collections.deleted' => 'Colección eliminada', 'collections.deleteFailed' => 'Error al eliminar la colección', - 'collections.deleteFailedWithError' => ({required Object error}) => 'Error al eliminar la colección: ${error}', _ => null, } ?? switch (path) { + 'collections.deleteFailedWithError' => ({required Object error}) => 'Error al eliminar la colección: ${error}', 'collections.failedToLoadItems' => ({required Object error}) => 'Error al cargar los elementos de la colección: ${error}', 'collections.selectCollection' => 'Seleccionar Colección', 'collections.createNewCollection' => 'Crear Nueva Colección', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 04da2bfd..4ddc3606 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvFr implements TranslationsLiveTvEn { @override String get evening => 'Soirée'; @override String get lateNight => 'Nuit tardive'; @override String get whatsOn => 'En ce moment'; + @override String get watchChannel => 'Regarder la chaîne'; } // Path: collections @@ -1718,6 +1719,7 @@ extension on TranslationsFr { 'liveTv.evening' => 'Soirée', 'liveTv.lateNight' => 'Nuit tardive', 'liveTv.whatsOn' => 'En ce moment', + 'liveTv.watchChannel' => 'Regarder la chaîne', 'collections.title' => 'Collections', 'collections.collection' => 'Collection', 'collections.empty' => 'La collection est vide', @@ -1726,9 +1728,9 @@ extension on TranslationsFr { 'collections.deleteConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir supprimer "${title}" ? Cette action ne peut pas être annulée.', 'collections.deleted' => 'Collection supprimée', 'collections.deleteFailed' => 'Échec de la suppression de la collection', - 'collections.deleteFailedWithError' => ({required Object error}) => 'Échec de la suppression de la collection: ${error}', _ => null, } ?? switch (path) { + 'collections.deleteFailedWithError' => ({required Object error}) => 'Échec de la suppression de la collection: ${error}', 'collections.failedToLoadItems' => ({required Object error}) => 'Échec du chargement des éléments de la collection: ${error}', 'collections.selectCollection' => 'Sélectionner une collection', 'collections.createNewCollection' => 'Créer une nouvelle collection', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index 57ae6949..f4bbb8ae 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvIt implements TranslationsLiveTvEn { @override String get evening => 'Sera'; @override String get lateNight => 'Notte tarda'; @override String get whatsOn => 'In onda ora'; + @override String get watchChannel => 'Guarda canale'; } // Path: downloads @@ -1718,6 +1719,7 @@ extension on TranslationsIt { 'liveTv.evening' => 'Sera', 'liveTv.lateNight' => 'Notte tarda', 'liveTv.whatsOn' => 'In onda ora', + 'liveTv.watchChannel' => 'Guarda canale', 'downloads.title' => 'Download', 'downloads.manage' => 'Gestisci', 'downloads.tvShows' => 'Serie TV', @@ -1726,9 +1728,9 @@ extension on TranslationsIt { 'downloads.noDownloadsDescription' => 'I contenuti scaricati appariranno qui per la visualizzazione offline', 'downloads.downloadNow' => 'Scarica', 'downloads.deleteDownload' => 'Elimina download', - 'downloads.retryDownload' => 'Riprova download', _ => null, } ?? switch (path) { + 'downloads.retryDownload' => 'Riprova download', 'downloads.downloadQueued' => 'Download in coda', 'downloads.episodesQueued' => ({required Object count}) => '${count} episodi in coda per il download', 'downloads.downloadDeleted' => 'Download eliminato', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 13370de1..a602edba 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvKo implements TranslationsLiveTvEn { @override String get evening => '저녁'; @override String get lateNight => '심야 방송'; @override String get whatsOn => '지금 방송 중'; + @override String get watchChannel => '채널 시청'; } // Path: collections @@ -1718,6 +1719,7 @@ extension on TranslationsKo { 'liveTv.evening' => '저녁', 'liveTv.lateNight' => '심야 방송', 'liveTv.whatsOn' => '지금 방송 중', + 'liveTv.watchChannel' => '채널 시청', 'collections.title' => '컬렉션', 'collections.collection' => '컬렉션', 'collections.empty' => '컬렉션이 비어 있습니다', @@ -1726,9 +1728,9 @@ extension on TranslationsKo { 'collections.deleteConfirm' => ({required Object title}) => '"${title}"을(를) 삭제 하시겠습니까? 이 작업은 되돌릴 수 없습니다.', 'collections.deleted' => '컬렉션 삭제됨', 'collections.deleteFailed' => '컬렉션 삭제 실패', - 'collections.deleteFailedWithError' => ({required Object error}) => '컬렉션 삭제 실패: ${error}', _ => null, } ?? switch (path) { + 'collections.deleteFailedWithError' => ({required Object error}) => '컬렉션 삭제 실패: ${error}', 'collections.failedToLoadItems' => ({required Object error}) => '컬렉션 항목 로드 실패: ${error}', 'collections.selectCollection' => '컬렉션 선택', 'collections.createNewCollection' => '새 컬렉션 생성', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 77aa0893..aaf6cf4e 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvNl implements TranslationsLiveTvEn { @override String get evening => 'Avond'; @override String get lateNight => 'Late avond'; @override String get whatsOn => 'Nu op TV'; + @override String get watchChannel => 'Kanaal bekijken'; } // Path: downloads @@ -1718,6 +1719,7 @@ extension on TranslationsNl { 'liveTv.evening' => 'Avond', 'liveTv.lateNight' => 'Late avond', 'liveTv.whatsOn' => 'Nu op TV', + 'liveTv.watchChannel' => 'Kanaal bekijken', 'downloads.title' => 'Downloads', 'downloads.manage' => 'Beheren', 'downloads.tvShows' => 'Series', @@ -1726,9 +1728,9 @@ extension on TranslationsNl { 'downloads.noDownloadsDescription' => 'Gedownloade content verschijnt hier voor offline weergave', 'downloads.downloadNow' => 'Download', 'downloads.deleteDownload' => 'Download verwijderen', - 'downloads.retryDownload' => 'Download opnieuw proberen', _ => null, } ?? switch (path) { + 'downloads.retryDownload' => 'Download opnieuw proberen', 'downloads.downloadQueued' => 'Download in wachtrij', 'downloads.episodesQueued' => ({required Object count}) => '${count} afleveringen in wachtrij voor download', 'downloads.downloadDeleted' => 'Download verwijderd', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index b6f73848..1430911f 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvSv implements TranslationsLiveTvEn { @override String get evening => 'Kväll'; @override String get lateNight => 'Sen kväll'; @override String get whatsOn => 'På TV nu'; + @override String get watchChannel => 'Titta på kanal'; } // Path: downloads @@ -1718,6 +1719,7 @@ extension on TranslationsSv { 'liveTv.evening' => 'Kväll', 'liveTv.lateNight' => 'Sen kväll', 'liveTv.whatsOn' => 'På TV nu', + 'liveTv.watchChannel' => 'Titta på kanal', 'downloads.title' => 'Nedladdningar', 'downloads.manage' => 'Hantera', 'downloads.tvShows' => 'TV-serier', @@ -1726,9 +1728,9 @@ extension on TranslationsSv { 'downloads.noDownloadsDescription' => 'Nedladdat innehåll visas här för offline-visning', 'downloads.downloadNow' => 'Ladda ner', 'downloads.deleteDownload' => 'Ta bort nedladdning', - 'downloads.retryDownload' => 'Försök igen', _ => null, } ?? switch (path) { + 'downloads.retryDownload' => 'Försök igen', 'downloads.downloadQueued' => 'Nedladdning köad', 'downloads.episodesQueued' => ({required Object count}) => '${count} avsnitt köade för nedladdning', 'downloads.downloadDeleted' => 'Nedladdning borttagen', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index c6d5a383..58ceccfe 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -808,6 +808,7 @@ class _TranslationsLiveTvZh implements TranslationsLiveTvEn { @override String get evening => '晚上'; @override String get lateNight => '深夜'; @override String get whatsOn => '正在播出'; + @override String get watchChannel => '观看频道'; } // Path: downloads @@ -1718,6 +1719,7 @@ extension on TranslationsZh { 'liveTv.evening' => '晚上', 'liveTv.lateNight' => '深夜', 'liveTv.whatsOn' => '正在播出', + 'liveTv.watchChannel' => '观看频道', 'downloads.title' => '下载', 'downloads.manage' => '管理', 'downloads.tvShows' => '电视剧', @@ -1726,9 +1728,9 @@ extension on TranslationsZh { 'downloads.noDownloadsDescription' => '下载的内容将在此处显示以供离线观看', 'downloads.downloadNow' => '下载', 'downloads.deleteDownload' => '删除下载', - 'downloads.retryDownload' => '重试下载', _ => null, } ?? switch (path) { + 'downloads.retryDownload' => '重试下载', 'downloads.downloadQueued' => '下载已排队', 'downloads.episodesQueued' => ({required Object count}) => '${count} 集已加入下载队列', 'downloads.downloadDeleted' => '下载已删除', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index 0bef2c48..4c715e34 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -566,7 +566,8 @@ "daytime": "Dagtid", "evening": "Kväll", "lateNight": "Sen kväll", - "whatsOn": "På TV nu" + "whatsOn": "På TV nu", + "watchChannel": "Titta på kanal" }, "downloads": { "title": "Nedladdningar", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 1cd66dcd..be3b5d6a 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -566,7 +566,8 @@ "daytime": "白天", "evening": "晚上", "lateNight": "深夜", - "whatsOn": "正在播出" + "whatsOn": "正在播出", + "watchChannel": "观看频道" }, "downloads": { "title": "下载", diff --git a/lib/screens/livetv/live_tv_show_schedule_screen.dart b/lib/screens/livetv/live_tv_show_schedule_screen.dart index 330e5161..5d6f8d04 100644 --- a/lib/screens/livetv/live_tv_show_schedule_screen.dart +++ b/lib/screens/livetv/live_tv_show_schedule_screen.dart @@ -215,7 +215,7 @@ class _LiveTvShowScheduleScreenState extends State { icon: const AppIcon(Symbols.play_arrow_rounded), label: Text(t.common.play), ), - const SizedBox(width: 8), + if (program.isCurrentlyAiring) const SizedBox(width: 8), OutlinedButton.icon( onPressed: () { Navigator.of(sheetContext).pop(); @@ -224,6 +224,17 @@ class _LiveTvShowScheduleScreenState extends State { icon: const AppIcon(Symbols.fiber_manual_record_rounded), label: Text(t.liveTv.record), ), + if (!program.isCurrentlyAiring && channel != null) ...[ + const SizedBox(width: 8), + OutlinedButton.icon( + onPressed: () { + Navigator.of(sheetContext).pop(); + _tuneChannel(channel); + }, + icon: const AppIcon(Symbols.live_tv_rounded), + label: Text(t.liveTv.watchChannel), + ), + ], ], ), ], @@ -333,7 +344,7 @@ class _ScheduleListTile extends StatelessWidget { ].join(' — '); return InkWell( - onTap: isLive ? onTap : null, + onTap: onTap, child: Container( decoration: isLive ? BoxDecoration(