feat(tv): add actions bottom sheet for non-live schedule items
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -566,7 +566,8 @@
|
||||
"daytime": "낮",
|
||||
"evening": "저녁",
|
||||
"lateNight": "심야 방송",
|
||||
"whatsOn": "지금 방송 중"
|
||||
"whatsOn": "지금 방송 중",
|
||||
"watchChannel": "채널 시청"
|
||||
},
|
||||
"collections": {
|
||||
"title": "컬렉션",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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' => '새 컬렉션 생성',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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' => '下载已删除',
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -566,7 +566,8 @@
|
||||
"daytime": "白天",
|
||||
"evening": "晚上",
|
||||
"lateNight": "深夜",
|
||||
"whatsOn": "正在播出"
|
||||
"whatsOn": "正在播出",
|
||||
"watchChannel": "观看频道"
|
||||
},
|
||||
"downloads": {
|
||||
"title": "下载",
|
||||
|
||||
@@ -215,7 +215,7 @@ class _LiveTvShowScheduleScreenState extends State<LiveTvShowScheduleScreen> {
|
||||
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<LiveTvShowScheduleScreen> {
|
||||
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(
|
||||
|
||||
Reference in New Issue
Block a user