diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index 9db3662f..ea234757 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Tilpas tastaturgenveje", "videoPlayerNavigation": "Videoafspillernavigation", "videoPlayerNavigationDescription": "Brug piletaster til at navigere videoafspillerkontroller", + "watchTogetherRelay": "Watch Together-relay", + "watchTogetherRelayDefault": "Standard", + "watchTogetherRelayDescription": "Angiv en brugerdefineret relay-server til Watch Together. Alle deltagere skal bruge den samme server.", + "watchTogetherRelayHint": "https://min-relay.eksempel.dk", "crashReporting": "Fejlrapportering", "crashReportingDescription": "Send fejlrapporter for at hjælpe med at forbedre appen", "debugLogging": "Fejlfindingslogning", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index fdeffdb4..afb3bbb1 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Tastenkürzel anpassen", "videoPlayerNavigation": "Videoplayer-Navigation", "videoPlayerNavigationDescription": "Pfeiltasten zur Navigation der Videoplayer-Steuerung verwenden", + "watchTogetherRelay": "Gemeinsam Schauen Relay", + "watchTogetherRelayDefault": "Standard", + "watchTogetherRelayDescription": "Einen benutzerdefinierten Relay-Server für Gemeinsam Schauen festlegen. Alle Teilnehmer müssen denselben Server verwenden.", + "watchTogetherRelayHint": "https://mein-relay.beispiel.de", "crashReporting": "Absturzberichte", "crashReportingDescription": "Absturzberichte senden, um die App zu verbessern", "debugLogging": "Debug-Protokollierung", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index 38cedb34..63b1ebb5 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Customize keyboard shortcuts", "videoPlayerNavigation": "Video Player Navigation", "videoPlayerNavigationDescription": "Use arrow keys to navigate video player controls", + "watchTogetherRelay": "Watch Together Relay", + "watchTogetherRelayDefault": "Default", + "watchTogetherRelayDescription": "Set a custom relay server for Watch Together. All participants must use the same server.", + "watchTogetherRelayHint": "https://my-relay.example.com", "crashReporting": "Crash Reporting", "crashReportingDescription": "Send crash reports to help improve the app", "debugLogging": "Debug Logging", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index 3302c07a..b08174b3 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Personalizar los atajos de teclado", "videoPlayerNavigation": "Navegación del Reproductor de Video", "videoPlayerNavigationDescription": "Usar las teclas de flecha para navegar por los controles del reproductor", + "watchTogetherRelay": "Relay de Ver Juntos", + "watchTogetherRelayDefault": "Predeterminado", + "watchTogetherRelayDescription": "Configurar un servidor relay personalizado para Ver Juntos. Todos los participantes deben usar el mismo servidor.", + "watchTogetherRelayHint": "https://mi-relay.ejemplo.com", "crashReporting": "Informes de Errores", "crashReportingDescription": "Enviar informes de errores para mejorar la aplicación", "debugLogging": "Registro de Depuración", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index ef75b83c..f06b017f 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Personnaliser les raccourcis clavier", "videoPlayerNavigation": "Navigation dans le lecteur vidéo", "videoPlayerNavigationDescription": "Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.", + "watchTogetherRelay": "Relais Regarder Ensemble", + "watchTogetherRelayDefault": "Par défaut", + "watchTogetherRelayDescription": "Définir un serveur relais personnalisé pour Regarder Ensemble. Tous les participants doivent utiliser le même serveur.", + "watchTogetherRelayHint": "https://mon-relais.exemple.fr", "crashReporting": "Rapports de plantage", "crashReportingDescription": "Envoyer des rapports de plantage pour améliorer l'application", "debugLogging": "Journalisation de débogage", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 2ea90778..3181abf9 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Personalizza le scorciatoie da tastiera", "videoPlayerNavigation": "Navigazione del lettore video", "videoPlayerNavigationDescription": "Usa i tasti freccia per navigare nei controlli del lettore video", + "watchTogetherRelay": "Relay Guarda Insieme", + "watchTogetherRelayDefault": "Predefinito", + "watchTogetherRelayDescription": "Imposta un server relay personalizzato per Guarda Insieme. Tutti i partecipanti devono utilizzare lo stesso server.", + "watchTogetherRelayHint": "https://mio-relay.esempio.it", "crashReporting": "Segnalazione errori", "crashReportingDescription": "Invia segnalazioni di errori per migliorare l'app", "debugLogging": "Log di debug", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index bfb41a2c..7b3cd37f 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "キーボードショートカットをカスタマイズ", "videoPlayerNavigation": "動画プレーヤーナビゲーション", "videoPlayerNavigationDescription": "矢印キーで動画プレーヤーコントロールを操作", + "watchTogetherRelay": "一緒に視聴リレーサーバー", + "watchTogetherRelayDefault": "デフォルト", + "watchTogetherRelayDescription": "一緒に視聴用のカスタムリレーサーバーを設定します。すべての参加者が同じサーバーを使用する必要があります。", + "watchTogetherRelayHint": "https://my-relay.example.com", "crashReporting": "クラッシュレポート", "crashReportingDescription": "アプリの改善に役立つクラッシュレポートを送信", "debugLogging": "デバッグログ", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index f164547a..9ef71301 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "사용자 정의 키보드 단축키", "videoPlayerNavigation": "비디오 플레이어 탐색", "videoPlayerNavigationDescription": "방향 키를 사용하여 비디오 플레이어 컨트롤 탐색", + "watchTogetherRelay": "함께 보기 릴레이", + "watchTogetherRelayDefault": "기본값", + "watchTogetherRelayDescription": "함께 보기에 사용할 사용자 지정 릴레이 서버를 설정합니다. 모든 참가자가 동일한 서버를 사용해야 합니다.", + "watchTogetherRelayHint": "https://my-relay.example.com", "crashReporting": "충돌 보고", "crashReportingDescription": "앱 개선을 위해 충돌 보고서 전송", "debugLogging": "디버그 로깅", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 4a15b16c..670d23ce 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Tilpass tastatursnarveier", "videoPlayerNavigation": "Videospillernavigering", "videoPlayerNavigationDescription": "Bruk piltaster for å navigere videospillerkontroller", + "watchTogetherRelay": "Se Sammen-relay", + "watchTogetherRelayDefault": "Standard", + "watchTogetherRelayDescription": "Angi en egendefinert relay-server for Se Sammen. Alle deltakere må bruke den samme serveren.", + "watchTogetherRelayHint": "https://min-relay.eksempel.no", "crashReporting": "Krasjrapportering", "crashReportingDescription": "Send krasjrapporter for å hjelpe med å forbedre appen", "debugLogging": "Feilsøkingslogging", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index 5b10ea3e..856f55a8 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Pas toetsenbord sneltoetsen aan", "videoPlayerNavigation": "Videospeler navigatie", "videoPlayerNavigationDescription": "Gebruik pijltjestoetsen om door de videospeler bediening te navigeren", + "watchTogetherRelay": "Samen Kijken Relay", + "watchTogetherRelayDefault": "Standaard", + "watchTogetherRelayDescription": "Stel een aangepaste relay-server in voor Samen Kijken. Alle deelnemers moeten dezelfde server gebruiken.", + "watchTogetherRelayHint": "https://mijn-relay.voorbeeld.nl", "crashReporting": "Crashrapportage", "crashReportingDescription": "Crashrapporten verzenden om de app te verbeteren", "debugLogging": "Debug logging", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index bb431634..0cd31819 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Dostosuj skróty klawiszowe", "videoPlayerNavigation": "Nawigacja odtwarzacza wideo", "videoPlayerNavigationDescription": "Użyj klawiszy strzałek do nawigacji kontrolkami odtwarzacza", + "watchTogetherRelay": "Relay Oglądaj Razem", + "watchTogetherRelayDefault": "Domyślny", + "watchTogetherRelayDescription": "Ustaw niestandardowy serwer relay dla Oglądaj Razem. Wszyscy uczestnicy muszą korzystać z tego samego serwera.", + "watchTogetherRelayHint": "https://moj-relay.przyklad.pl", "crashReporting": "Raportowanie błędów", "crashReportingDescription": "Wysyłaj raporty o błędach, aby pomóc ulepszyć aplikację", "debugLogging": "Logowanie debugowania", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index 03229dc8..4d1c3b9d 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Personalizar atalhos de teclado", "videoPlayerNavigation": "Navegação do Player de Vídeo", "videoPlayerNavigationDescription": "Usar teclas de seta para navegar nos controles do player", + "watchTogetherRelay": "Relay do Assistir Juntos", + "watchTogetherRelayDefault": "Padrão", + "watchTogetherRelayDescription": "Definir um servidor relay personalizado para Assistir Juntos. Todos os participantes devem usar o mesmo servidor.", + "watchTogetherRelayHint": "https://meu-relay.exemplo.com.br", "crashReporting": "Relatório de Erros", "crashReportingDescription": "Enviar relatórios de erros para ajudar a melhorar o app", "debugLogging": "Log de Depuração", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 95d704b5..c0fd9a24 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Настроить горячие клавиши", "videoPlayerNavigation": "Навигация видеоплеера", "videoPlayerNavigationDescription": "Использовать клавиши стрелок для навигации по элементам управления плеером", + "watchTogetherRelay": "Relay совместного просмотра", + "watchTogetherRelayDefault": "По умолчанию", + "watchTogetherRelayDescription": "Указать пользовательский relay-сервер для совместного просмотра. Все участники должны использовать один и тот же сервер.", + "watchTogetherRelayHint": "https://my-relay.example.com", "crashReporting": "Отчёты об ошибках", "crashReportingDescription": "Отправлять отчёты об ошибках для улучшения приложения", "debugLogging": "Журнал отладки", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 85cf7280..438d0791 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 15 -/// Strings: 12045 (803 per locale) +/// Strings: 12105 (807 per locale) /// -/// Built on 2026-03-27 at 16:34 UTC +/// Built on 2026-03-28 at 13:35 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 698220ef..14b1fc00 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsDa implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Tilpas tastaturgenveje'; @override String get videoPlayerNavigation => 'Videoafspillernavigation'; @override String get videoPlayerNavigationDescription => 'Brug piletaster til at navigere videoafspillerkontroller'; + @override String get watchTogetherRelay => 'Watch Together-relay'; + @override String get watchTogetherRelayDefault => 'Standard'; + @override String get watchTogetherRelayDescription => 'Angiv en brugerdefineret relay-server til Watch Together. Alle deltagere skal bruge den samme server.'; + @override String get watchTogetherRelayHint => 'https://min-relay.eksempel.dk'; @override String get crashReporting => 'Fejlrapportering'; @override String get crashReportingDescription => 'Send fejlrapporter for at hjælpe med at forbedre appen'; @override String get debugLogging => 'Fejlfindingslogning'; @@ -1440,6 +1444,10 @@ extension on TranslationsDa { 'settings.keyboardShortcutsDescription' => 'Tilpas tastaturgenveje', 'settings.videoPlayerNavigation' => 'Videoafspillernavigation', 'settings.videoPlayerNavigationDescription' => 'Brug piletaster til at navigere videoafspillerkontroller', + 'settings.watchTogetherRelay' => 'Watch Together-relay', + 'settings.watchTogetherRelayDefault' => 'Standard', + 'settings.watchTogetherRelayDescription' => 'Angiv en brugerdefineret relay-server til Watch Together. Alle deltagere skal bruge den samme server.', + 'settings.watchTogetherRelayHint' => 'https://min-relay.eksempel.dk', 'settings.crashReporting' => 'Fejlrapportering', 'settings.crashReportingDescription' => 'Send fejlrapporter for at hjælpe med at forbedre appen', 'settings.debugLogging' => 'Fejlfindingslogning', @@ -1808,12 +1816,12 @@ extension on TranslationsDa { 'liveTv.today' => 'I dag', 'liveTv.midnight' => 'Midnat', 'liveTv.overnight' => 'Nat', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Morgen', 'liveTv.daytime' => 'Dagtid', 'liveTv.evening' => 'Aften', 'liveTv.lateNight' => 'Sen aften', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'Hvad der kører', 'liveTv.watchChannel' => 'Se kanal', 'liveTv.favorites' => 'Favoritter', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index fe4e07b2..2ad5b2f0 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsDe implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; @override String get videoPlayerNavigation => 'Videoplayer-Navigation'; @override String get videoPlayerNavigationDescription => 'Pfeiltasten zur Navigation der Videoplayer-Steuerung verwenden'; + @override String get watchTogetherRelay => 'Gemeinsam Schauen Relay'; + @override String get watchTogetherRelayDefault => 'Standard'; + @override String get watchTogetherRelayDescription => 'Einen benutzerdefinierten Relay-Server für Gemeinsam Schauen festlegen. Alle Teilnehmer müssen denselben Server verwenden.'; + @override String get watchTogetherRelayHint => 'https://mein-relay.beispiel.de'; @override String get crashReporting => 'Absturzberichte'; @override String get crashReportingDescription => 'Absturzberichte senden, um die App zu verbessern'; @override String get debugLogging => 'Debug-Protokollierung'; @@ -1440,6 +1444,10 @@ extension on TranslationsDe { 'settings.keyboardShortcutsDescription' => 'Tastenkürzel anpassen', 'settings.videoPlayerNavigation' => 'Videoplayer-Navigation', 'settings.videoPlayerNavigationDescription' => 'Pfeiltasten zur Navigation der Videoplayer-Steuerung verwenden', + 'settings.watchTogetherRelay' => 'Gemeinsam Schauen Relay', + 'settings.watchTogetherRelayDefault' => 'Standard', + 'settings.watchTogetherRelayDescription' => 'Einen benutzerdefinierten Relay-Server für Gemeinsam Schauen festlegen. Alle Teilnehmer müssen denselben Server verwenden.', + 'settings.watchTogetherRelayHint' => 'https://mein-relay.beispiel.de', 'settings.crashReporting' => 'Absturzberichte', 'settings.crashReportingDescription' => 'Absturzberichte senden, um die App zu verbessern', 'settings.debugLogging' => 'Debug-Protokollierung', @@ -1808,12 +1816,12 @@ extension on TranslationsDe { 'liveTv.today' => 'Heute', 'liveTv.midnight' => 'Mitternacht', 'liveTv.overnight' => 'Nacht', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Morgen', 'liveTv.daytime' => 'Tagsüber', 'liveTv.evening' => 'Abend', 'liveTv.lateNight' => 'Spätnacht', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'Jetzt im TV', 'liveTv.watchChannel' => 'Kanal ansehen', 'liveTv.favorites' => 'Favoriten', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index c65423b8..615385b0 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -553,6 +553,18 @@ class TranslationsSettingsEn { /// en: 'Use arrow keys to navigate video player controls' String get videoPlayerNavigationDescription => 'Use arrow keys to navigate video player controls'; + /// en: 'Watch Together Relay' + String get watchTogetherRelay => 'Watch Together Relay'; + + /// en: 'Default' + String get watchTogetherRelayDefault => 'Default'; + + /// en: 'Set a custom relay server for Watch Together. All participants must use the same server.' + String get watchTogetherRelayDescription => 'Set a custom relay server for Watch Together. All participants must use the same server.'; + + /// en: 'https://my-relay.example.com' + String get watchTogetherRelayHint => 'https://my-relay.example.com'; + /// en: 'Crash Reporting' String get crashReporting => 'Crash Reporting'; @@ -3053,6 +3065,10 @@ extension on Translations { 'settings.keyboardShortcutsDescription' => 'Customize keyboard shortcuts', 'settings.videoPlayerNavigation' => 'Video Player Navigation', 'settings.videoPlayerNavigationDescription' => 'Use arrow keys to navigate video player controls', + 'settings.watchTogetherRelay' => 'Watch Together Relay', + 'settings.watchTogetherRelayDefault' => 'Default', + 'settings.watchTogetherRelayDescription' => 'Set a custom relay server for Watch Together. All participants must use the same server.', + 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', 'settings.crashReporting' => 'Crash Reporting', 'settings.crashReportingDescription' => 'Send crash reports to help improve the app', 'settings.debugLogging' => 'Debug Logging', @@ -3421,12 +3437,12 @@ extension on Translations { 'liveTv.today' => 'Today', 'liveTv.midnight' => 'Midnight', 'liveTv.overnight' => 'Overnight', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Morning', 'liveTv.daytime' => 'Daytime', 'liveTv.evening' => 'Evening', 'liveTv.lateNight' => 'Late Night', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'What\'s On', 'liveTv.watchChannel' => 'Watch Channel', 'liveTv.favorites' => 'Favorites', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 623b11ac..4714e772 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsEs implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Personalizar los atajos de teclado'; @override String get videoPlayerNavigation => 'Navegación del Reproductor de Video'; @override String get videoPlayerNavigationDescription => 'Usar las teclas de flecha para navegar por los controles del reproductor'; + @override String get watchTogetherRelay => 'Relay de Ver Juntos'; + @override String get watchTogetherRelayDefault => 'Predeterminado'; + @override String get watchTogetherRelayDescription => 'Configurar un servidor relay personalizado para Ver Juntos. Todos los participantes deben usar el mismo servidor.'; + @override String get watchTogetherRelayHint => 'https://mi-relay.ejemplo.com'; @override String get crashReporting => 'Informes de Errores'; @override String get crashReportingDescription => 'Enviar informes de errores para mejorar la aplicación'; @override String get debugLogging => 'Registro de Depuración'; @@ -1440,6 +1444,10 @@ extension on TranslationsEs { 'settings.keyboardShortcutsDescription' => 'Personalizar los atajos de teclado', 'settings.videoPlayerNavigation' => 'Navegación del Reproductor de Video', 'settings.videoPlayerNavigationDescription' => 'Usar las teclas de flecha para navegar por los controles del reproductor', + 'settings.watchTogetherRelay' => 'Relay de Ver Juntos', + 'settings.watchTogetherRelayDefault' => 'Predeterminado', + 'settings.watchTogetherRelayDescription' => 'Configurar un servidor relay personalizado para Ver Juntos. Todos los participantes deben usar el mismo servidor.', + 'settings.watchTogetherRelayHint' => 'https://mi-relay.ejemplo.com', 'settings.crashReporting' => 'Informes de Errores', 'settings.crashReportingDescription' => 'Enviar informes de errores para mejorar la aplicación', 'settings.debugLogging' => 'Registro de Depuración', @@ -1808,12 +1816,12 @@ extension on TranslationsEs { 'liveTv.today' => 'Hoy', 'liveTv.midnight' => 'Medianoche', 'liveTv.overnight' => 'Madrugada', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Mañana', 'liveTv.daytime' => 'Día', 'liveTv.evening' => 'Noche', 'liveTv.lateNight' => 'Trasnoche', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'En emisión', 'liveTv.watchChannel' => 'Ver canal', 'liveTv.favorites' => 'Favoritos', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index a3e26017..0ea61ab3 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsFr implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Personnaliser les raccourcis clavier'; @override String get videoPlayerNavigation => 'Navigation dans le lecteur vidéo'; @override String get videoPlayerNavigationDescription => 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.'; + @override String get watchTogetherRelay => 'Relais Regarder Ensemble'; + @override String get watchTogetherRelayDefault => 'Par défaut'; + @override String get watchTogetherRelayDescription => 'Définir un serveur relais personnalisé pour Regarder Ensemble. Tous les participants doivent utiliser le même serveur.'; + @override String get watchTogetherRelayHint => 'https://mon-relais.exemple.fr'; @override String get crashReporting => 'Rapports de plantage'; @override String get crashReportingDescription => 'Envoyer des rapports de plantage pour améliorer l\'application'; @override String get debugLogging => 'Journalisation de débogage'; @@ -1440,6 +1444,10 @@ extension on TranslationsFr { 'settings.keyboardShortcutsDescription' => 'Personnaliser les raccourcis clavier', 'settings.videoPlayerNavigation' => 'Navigation dans le lecteur vidéo', 'settings.videoPlayerNavigationDescription' => 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.', + 'settings.watchTogetherRelay' => 'Relais Regarder Ensemble', + 'settings.watchTogetherRelayDefault' => 'Par défaut', + 'settings.watchTogetherRelayDescription' => 'Définir un serveur relais personnalisé pour Regarder Ensemble. Tous les participants doivent utiliser le même serveur.', + 'settings.watchTogetherRelayHint' => 'https://mon-relais.exemple.fr', 'settings.crashReporting' => 'Rapports de plantage', 'settings.crashReportingDescription' => 'Envoyer des rapports de plantage pour améliorer l\'application', 'settings.debugLogging' => 'Journalisation de débogage', @@ -1808,12 +1816,12 @@ extension on TranslationsFr { 'liveTv.today' => 'Aujourd\'hui', 'liveTv.midnight' => 'Minuit', 'liveTv.overnight' => 'Nuit', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Matin', 'liveTv.daytime' => 'Journée', 'liveTv.evening' => 'Soirée', 'liveTv.lateNight' => 'Nuit tardive', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'En ce moment', 'liveTv.watchChannel' => 'Regarder la chaîne', 'liveTv.favorites' => 'Favoris', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index a5fb368f..b2f265a6 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsIt implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Personalizza le scorciatoie da tastiera'; @override String get videoPlayerNavigation => 'Navigazione del lettore video'; @override String get videoPlayerNavigationDescription => 'Usa i tasti freccia per navigare nei controlli del lettore video'; + @override String get watchTogetherRelay => 'Relay Guarda Insieme'; + @override String get watchTogetherRelayDefault => 'Predefinito'; + @override String get watchTogetherRelayDescription => 'Imposta un server relay personalizzato per Guarda Insieme. Tutti i partecipanti devono utilizzare lo stesso server.'; + @override String get watchTogetherRelayHint => 'https://mio-relay.esempio.it'; @override String get crashReporting => 'Segnalazione errori'; @override String get crashReportingDescription => 'Invia segnalazioni di errori per migliorare l\'app'; @override String get debugLogging => 'Log di debug'; @@ -1440,6 +1444,10 @@ extension on TranslationsIt { 'settings.keyboardShortcutsDescription' => 'Personalizza le scorciatoie da tastiera', 'settings.videoPlayerNavigation' => 'Navigazione del lettore video', 'settings.videoPlayerNavigationDescription' => 'Usa i tasti freccia per navigare nei controlli del lettore video', + 'settings.watchTogetherRelay' => 'Relay Guarda Insieme', + 'settings.watchTogetherRelayDefault' => 'Predefinito', + 'settings.watchTogetherRelayDescription' => 'Imposta un server relay personalizzato per Guarda Insieme. Tutti i partecipanti devono utilizzare lo stesso server.', + 'settings.watchTogetherRelayHint' => 'https://mio-relay.esempio.it', 'settings.crashReporting' => 'Segnalazione errori', 'settings.crashReportingDescription' => 'Invia segnalazioni di errori per migliorare l\'app', 'settings.debugLogging' => 'Log di debug', @@ -1808,12 +1816,12 @@ extension on TranslationsIt { 'liveTv.today' => 'Oggi', 'liveTv.midnight' => 'Mezzanotte', 'liveTv.overnight' => 'Notte', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Mattina', 'liveTv.daytime' => 'Giorno', 'liveTv.evening' => 'Sera', 'liveTv.lateNight' => 'Notte tarda', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'In onda ora', 'liveTv.watchChannel' => 'Guarda canale', 'liveTv.favorites' => 'Preferiti', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index 7a26e285..20f57070 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsJa implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'キーボードショートカットをカスタマイズ'; @override String get videoPlayerNavigation => '動画プレーヤーナビゲーション'; @override String get videoPlayerNavigationDescription => '矢印キーで動画プレーヤーコントロールを操作'; + @override String get watchTogetherRelay => '一緒に視聴リレーサーバー'; + @override String get watchTogetherRelayDefault => 'デフォルト'; + @override String get watchTogetherRelayDescription => '一緒に視聴用のカスタムリレーサーバーを設定します。すべての参加者が同じサーバーを使用する必要があります。'; + @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; @override String get crashReporting => 'クラッシュレポート'; @override String get crashReportingDescription => 'アプリの改善に役立つクラッシュレポートを送信'; @override String get debugLogging => 'デバッグログ'; @@ -1440,6 +1444,10 @@ extension on TranslationsJa { 'settings.keyboardShortcutsDescription' => 'キーボードショートカットをカスタマイズ', 'settings.videoPlayerNavigation' => '動画プレーヤーナビゲーション', 'settings.videoPlayerNavigationDescription' => '矢印キーで動画プレーヤーコントロールを操作', + 'settings.watchTogetherRelay' => '一緒に視聴リレーサーバー', + 'settings.watchTogetherRelayDefault' => 'デフォルト', + 'settings.watchTogetherRelayDescription' => '一緒に視聴用のカスタムリレーサーバーを設定します。すべての参加者が同じサーバーを使用する必要があります。', + 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', 'settings.crashReporting' => 'クラッシュレポート', 'settings.crashReportingDescription' => 'アプリの改善に役立つクラッシュレポートを送信', 'settings.debugLogging' => 'デバッグログ', @@ -1808,12 +1816,12 @@ extension on TranslationsJa { 'liveTv.today' => '今日', 'liveTv.midnight' => '深夜', 'liveTv.overnight' => '深夜', + _ => null, + } ?? switch (path) { 'liveTv.morning' => '朝', 'liveTv.daytime' => '昼', 'liveTv.evening' => '夕方', 'liveTv.lateNight' => '深夜', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => '放送中', 'liveTv.watchChannel' => 'チャンネルを視聴', 'liveTv.favorites' => 'お気に入り', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 055cf0f5..dbaa4797 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsKo implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => '사용자 정의 키보드 단축키'; @override String get videoPlayerNavigation => '비디오 플레이어 탐색'; @override String get videoPlayerNavigationDescription => '방향 키를 사용하여 비디오 플레이어 컨트롤 탐색'; + @override String get watchTogetherRelay => '함께 보기 릴레이'; + @override String get watchTogetherRelayDefault => '기본값'; + @override String get watchTogetherRelayDescription => '함께 보기에 사용할 사용자 지정 릴레이 서버를 설정합니다. 모든 참가자가 동일한 서버를 사용해야 합니다.'; + @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; @override String get crashReporting => '충돌 보고'; @override String get crashReportingDescription => '앱 개선을 위해 충돌 보고서 전송'; @override String get debugLogging => '디버그 로깅'; @@ -1440,6 +1444,10 @@ extension on TranslationsKo { 'settings.keyboardShortcutsDescription' => '사용자 정의 키보드 단축키', 'settings.videoPlayerNavigation' => '비디오 플레이어 탐색', 'settings.videoPlayerNavigationDescription' => '방향 키를 사용하여 비디오 플레이어 컨트롤 탐색', + 'settings.watchTogetherRelay' => '함께 보기 릴레이', + 'settings.watchTogetherRelayDefault' => '기본값', + 'settings.watchTogetherRelayDescription' => '함께 보기에 사용할 사용자 지정 릴레이 서버를 설정합니다. 모든 참가자가 동일한 서버를 사용해야 합니다.', + 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', 'settings.crashReporting' => '충돌 보고', 'settings.crashReportingDescription' => '앱 개선을 위해 충돌 보고서 전송', 'settings.debugLogging' => '디버그 로깅', @@ -1808,12 +1816,12 @@ extension on TranslationsKo { 'liveTv.today' => '오늘', 'liveTv.midnight' => '자정', 'liveTv.overnight' => '심야', + _ => null, + } ?? switch (path) { 'liveTv.morning' => '아침', 'liveTv.daytime' => '낮', 'liveTv.evening' => '저녁', 'liveTv.lateNight' => '심야 방송', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => '지금 방송 중', 'liveTv.watchChannel' => '채널 시청', 'liveTv.favorites' => '즐겨찾기', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index bb675a20..199d27e1 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsNb implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Tilpass tastatursnarveier'; @override String get videoPlayerNavigation => 'Videospillernavigering'; @override String get videoPlayerNavigationDescription => 'Bruk piltaster for å navigere videospillerkontroller'; + @override String get watchTogetherRelay => 'Se Sammen-relay'; + @override String get watchTogetherRelayDefault => 'Standard'; + @override String get watchTogetherRelayDescription => 'Angi en egendefinert relay-server for Se Sammen. Alle deltakere må bruke den samme serveren.'; + @override String get watchTogetherRelayHint => 'https://min-relay.eksempel.no'; @override String get crashReporting => 'Krasjrapportering'; @override String get crashReportingDescription => 'Send krasjrapporter for å hjelpe med å forbedre appen'; @override String get debugLogging => 'Feilsøkingslogging'; @@ -1440,6 +1444,10 @@ extension on TranslationsNb { 'settings.keyboardShortcutsDescription' => 'Tilpass tastatursnarveier', 'settings.videoPlayerNavigation' => 'Videospillernavigering', 'settings.videoPlayerNavigationDescription' => 'Bruk piltaster for å navigere videospillerkontroller', + 'settings.watchTogetherRelay' => 'Se Sammen-relay', + 'settings.watchTogetherRelayDefault' => 'Standard', + 'settings.watchTogetherRelayDescription' => 'Angi en egendefinert relay-server for Se Sammen. Alle deltakere må bruke den samme serveren.', + 'settings.watchTogetherRelayHint' => 'https://min-relay.eksempel.no', 'settings.crashReporting' => 'Krasjrapportering', 'settings.crashReportingDescription' => 'Send krasjrapporter for å hjelpe med å forbedre appen', 'settings.debugLogging' => 'Feilsøkingslogging', @@ -1808,12 +1816,12 @@ extension on TranslationsNb { 'liveTv.today' => 'I dag', 'liveTv.midnight' => 'Midnatt', 'liveTv.overnight' => 'Natt', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Morgen', 'liveTv.daytime' => 'Dagtid', 'liveTv.evening' => 'Kveld', 'liveTv.lateNight' => 'Sen kveld', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'Hva går nå', 'liveTv.watchChannel' => 'Se kanal', 'liveTv.favorites' => 'Favoritter', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index ddffb49e..87e2cf23 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsNl implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; @override String get videoPlayerNavigation => 'Videospeler navigatie'; @override String get videoPlayerNavigationDescription => 'Gebruik pijltjestoetsen om door de videospeler bediening te navigeren'; + @override String get watchTogetherRelay => 'Samen Kijken Relay'; + @override String get watchTogetherRelayDefault => 'Standaard'; + @override String get watchTogetherRelayDescription => 'Stel een aangepaste relay-server in voor Samen Kijken. Alle deelnemers moeten dezelfde server gebruiken.'; + @override String get watchTogetherRelayHint => 'https://mijn-relay.voorbeeld.nl'; @override String get crashReporting => 'Crashrapportage'; @override String get crashReportingDescription => 'Crashrapporten verzenden om de app te verbeteren'; @override String get debugLogging => 'Debug logging'; @@ -1440,6 +1444,10 @@ extension on TranslationsNl { 'settings.keyboardShortcutsDescription' => 'Pas toetsenbord sneltoetsen aan', 'settings.videoPlayerNavigation' => 'Videospeler navigatie', 'settings.videoPlayerNavigationDescription' => 'Gebruik pijltjestoetsen om door de videospeler bediening te navigeren', + 'settings.watchTogetherRelay' => 'Samen Kijken Relay', + 'settings.watchTogetherRelayDefault' => 'Standaard', + 'settings.watchTogetherRelayDescription' => 'Stel een aangepaste relay-server in voor Samen Kijken. Alle deelnemers moeten dezelfde server gebruiken.', + 'settings.watchTogetherRelayHint' => 'https://mijn-relay.voorbeeld.nl', 'settings.crashReporting' => 'Crashrapportage', 'settings.crashReportingDescription' => 'Crashrapporten verzenden om de app te verbeteren', 'settings.debugLogging' => 'Debug logging', @@ -1808,12 +1816,12 @@ extension on TranslationsNl { 'liveTv.today' => 'Vandaag', 'liveTv.midnight' => 'Middernacht', 'liveTv.overnight' => 'Nacht', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Ochtend', 'liveTv.daytime' => 'Overdag', 'liveTv.evening' => 'Avond', 'liveTv.lateNight' => 'Late avond', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'Nu op TV', 'liveTv.watchChannel' => 'Kanaal bekijken', 'liveTv.favorites' => 'Favorieten', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index df9a1703..4e632a1d 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsPl implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Dostosuj skróty klawiszowe'; @override String get videoPlayerNavigation => 'Nawigacja odtwarzacza wideo'; @override String get videoPlayerNavigationDescription => 'Użyj klawiszy strzałek do nawigacji kontrolkami odtwarzacza'; + @override String get watchTogetherRelay => 'Relay Oglądaj Razem'; + @override String get watchTogetherRelayDefault => 'Domyślny'; + @override String get watchTogetherRelayDescription => 'Ustaw niestandardowy serwer relay dla Oglądaj Razem. Wszyscy uczestnicy muszą korzystać z tego samego serwera.'; + @override String get watchTogetherRelayHint => 'https://moj-relay.przyklad.pl'; @override String get crashReporting => 'Raportowanie błędów'; @override String get crashReportingDescription => 'Wysyłaj raporty o błędach, aby pomóc ulepszyć aplikację'; @override String get debugLogging => 'Logowanie debugowania'; @@ -1440,6 +1444,10 @@ extension on TranslationsPl { 'settings.keyboardShortcutsDescription' => 'Dostosuj skróty klawiszowe', 'settings.videoPlayerNavigation' => 'Nawigacja odtwarzacza wideo', 'settings.videoPlayerNavigationDescription' => 'Użyj klawiszy strzałek do nawigacji kontrolkami odtwarzacza', + 'settings.watchTogetherRelay' => 'Relay Oglądaj Razem', + 'settings.watchTogetherRelayDefault' => 'Domyślny', + 'settings.watchTogetherRelayDescription' => 'Ustaw niestandardowy serwer relay dla Oglądaj Razem. Wszyscy uczestnicy muszą korzystać z tego samego serwera.', + 'settings.watchTogetherRelayHint' => 'https://moj-relay.przyklad.pl', 'settings.crashReporting' => 'Raportowanie błędów', 'settings.crashReportingDescription' => 'Wysyłaj raporty o błędach, aby pomóc ulepszyć aplikację', 'settings.debugLogging' => 'Logowanie debugowania', @@ -1808,12 +1816,12 @@ extension on TranslationsPl { 'liveTv.today' => 'Dzisiaj', 'liveTv.midnight' => 'Północ', 'liveTv.overnight' => 'Nocą', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Rano', 'liveTv.daytime' => 'W ciągu dnia', 'liveTv.evening' => 'Wieczorem', 'liveTv.lateNight' => 'Późna noc', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'Co leci', 'liveTv.watchChannel' => 'Oglądaj kanał', 'liveTv.favorites' => 'Ulubione', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index a1bb8a36..b9a3ea1e 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsPt implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Personalizar atalhos de teclado'; @override String get videoPlayerNavigation => 'Navegação do Player de Vídeo'; @override String get videoPlayerNavigationDescription => 'Usar teclas de seta para navegar nos controles do player'; + @override String get watchTogetherRelay => 'Relay do Assistir Juntos'; + @override String get watchTogetherRelayDefault => 'Padrão'; + @override String get watchTogetherRelayDescription => 'Definir um servidor relay personalizado para Assistir Juntos. Todos os participantes devem usar o mesmo servidor.'; + @override String get watchTogetherRelayHint => 'https://meu-relay.exemplo.com.br'; @override String get crashReporting => 'Relatório de Erros'; @override String get crashReportingDescription => 'Enviar relatórios de erros para ajudar a melhorar o app'; @override String get debugLogging => 'Log de Depuração'; @@ -1440,6 +1444,10 @@ extension on TranslationsPt { 'settings.keyboardShortcutsDescription' => 'Personalizar atalhos de teclado', 'settings.videoPlayerNavigation' => 'Navegação do Player de Vídeo', 'settings.videoPlayerNavigationDescription' => 'Usar teclas de seta para navegar nos controles do player', + 'settings.watchTogetherRelay' => 'Relay do Assistir Juntos', + 'settings.watchTogetherRelayDefault' => 'Padrão', + 'settings.watchTogetherRelayDescription' => 'Definir um servidor relay personalizado para Assistir Juntos. Todos os participantes devem usar o mesmo servidor.', + 'settings.watchTogetherRelayHint' => 'https://meu-relay.exemplo.com.br', 'settings.crashReporting' => 'Relatório de Erros', 'settings.crashReportingDescription' => 'Enviar relatórios de erros para ajudar a melhorar o app', 'settings.debugLogging' => 'Log de Depuração', @@ -1808,12 +1816,12 @@ extension on TranslationsPt { 'liveTv.today' => 'Hoje', 'liveTv.midnight' => 'Meia-noite', 'liveTv.overnight' => 'Madrugada', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Manhã', 'liveTv.daytime' => 'Dia', 'liveTv.evening' => 'Noite', 'liveTv.lateNight' => 'Madrugada', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'O que Está Passando', 'liveTv.watchChannel' => 'Assistir Canal', 'liveTv.favorites' => 'Favoritos', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index 84d3fb30..5f79c0c1 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsRu implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Настроить горячие клавиши'; @override String get videoPlayerNavigation => 'Навигация видеоплеера'; @override String get videoPlayerNavigationDescription => 'Использовать клавиши стрелок для навигации по элементам управления плеером'; + @override String get watchTogetherRelay => 'Relay совместного просмотра'; + @override String get watchTogetherRelayDefault => 'По умолчанию'; + @override String get watchTogetherRelayDescription => 'Указать пользовательский relay-сервер для совместного просмотра. Все участники должны использовать один и тот же сервер.'; + @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; @override String get crashReporting => 'Отчёты об ошибках'; @override String get crashReportingDescription => 'Отправлять отчёты об ошибках для улучшения приложения'; @override String get debugLogging => 'Журнал отладки'; @@ -1440,6 +1444,10 @@ extension on TranslationsRu { 'settings.keyboardShortcutsDescription' => 'Настроить горячие клавиши', 'settings.videoPlayerNavigation' => 'Навигация видеоплеера', 'settings.videoPlayerNavigationDescription' => 'Использовать клавиши стрелок для навигации по элементам управления плеером', + 'settings.watchTogetherRelay' => 'Relay совместного просмотра', + 'settings.watchTogetherRelayDefault' => 'По умолчанию', + 'settings.watchTogetherRelayDescription' => 'Указать пользовательский relay-сервер для совместного просмотра. Все участники должны использовать один и тот же сервер.', + 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', 'settings.crashReporting' => 'Отчёты об ошибках', 'settings.crashReportingDescription' => 'Отправлять отчёты об ошибках для улучшения приложения', 'settings.debugLogging' => 'Журнал отладки', @@ -1808,12 +1816,12 @@ extension on TranslationsRu { 'liveTv.today' => 'Сегодня', 'liveTv.midnight' => 'Полночь', 'liveTv.overnight' => 'Ночь', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Утро', 'liveTv.daytime' => 'День', 'liveTv.evening' => 'Вечер', 'liveTv.lateNight' => 'Поздний вечер', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'Что идёт', 'liveTv.watchChannel' => 'Смотреть канал', 'liveTv.favorites' => 'Избранное', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index 85d8bfc8..1331437b 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsSv implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; @override String get videoPlayerNavigation => 'Navigering i videospelaren'; @override String get videoPlayerNavigationDescription => 'Använd piltangenter för att navigera videospelarens kontroller'; + @override String get watchTogetherRelay => 'Titta Tillsammans-relay'; + @override String get watchTogetherRelayDefault => 'Standard'; + @override String get watchTogetherRelayDescription => 'Ange en anpassad relay-server för Titta Tillsammans. Alla deltagare måste använda samma server.'; + @override String get watchTogetherRelayHint => 'https://min-relay.exempel.se'; @override String get crashReporting => 'Kraschrapportering'; @override String get crashReportingDescription => 'Skicka kraschrapporter för att förbättra appen'; @override String get debugLogging => 'Felsökningsloggning'; @@ -1440,6 +1444,10 @@ extension on TranslationsSv { 'settings.keyboardShortcutsDescription' => 'Anpassa tangentbordsgenvägar', 'settings.videoPlayerNavigation' => 'Navigering i videospelaren', 'settings.videoPlayerNavigationDescription' => 'Använd piltangenter för att navigera videospelarens kontroller', + 'settings.watchTogetherRelay' => 'Titta Tillsammans-relay', + 'settings.watchTogetherRelayDefault' => 'Standard', + 'settings.watchTogetherRelayDescription' => 'Ange en anpassad relay-server för Titta Tillsammans. Alla deltagare måste använda samma server.', + 'settings.watchTogetherRelayHint' => 'https://min-relay.exempel.se', 'settings.crashReporting' => 'Kraschrapportering', 'settings.crashReportingDescription' => 'Skicka kraschrapporter för att förbättra appen', 'settings.debugLogging' => 'Felsökningsloggning', @@ -1808,12 +1816,12 @@ extension on TranslationsSv { 'liveTv.today' => 'Idag', 'liveTv.midnight' => 'Midnatt', 'liveTv.overnight' => 'Natt', + _ => null, + } ?? switch (path) { 'liveTv.morning' => 'Morgon', 'liveTv.daytime' => 'Dagtid', 'liveTv.evening' => 'Kväll', 'liveTv.lateNight' => 'Sen kväll', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => 'På TV nu', 'liveTv.watchChannel' => 'Titta på kanal', 'liveTv.favorites' => 'Favoriter', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index cc13574e..9b012d0b 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -269,6 +269,10 @@ class _TranslationsSettingsZh implements TranslationsSettingsEn { @override String get keyboardShortcutsDescription => '自定义键盘快捷键'; @override String get videoPlayerNavigation => '视频播放器导航'; @override String get videoPlayerNavigationDescription => '使用方向键导航视频播放器控件'; + @override String get watchTogetherRelay => '一起看中继服务器'; + @override String get watchTogetherRelayDefault => '默认'; + @override String get watchTogetherRelayDescription => '设置一起看的自定义中继服务器。所有参与者必须使用相同的服务器。'; + @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; @override String get crashReporting => '崩溃报告'; @override String get crashReportingDescription => '发送崩溃报告以帮助改进应用'; @override String get debugLogging => '调试日志'; @@ -1440,6 +1444,10 @@ extension on TranslationsZh { 'settings.keyboardShortcutsDescription' => '自定义键盘快捷键', 'settings.videoPlayerNavigation' => '视频播放器导航', 'settings.videoPlayerNavigationDescription' => '使用方向键导航视频播放器控件', + 'settings.watchTogetherRelay' => '一起看中继服务器', + 'settings.watchTogetherRelayDefault' => '默认', + 'settings.watchTogetherRelayDescription' => '设置一起看的自定义中继服务器。所有参与者必须使用相同的服务器。', + 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', 'settings.crashReporting' => '崩溃报告', 'settings.crashReportingDescription' => '发送崩溃报告以帮助改进应用', 'settings.debugLogging' => '调试日志', @@ -1808,12 +1816,12 @@ extension on TranslationsZh { 'liveTv.today' => '今天', 'liveTv.midnight' => '午夜', 'liveTv.overnight' => '凌晨', + _ => null, + } ?? switch (path) { 'liveTv.morning' => '上午', 'liveTv.daytime' => '白天', 'liveTv.evening' => '晚上', 'liveTv.lateNight' => '深夜', - _ => null, - } ?? switch (path) { 'liveTv.whatsOn' => '正在播出', 'liveTv.watchChannel' => '观看频道', 'liveTv.favorites' => '收藏', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index 0fe7e76a..9b5451a4 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "Anpassa tangentbordsgenvägar", "videoPlayerNavigation": "Navigering i videospelaren", "videoPlayerNavigationDescription": "Använd piltangenter för att navigera videospelarens kontroller", + "watchTogetherRelay": "Titta Tillsammans-relay", + "watchTogetherRelayDefault": "Standard", + "watchTogetherRelayDescription": "Ange en anpassad relay-server för Titta Tillsammans. Alla deltagare måste använda samma server.", + "watchTogetherRelayHint": "https://min-relay.exempel.se", "crashReporting": "Kraschrapportering", "crashReportingDescription": "Skicka kraschrapporter för att förbättra appen", "debugLogging": "Felsökningsloggning", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 957c70d0..c230b152 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -150,6 +150,10 @@ "keyboardShortcutsDescription": "自定义键盘快捷键", "videoPlayerNavigation": "视频播放器导航", "videoPlayerNavigationDescription": "使用方向键导航视频播放器控件", + "watchTogetherRelay": "一起看中继服务器", + "watchTogetherRelayDefault": "默认", + "watchTogetherRelayDescription": "设置一起看的自定义中继服务器。所有参与者必须使用相同的服务器。", + "watchTogetherRelayHint": "https://my-relay.example.com", "crashReporting": "崩溃报告", "crashReportingDescription": "发送崩溃报告以帮助改进应用", "debugLogging": "调试日志", diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index 847629ca..e6444a5e 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -113,6 +113,7 @@ class _SettingsScreenState extends State with FocusableTab { static const _kResetSettings = 'reset_settings'; static const _kCheckForUpdates = 'check_for_updates'; static const _kAbout = 'about'; + static const _kWatchTogetherRelay = 'watch_together_relay'; KeyboardShortcutsService? _keyboardService; late final bool _keyboardShortcutsSupported = KeyboardShortcutsService.isPlatformSupported(); bool _isLoading = true; @@ -144,6 +145,7 @@ class _SettingsScreenState extends State with FocusableTab { bool _useExternalPlayer = false; bool _confirmExitOnBack = true; String _selectedExternalPlayerName = ''; + String? _customRelayUrl; // Update checking state bool _isCheckingForUpdate = false; @@ -224,6 +226,7 @@ class _SettingsScreenState extends State with FocusableTab { _useExternalPlayer = _settingsService.getUseExternalPlayer(); _selectedExternalPlayerName = _settingsService.getSelectedExternalPlayer().name; _confirmExitOnBack = _settingsService.getConfirmExitOnBack(); + _customRelayUrl = _settingsService.getCustomRelayUrl(); _isLoading = false; }); } @@ -1200,6 +1203,14 @@ class _SettingsScreenState extends State with FocusableTab { style: Theme.of(context).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.bold), ), ), + ListTile( + focusNode: _focusTracker.get(_kWatchTogetherRelay), + leading: const AppIcon(Symbols.dns_rounded, fill: 1), + title: Text(t.settings.watchTogetherRelay), + subtitle: Text(t.settings.watchTogetherRelayDescription), + trailing: const AppIcon(Symbols.chevron_right_rounded, fill: 1), + onTap: () => _showRelayUrlDialog(), + ), SwitchListTile( focusNode: _focusTracker.get(_kCrashReporting), secondary: const AppIcon(Symbols.monitoring_rounded, fill: 1), @@ -1689,6 +1700,52 @@ class _SettingsScreenState extends State with FocusableTab { ); } + void _showRelayUrlDialog() { + final controller = TextEditingController(text: _customRelayUrl ?? ''); + final saveFocusNode = FocusNode(); + + showDialog( + context: context, + builder: (BuildContext dialogContext) { + return AlertDialog( + title: Text(t.settings.watchTogetherRelay), + content: TextField( + controller: controller, + decoration: InputDecoration( + labelText: 'URL', + hintText: t.settings.watchTogetherRelayHint, + ), + autofocus: true, + textInputAction: TextInputAction.done, + onEditingComplete: () => saveFocusNode.requestFocus(), + ), + actions: [ + TextButton( + onPressed: () async { + controller.clear(); + await _settingsService.setCustomRelayUrl(null); + if (mounted) setState(() => _customRelayUrl = null); + if (dialogContext.mounted) Navigator.pop(dialogContext); + }, + child: Text(t.settings.resetToDefault), + ), + TextButton(onPressed: () => Navigator.pop(dialogContext), child: Text(t.common.cancel)), + TextButton( + focusNode: saveFocusNode, + onPressed: () async { + final url = controller.text.trim().isEmpty ? null : controller.text.trim(); + await _settingsService.setCustomRelayUrl(url); + if (mounted) setState(() => _customRelayUrl = url); + if (dialogContext.mounted) Navigator.pop(dialogContext); + }, + child: Text(t.common.save), + ), + ], + ); + }, + ).then((_) => saveFocusNode.dispose()); + } + void _showTextInputDialog({ required String title, required String currentValue, diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 50d74757..99d13a3c 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -99,6 +99,7 @@ class SettingsService extends BaseSharedPreferencesService { static const String _keyAudioNormalization = 'audio_normalization'; static const String _keyCustomShaderPresets = 'custom_shader_presets'; static const String _keyLiveTvDefaultFavorites = 'live_tv_default_favorites'; + static const String _keyCustomRelayUrl = 'custom_relay_url'; SettingsService._(); @@ -870,6 +871,19 @@ class SettingsService extends BaseSharedPreferencesService { return prefs.containsKey(_keyCustomDownloadPath); } + // Custom Relay URL + Future setCustomRelayUrl(String? url) async { + if (url == null || url.trim().isEmpty) { + await prefs.remove(_keyCustomRelayUrl); + } else { + await prefs.setString(_keyCustomRelayUrl, url.trim()); + } + } + + String? getCustomRelayUrl() { + return prefs.getString(_keyCustomRelayUrl); + } + // Download on WiFi Only Future setDownloadOnWifiOnly(bool value) async { await prefs.setBool(_keyDownloadOnWifiOnly, value); @@ -1309,6 +1323,7 @@ class SettingsService extends BaseSharedPreferencesService { prefs.remove(_keyAudioPassthrough), prefs.remove(_keyAudioNormalization), prefs.remove(_keyBufferSizeMigratedToAuto), + prefs.remove(_keyCustomRelayUrl), ]); } diff --git a/lib/watch_together/providers/watch_together_provider.dart b/lib/watch_together/providers/watch_together_provider.dart index 36be3b7b..bd4634b4 100644 --- a/lib/watch_together/providers/watch_together_provider.dart +++ b/lib/watch_together/providers/watch_together_provider.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'package:flutter/foundation.dart'; import '../../mpv/mpv.dart'; +import '../../services/settings_service.dart'; import '../../utils/app_logger.dart'; import '../models/sync_message.dart'; import '../models/watch_session.dart'; @@ -189,7 +190,8 @@ class WatchTogetherProvider with ChangeNotifier { appLogger.d('WatchTogether: Creating session with control mode: $controlMode'); - _peerService = WatchTogetherPeerService(); + final customRelayUrl = SettingsService.instanceOrNull?.getCustomRelayUrl(); + _peerService = WatchTogetherPeerService(customBaseUrl: customRelayUrl); _setupPeerServiceListeners(); try { @@ -236,7 +238,8 @@ class WatchTogetherProvider with ChangeNotifier { appLogger.d('WatchTogether: Joining session: $sessionId'); - _peerService = WatchTogetherPeerService(); + final customRelayUrl = SettingsService.instanceOrNull?.getCustomRelayUrl(); + _peerService = WatchTogetherPeerService(customBaseUrl: customRelayUrl); _setupPeerServiceListeners(); _session = WatchSession.joinAsGuest(sessionId: sessionId); diff --git a/lib/watch_together/screens/watch_together_screen.dart b/lib/watch_together/screens/watch_together_screen.dart index da6a22b8..894be2e9 100644 --- a/lib/watch_together/screens/watch_together_screen.dart +++ b/lib/watch_together/screens/watch_together_screen.dart @@ -9,6 +9,7 @@ import 'package:provider/provider.dart'; import '../../i18n/strings.g.dart'; import '../../focus/focusable_button.dart'; import '../../focus/focusable_wrapper.dart'; +import '../../services/settings_service.dart'; import '../../utils/app_logger.dart'; import '../../utils/dialogs.dart'; import '../../utils/snackbar_helper.dart'; @@ -80,10 +81,12 @@ class _NotInSessionViewState extends State<_NotInSessionView> { bool _isCreating = false; bool _isJoining = false; bool? _healthOk; + String? _customRelayUrl; @override void initState() { super.initState(); + _customRelayUrl = SettingsService.instanceOrNull?.getCustomRelayUrl(); _checkHealth(); } @@ -91,7 +94,7 @@ class _NotInSessionViewState extends State<_NotInSessionView> { try { final client = HttpClient(); client.connectionTimeout = const Duration(seconds: 5); - final request = await client.getUrl(Uri.parse(WatchTogetherPeerService.healthUrl)); + final request = await client.getUrl(Uri.parse(WatchTogetherPeerService.healthUrlFor(_customRelayUrl))); final response = await request.close().namedTimeout(const Duration(seconds: 5), operation: 'WatchTogether health check'); final body = await response.transform(const SystemEncoding().decoder).join(); client.close(); diff --git a/lib/watch_together/services/watch_together_peer_service.dart b/lib/watch_together/services/watch_together_peer_service.dart index decb2afa..7ae18984 100644 --- a/lib/watch_together/services/watch_together_peer_service.dart +++ b/lib/watch_together/services/watch_together_peer_service.dart @@ -20,9 +20,24 @@ export '../../services/base_peer_service.dart' show PeerError, PeerErrorType; /// - Sending/receiving sync messages through the relay server /// - Reconnection on WebSocket drops class WatchTogetherPeerService with KeepaliveMixin { - static const String _baseUrl = 'https://ice.plezy.app'; - static String get healthUrl => '$_baseUrl/health'; - static const String _relayUrl = 'wss://ice.plezy.app/relay'; + static const String defaultBaseUrl = 'https://ice.plezy.app'; + + final String _baseUrl; + + static String get healthUrl => '$defaultBaseUrl/health'; + + static String healthUrlFor(String? customBaseUrl) { + final base = (customBaseUrl != null && customBaseUrl.trim().isNotEmpty) ? customBaseUrl.trim() : defaultBaseUrl; + return '$base/health'; + } + + String get _relayUrl { + final wsBase = _baseUrl.replaceFirst(RegExp(r'^https://'), 'wss://').replaceFirst(RegExp(r'^http://'), 'ws://'); + return '$wsBase/relay'; + } + + WatchTogetherPeerService({String? customBaseUrl}) + : _baseUrl = (customBaseUrl != null && customBaseUrl.trim().isNotEmpty) ? customBaseUrl.trim() : defaultBaseUrl; WebSocketChannel? _channel; StreamSubscription? _channelSubscription;