feat(livetv): add DVR and recording support

This commit is contained in:
edde746
2026-05-04 09:31:53 +02:00
parent dee12ac336
commit 720d0d2604
64 changed files with 5542 additions and 210 deletions
+72 -2
View File
@@ -965,6 +965,7 @@ class _TranslationsLiveTvEs extends TranslationsLiveTvEn {
@override String get reloadGuide => 'Recargar guía';
@override String get now => 'Ahora';
@override String get today => 'Hoy';
@override String get tomorrow => 'Mañana';
@override String get midnight => 'Medianoche';
@override String get overnight => 'Madrugada';
@override String get morning => 'Mañana';
@@ -979,6 +980,40 @@ class _TranslationsLiveTvEs extends TranslationsLiveTvEn {
@override String watchFromStart({required Object minutes}) => 'Ver desde el inicio (hace ${minutes} min)';
@override String get watchLive => 'Ver en vivo';
@override String get goToLive => 'Ir a en vivo';
@override String get record => 'Grabar';
@override String get recordEpisode => 'Grabar episodio';
@override String get recordSeries => 'Grabar serie';
@override String get recordOptions => 'Opciones de grabación';
@override String get recordings => 'Grabaciones';
@override String get scheduledRecordings => 'Programadas';
@override String get recordingRules => 'Reglas de grabación';
@override String get noScheduledRecordings => 'No hay grabaciones programadas';
@override String get noRecordingRules => 'Aún no hay reglas de grabación';
@override String get manageRecording => 'Gestionar grabación';
@override String get cancelRecording => 'Cancelar grabación';
@override String get cancelRecordingTitle => '¿Cancelar esta grabación?';
@override String cancelRecordingMessage({required Object title}) => '${title} ya no se grabará.';
@override String get deleteRule => 'Eliminar regla';
@override String get deleteRuleTitle => '¿Eliminar regla de grabación?';
@override String deleteRuleMessage({required Object title}) => 'Los próximos episodios de ${title} no se grabarán.';
@override String get recordingScheduled => 'Grabación programada';
@override String get alreadyScheduled => 'Este programa ya está programado';
@override String get dvrAdminRequired => 'La configuración DVR requiere una cuenta de administrador';
@override String get recordingFailed => 'No se pudo programar la grabación';
@override String get recordingTargetMissing => 'No se pudo determinar la biblioteca de grabación';
@override String get recordNotAvailable => 'Grabación no disponible para este programa';
@override String get recordingCancelled => 'Grabación cancelada';
@override String get recordingRuleDeleted => 'Regla de grabación eliminada';
@override String get processRecordingRules => 'Reevaluar reglas';
@override String get loadingRecordings => 'Cargando grabaciones...';
@override String get recordingInProgress => 'Grabando ahora';
@override String recordingsCount({required Object count}) => '${count} programadas';
@override String get editRule => 'Editar regla';
@override String get editRuleAction => 'Editar';
@override String get recordingRuleUpdated => 'Regla de grabación actualizada';
@override String get guideReloadRequested => 'Solicitada actualización de la guía';
@override String get rulesProcessRequested => 'Solicitada reevaluación de reglas';
@override String get recordShow => 'Grabar programa';
}
// Path: collections
@@ -2372,6 +2407,7 @@ extension on TranslationsEs {
'liveTv.reloadGuide' => 'Recargar guía',
'liveTv.now' => 'Ahora',
'liveTv.today' => 'Hoy',
'liveTv.tomorrow' => 'Mañana',
'liveTv.midnight' => 'Medianoche',
'liveTv.overnight' => 'Madrugada',
'liveTv.morning' => 'Mañana',
@@ -2386,6 +2422,40 @@ extension on TranslationsEs {
'liveTv.watchFromStart' => ({required Object minutes}) => 'Ver desde el inicio (hace ${minutes} min)',
'liveTv.watchLive' => 'Ver en vivo',
'liveTv.goToLive' => 'Ir a en vivo',
'liveTv.record' => 'Grabar',
'liveTv.recordEpisode' => 'Grabar episodio',
'liveTv.recordSeries' => 'Grabar serie',
'liveTv.recordOptions' => 'Opciones de grabación',
'liveTv.recordings' => 'Grabaciones',
'liveTv.scheduledRecordings' => 'Programadas',
'liveTv.recordingRules' => 'Reglas de grabación',
'liveTv.noScheduledRecordings' => 'No hay grabaciones programadas',
'liveTv.noRecordingRules' => 'Aún no hay reglas de grabación',
'liveTv.manageRecording' => 'Gestionar grabación',
'liveTv.cancelRecording' => 'Cancelar grabación',
'liveTv.cancelRecordingTitle' => '¿Cancelar esta grabación?',
'liveTv.cancelRecordingMessage' => ({required Object title}) => '${title} ya no se grabará.',
'liveTv.deleteRule' => 'Eliminar regla',
'liveTv.deleteRuleTitle' => '¿Eliminar regla de grabación?',
'liveTv.deleteRuleMessage' => ({required Object title}) => 'Los próximos episodios de ${title} no se grabarán.',
'liveTv.recordingScheduled' => 'Grabación programada',
'liveTv.alreadyScheduled' => 'Este programa ya está programado',
'liveTv.dvrAdminRequired' => 'La configuración DVR requiere una cuenta de administrador',
'liveTv.recordingFailed' => 'No se pudo programar la grabación',
'liveTv.recordingTargetMissing' => 'No se pudo determinar la biblioteca de grabación',
'liveTv.recordNotAvailable' => 'Grabación no disponible para este programa',
'liveTv.recordingCancelled' => 'Grabación cancelada',
'liveTv.recordingRuleDeleted' => 'Regla de grabación eliminada',
'liveTv.processRecordingRules' => 'Reevaluar reglas',
'liveTv.loadingRecordings' => 'Cargando grabaciones...',
'liveTv.recordingInProgress' => 'Grabando ahora',
'liveTv.recordingsCount' => ({required Object count}) => '${count} programadas',
'liveTv.editRule' => 'Editar regla',
'liveTv.editRuleAction' => 'Editar',
'liveTv.recordingRuleUpdated' => 'Regla de grabación actualizada',
'liveTv.guideReloadRequested' => 'Solicitada actualización de la guía',
'liveTv.rulesProcessRequested' => 'Solicitada reevaluación de reglas',
'liveTv.recordShow' => 'Grabar programa',
'collections.title' => 'Colecciones',
'collections.collection' => 'Colección',
'collections.empty' => 'La colección está vacía',
@@ -2703,6 +2773,8 @@ extension on TranslationsEs {
'metadataEdit.useOriginalTitle' => 'Usar título original',
'metadataEdit.preferredAudioLanguage' => 'Idioma de audio preferido',
'metadataEdit.preferredSubtitleLanguage' => 'Idioma de subtítulos preferido',
_ => null,
} ?? switch (path) {
'metadataEdit.subtitleMode' => 'Selección automática de subtítulos',
'metadataEdit.manuallySelected' => 'Seleccionado manualmente',
'metadataEdit.shownWithForeignAudio' => 'Mostrar con audio extranjero',
@@ -2738,8 +2810,6 @@ extension on TranslationsEs {
'trakt.connectedAs' => ({required Object username}) => 'Conectado como @${username}',
'trakt.disconnectConfirm' => '¿Desconectar cuenta de Trakt?',
'trakt.disconnectConfirmBody' => 'Plezy dejará de enviar eventos de reproducción a Trakt. Puedes volver a conectar cuando quieras.',
_ => null,
} ?? switch (path) {
'trakt.scrobble' => 'Scrobbling en tiempo real',
'trakt.scrobbleDescription' => 'Enviar eventos de reproducción, pausa y parada a Trakt durante la reproducción.',
'trakt.watchedSync' => 'Sincronizar estado de visto',