fix(profiles): name the Plex user and account in one translated chip
A Plex account connection labels itself with the account owner's name. Under a profile tile that reads as being signed in as the owner: the Plex Home tile showed the owner beneath the Home user's own name, and a local profile that borrowed a Home user out of someone else's account showed only the lender. Both halves of the relation now go through a single translated string, so a locale orders them itself instead of inheriting the English "user via account" — az, hu, ja, kk, ko, tr, uz, zh and zh-Hant put the account first. When the Home cache cannot resolve the connection's uuid the chip names the account alone rather than falling back to a bare name. ProfilesView carries the Home user cache that resolution needs, and chip labels ellipsize now that an account label can be an email.
This commit is contained in:
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Bu profil silinsin?",
|
||||
"deleteThisProfileMessage": "${displayName} silinəcək. Qoşulmalar təsirlənmir.",
|
||||
"active": "Aktiv",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "İdarə et",
|
||||
"delete": "Sil",
|
||||
"signOut": "Çıxış et",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Qoşulma yoxdur — bu profili istifadə etmək üçün birini əlavə edin.",
|
||||
"noConnections": "Qoşulma yoxdur",
|
||||
"plexHomeAccount": "Plex Ev hesabı",
|
||||
"plexAccountChip": "Plex hesabı: ${account}",
|
||||
"plexAccountUserChip": "${account} hesabı vasitəsilə ${user}",
|
||||
"connectionDefault": "Defolt",
|
||||
"connectionAs": "${displayName} olaraq",
|
||||
"makeDefault": "Defolt et",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Да се изтрие ли този профил?",
|
||||
"deleteThisProfileMessage": "Премахване на ${displayName}. Връзките не се засягат.",
|
||||
"active": "Активен",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Управление",
|
||||
"delete": "Изтрий",
|
||||
"signOut": "Изход",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Няма връзки — добавете такава, за да използвате този профил.",
|
||||
"noConnections": "Няма връзки",
|
||||
"plexHomeAccount": "Plex Home акаунт",
|
||||
"plexAccountChip": "Plex акаунт: ${account}",
|
||||
"plexAccountUserChip": "${user} през ${account}",
|
||||
"connectionDefault": "По подразбиране",
|
||||
"connectionAs": "като ${displayName}",
|
||||
"makeDefault": "Направи по подразбиране",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Slet denne profil?",
|
||||
"deleteThisProfileMessage": "Fjern ${displayName}. Forbindelser påvirkes ikke.",
|
||||
"active": "Aktiv",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Administrer",
|
||||
"delete": "Slet",
|
||||
"signOut": "Log ud",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Ingen forbindelser — tilføj en for at bruge denne profil.",
|
||||
"noConnections": "Ingen forbindelser",
|
||||
"plexHomeAccount": "Plex Home-konto",
|
||||
"plexAccountChip": "Plex-konto: ${account}",
|
||||
"plexAccountUserChip": "${user} via ${account}",
|
||||
"connectionDefault": "Standard",
|
||||
"connectionAs": "som ${displayName}",
|
||||
"makeDefault": "Gør til standard",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Dieses Profil löschen?",
|
||||
"deleteThisProfileMessage": "${displayName} entfernen. Verbindungen bleiben unberührt.",
|
||||
"active": "Aktiv",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Verwalten",
|
||||
"delete": "Löschen",
|
||||
"signOut": "Abmelden",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Keine Verbindungen — füge eine hinzu, um dieses Profil zu nutzen.",
|
||||
"noConnections": "Keine Verbindungen",
|
||||
"plexHomeAccount": "Plex Home-Konto",
|
||||
"plexAccountChip": "Plex-Konto: ${account}",
|
||||
"plexAccountUserChip": "${user} über ${account}",
|
||||
"connectionDefault": "Standard",
|
||||
"connectionAs": "als ${displayName}",
|
||||
"makeDefault": "Als Standard festlegen",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Delete this profile?",
|
||||
"deleteThisProfileMessage": "Remove ${displayName}. Connections aren't affected.",
|
||||
"active": "Active",
|
||||
"viaPlexAccount": "via ${name}",
|
||||
"manage": "Manage",
|
||||
"delete": "Delete",
|
||||
"signOut": "Sign out",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "No connections — add one to use this profile.",
|
||||
"noConnections": "No connections",
|
||||
"plexHomeAccount": "Plex Home account",
|
||||
"plexAccountChip": "Plex account: ${account}",
|
||||
"plexAccountUserChip": "${user} via ${account}",
|
||||
"connectionDefault": "Default",
|
||||
"connectionAs": "as ${displayName}",
|
||||
"makeDefault": "Make default",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "¿Eliminar este perfil?",
|
||||
"deleteThisProfileMessage": "Eliminar ${displayName}. Las conexiones no se verán afectadas.",
|
||||
"active": "Activo",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Administrar",
|
||||
"delete": "Eliminar",
|
||||
"signOut": "Cerrar sesión",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Sin conexiones — añade una para usar este perfil.",
|
||||
"noConnections": "Sin conexiones",
|
||||
"plexHomeAccount": "Cuenta Plex Home",
|
||||
"plexAccountChip": "Cuenta Plex: ${account}",
|
||||
"plexAccountUserChip": "${user} a través de ${account}",
|
||||
"connectionDefault": "Predeterminada",
|
||||
"connectionAs": "como ${displayName}",
|
||||
"makeDefault": "Establecer como predeterminada",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Supprimer ce profil ?",
|
||||
"deleteThisProfileMessage": "Supprimer ${displayName}. Les connexions ne sont pas affectées.",
|
||||
"active": "Actif",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Gérer",
|
||||
"delete": "Supprimer",
|
||||
"signOut": "Se déconnecter",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Aucune connexion — ajoutez-en une pour utiliser ce profil.",
|
||||
"noConnections": "Aucune connexion",
|
||||
"plexHomeAccount": "Compte Plex Home",
|
||||
"plexAccountChip": "Compte Plex : ${account}",
|
||||
"plexAccountUserChip": "${user} via ${account}",
|
||||
"connectionDefault": "Par défaut",
|
||||
"connectionAs": "en tant que ${displayName}",
|
||||
"makeDefault": "Définir par défaut",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Törlöd ezt a profilt?",
|
||||
"deleteThisProfileMessage": "${displayName} eltávolítása. A kapcsolatokat nem érinti.",
|
||||
"active": "Aktív",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Kezelés",
|
||||
"delete": "Törlés",
|
||||
"signOut": "Kijelentkezés",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Nincsenek kapcsolatok — adj hozzá egyet a profil használatához.",
|
||||
"noConnections": "Nincsenek kapcsolatok",
|
||||
"plexHomeAccount": "Plex Home-fiók",
|
||||
"plexAccountChip": "Plex-fiók: ${account}",
|
||||
"plexAccountUserChip": "${account} fiókján keresztül: ${user}",
|
||||
"connectionDefault": "Alapértelmezett",
|
||||
"connectionAs": "mint ${displayName}",
|
||||
"makeDefault": "Beállítás alapértelmezettként",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Eliminare questo profilo?",
|
||||
"deleteThisProfileMessage": "Rimuovi ${displayName}. Le connessioni resteranno invariate.",
|
||||
"active": "Attivo",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Gestisci",
|
||||
"delete": "Elimina",
|
||||
"signOut": "Esci",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Nessuna connessione — aggiungine una per usare questo profilo.",
|
||||
"noConnections": "Nessuna connessione",
|
||||
"plexHomeAccount": "Account Plex Home",
|
||||
"plexAccountChip": "Account Plex: ${account}",
|
||||
"plexAccountUserChip": "${user} tramite ${account}",
|
||||
"connectionDefault": "Predefinita",
|
||||
"connectionAs": "come ${displayName}",
|
||||
"makeDefault": "Imposta come predefinita",
|
||||
|
||||
@@ -762,7 +762,6 @@
|
||||
"deleteThisProfileTitle": "このプロフィールを削除しますか?",
|
||||
"deleteThisProfileMessage": "${displayName}を削除します。接続には影響しません。",
|
||||
"active": "アクティブ",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "管理",
|
||||
"delete": "削除",
|
||||
"signOut": "サインアウト",
|
||||
@@ -794,6 +793,8 @@
|
||||
"noConnectionsHint": "接続がありません — このプロフィールを使うには接続を追加してください。",
|
||||
"noConnections": "接続がありません",
|
||||
"plexHomeAccount": "Plex Homeアカウント",
|
||||
"plexAccountChip": "Plexアカウント: ${account}",
|
||||
"plexAccountUserChip": "${account}経由の${user}",
|
||||
"connectionDefault": "デフォルト",
|
||||
"connectionAs": "${displayName}として",
|
||||
"makeDefault": "デフォルトに設定",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Осы профиль өшірілсін бе?",
|
||||
"deleteThisProfileMessage": "${displayName} өшіріледі. Қосылымдарға әсер етпейді.",
|
||||
"active": "Белсенді",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Басқару",
|
||||
"delete": "Өшіру",
|
||||
"signOut": "Шығу",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Қосылымдар жоқ — бұл профильді пайдалану үшін қосылым қосыңыз.",
|
||||
"noConnections": "Қосылымдар жоқ",
|
||||
"plexHomeAccount": "Plex Home тіркелгісі",
|
||||
"plexAccountChip": "Plex тіркелгісі: ${account}",
|
||||
"plexAccountUserChip": "${account} арқылы ${user}",
|
||||
"connectionDefault": "Әдепкі",
|
||||
"connectionAs": "${displayName} ретінде",
|
||||
"makeDefault": "Әдепкі ету",
|
||||
|
||||
@@ -762,7 +762,6 @@
|
||||
"deleteThisProfileTitle": "이 프로필을 삭제하시겠습니까?",
|
||||
"deleteThisProfileMessage": "${displayName}을(를) 제거합니다. 연결에는 영향이 없습니다.",
|
||||
"active": "활성",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "관리",
|
||||
"delete": "삭제",
|
||||
"signOut": "로그아웃",
|
||||
@@ -794,6 +793,8 @@
|
||||
"noConnectionsHint": "연결이 없습니다 — 이 프로필을 사용하려면 하나 추가하세요.",
|
||||
"noConnections": "연결 없음",
|
||||
"plexHomeAccount": "Plex Home 계정",
|
||||
"plexAccountChip": "Plex 계정: ${account}",
|
||||
"plexAccountUserChip": "${account} 계정의 ${user}",
|
||||
"connectionDefault": "기본값",
|
||||
"connectionAs": "${displayName}(으)로",
|
||||
"makeDefault": "기본값으로 설정",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Slett denne profilen?",
|
||||
"deleteThisProfileMessage": "Fjern ${displayName}. Tilkoblinger påvirkes ikke.",
|
||||
"active": "Aktiv",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Administrer",
|
||||
"delete": "Slett",
|
||||
"signOut": "Logg ut",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Ingen tilkoblinger — legg til én for å bruke denne profilen.",
|
||||
"noConnections": "Ingen tilkoblinger",
|
||||
"plexHomeAccount": "Plex Home-konto",
|
||||
"plexAccountChip": "Plex-konto: ${account}",
|
||||
"plexAccountUserChip": "${user} via ${account}",
|
||||
"connectionDefault": "Standard",
|
||||
"connectionAs": "som ${displayName}",
|
||||
"makeDefault": "Gjør til standard",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Dit profiel verwijderen?",
|
||||
"deleteThisProfileMessage": "Verwijder ${displayName}. Verbindingen blijven ongewijzigd.",
|
||||
"active": "Actief",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Beheren",
|
||||
"delete": "Verwijderen",
|
||||
"signOut": "Afmelden",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Geen verbindingen — voeg er één toe om dit profiel te gebruiken.",
|
||||
"noConnections": "Geen verbindingen",
|
||||
"plexHomeAccount": "Plex Home-account",
|
||||
"plexAccountChip": "Plex-account: ${account}",
|
||||
"plexAccountUserChip": "${user} via ${account}",
|
||||
"connectionDefault": "Standaard",
|
||||
"connectionAs": "als ${displayName}",
|
||||
"makeDefault": "Als standaard instellen",
|
||||
|
||||
@@ -765,7 +765,6 @@
|
||||
"deleteThisProfileTitle": "Usunąć ten profil?",
|
||||
"deleteThisProfileMessage": "Usuń ${displayName}. Połączenia nie zostaną zmienione.",
|
||||
"active": "Aktywny",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Zarządzaj",
|
||||
"delete": "Usuń",
|
||||
"signOut": "Wyloguj się",
|
||||
@@ -797,6 +796,8 @@
|
||||
"noConnectionsHint": "Brak połączeń — dodaj jedno, aby używać tego profilu.",
|
||||
"noConnections": "Brak połączeń",
|
||||
"plexHomeAccount": "Konto Plex Home",
|
||||
"plexAccountChip": "Konto Plex: ${account}",
|
||||
"plexAccountUserChip": "${user} przez ${account}",
|
||||
"connectionDefault": "Domyślne",
|
||||
"connectionAs": "jako ${displayName}",
|
||||
"makeDefault": "Ustaw jako domyślne",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Excluir este perfil?",
|
||||
"deleteThisProfileMessage": "Remover ${displayName}. As conexões não serão afetadas.",
|
||||
"active": "Ativo",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Gerenciar",
|
||||
"delete": "Excluir",
|
||||
"signOut": "Sair",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Sem conexões — adicione uma para usar este perfil.",
|
||||
"noConnections": "Sem conexões",
|
||||
"plexHomeAccount": "Conta Plex Home",
|
||||
"plexAccountChip": "Conta Plex: ${account}",
|
||||
"plexAccountUserChip": "${user} via ${account}",
|
||||
"connectionDefault": "Padrão",
|
||||
"connectionAs": "como ${displayName}",
|
||||
"makeDefault": "Definir como padrão",
|
||||
|
||||
@@ -765,7 +765,6 @@
|
||||
"deleteThisProfileTitle": "Удалить этот профиль?",
|
||||
"deleteThisProfileMessage": "Удалить ${displayName}. Подключения не изменятся.",
|
||||
"active": "Активный",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Управление",
|
||||
"delete": "Удалить",
|
||||
"signOut": "Выйти",
|
||||
@@ -797,6 +796,8 @@
|
||||
"noConnectionsHint": "Нет соединений — добавьте одно, чтобы использовать этот профиль.",
|
||||
"noConnections": "Нет соединений",
|
||||
"plexHomeAccount": "Аккаунт Plex Home",
|
||||
"plexAccountChip": "Аккаунт Plex: ${account}",
|
||||
"plexAccountUserChip": "${user} через ${account}",
|
||||
"connectionDefault": "По умолчанию",
|
||||
"connectionAs": "как ${displayName}",
|
||||
"makeDefault": "Сделать по умолчанию",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 22
|
||||
/// Strings: 32738 (1488 per locale)
|
||||
/// Strings: 32781 (1490 per locale)
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
||||
@@ -881,6 +881,8 @@ class _Translations$profiles$az extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Qoşulma yoxdur — bu profili istifadə etmək üçün birini əlavə edin.';
|
||||
@override String get noConnections => 'Qoşulma yoxdur';
|
||||
@override String get plexHomeAccount => 'Plex Ev hesabı';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex hesabı: ${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} hesabı vasitəsilə ${user}';
|
||||
@override String get connectionDefault => 'Defolt';
|
||||
@override String connectionAs({required Object displayName}) => '${displayName} olaraq';
|
||||
@override String get makeDefault => 'Defolt et';
|
||||
@@ -2842,6 +2844,8 @@ extension on TranslationsAz {
|
||||
'profiles.noConnectionsHint' => 'Qoşulma yoxdur — bu profili istifadə etmək üçün birini əlavə edin.',
|
||||
'profiles.noConnections' => 'Qoşulma yoxdur',
|
||||
'profiles.plexHomeAccount' => 'Plex Ev hesabı',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex hesabı: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} hesabı vasitəsilə ${user}',
|
||||
'profiles.connectionDefault' => 'Defolt',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '${displayName} olaraq',
|
||||
'profiles.makeDefault' => 'Defolt et',
|
||||
@@ -3224,10 +3228,10 @@ extension on TranslationsAz {
|
||||
'watchTogether.pasteFromClipboard' => 'Buferdən yapışdır',
|
||||
'watchTogether.pleaseEnterCode' => 'Lütfən seans kodunu daxil edin',
|
||||
'watchTogether.codeMustBe5Chars' => 'Seans kodu 5 simvol olmalıdır',
|
||||
'watchTogether.joinInstructions' => 'Qoşulmaq üçün təşkilatçının seans kodunu daxil edin.',
|
||||
'watchTogether.failedToCreate' => 'Seans yaradıla bilmədi',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joinInstructions' => 'Qoşulmaq üçün təşkilatçının seans kodunu daxil edin.',
|
||||
'watchTogether.failedToCreate' => 'Seans yaradıla bilmədi',
|
||||
'watchTogether.failedToJoin' => 'Seansa qoşuluna bilmədi',
|
||||
'watchTogether.sessionCodeCopied' => 'Seans kodu buferə kopyalandı',
|
||||
'watchTogether.relayUnreachable' => 'Rele serverinə çatmaq olmur. İnternet provayderinin bloklaması Birlikdə İzləməyə mane ola bilər.',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$bg extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Няма връзки — добавете такава, за да използвате този профил.';
|
||||
@override String get noConnections => 'Няма връзки';
|
||||
@override String get plexHomeAccount => 'Plex Home акаунт';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex акаунт: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} през ${account}';
|
||||
@override String get connectionDefault => 'По подразбиране';
|
||||
@override String connectionAs({required Object displayName}) => 'като ${displayName}';
|
||||
@override String get makeDefault => 'Направи по подразбиране';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsBg {
|
||||
'profiles.noConnectionsHint' => 'Няма връзки — добавете такава, за да използвате този профил.',
|
||||
'profiles.noConnections' => 'Няма връзки',
|
||||
'profiles.plexHomeAccount' => 'Plex Home акаунт',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex акаунт: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} през ${account}',
|
||||
'profiles.connectionDefault' => 'По подразбиране',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'като ${displayName}',
|
||||
'profiles.makeDefault' => 'Направи по подразбиране',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsBg {
|
||||
'watchTogether.failedToJoin' => 'Неуспешно присъединяване към сесия',
|
||||
'watchTogether.sessionCodeCopied' => 'Кодът на сесията е копиран в клипборда',
|
||||
'watchTogether.relayUnreachable' => 'Релейният сървър е недостъпен. Възможно е интернет доставчикът да блокира гледането заедно.',
|
||||
'watchTogether.reconnectingToHost' => 'Повторно свързване с организатора...',
|
||||
'watchTogether.currentPlayback' => 'Текущо възпроизвеждане',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Повторно свързване с организатора...',
|
||||
'watchTogether.currentPlayback' => 'Текущо възпроизвеждане',
|
||||
'watchTogether.joinCurrentPlayback' => 'Присъедини се към текущото възпроизвеждане',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Върнете се към това, което организаторът гледа в момента',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Неуспешно отваряне на текущото възпроизвеждане',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$da extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Ingen forbindelser — tilføj en for at bruge denne profil.';
|
||||
@override String get noConnections => 'Ingen forbindelser';
|
||||
@override String get plexHomeAccount => 'Plex Home-konto';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex-konto: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} via ${account}';
|
||||
@override String get connectionDefault => 'Standard';
|
||||
@override String connectionAs({required Object displayName}) => 'som ${displayName}';
|
||||
@override String get makeDefault => 'Gør til standard';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsDa {
|
||||
'profiles.noConnectionsHint' => 'Ingen forbindelser — tilføj en for at bruge denne profil.',
|
||||
'profiles.noConnections' => 'Ingen forbindelser',
|
||||
'profiles.plexHomeAccount' => 'Plex Home-konto',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex-konto: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} via ${account}',
|
||||
'profiles.connectionDefault' => 'Standard',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'som ${displayName}',
|
||||
'profiles.makeDefault' => 'Gør til standard',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsDa {
|
||||
'watchTogether.failedToJoin' => 'Kunne ikke deltage i session',
|
||||
'watchTogether.sessionCodeCopied' => 'Sessionskode kopieret til udklipsholder',
|
||||
'watchTogether.relayUnreachable' => 'Relayserveren kan ikke nås. Blokering hos internetudbyderen kan forhindre Se sammen.',
|
||||
'watchTogether.reconnectingToHost' => 'Genopretter forbindelse til vært...',
|
||||
'watchTogether.currentPlayback' => 'Nuværende afspilning',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Genopretter forbindelse til vært...',
|
||||
'watchTogether.currentPlayback' => 'Nuværende afspilning',
|
||||
'watchTogether.joinCurrentPlayback' => 'Deltag i nuværende afspilning',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Hop tilbage til det værten ser nu',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Kunne ikke åbne nuværende afspilning',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$de extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Keine Verbindungen — füge eine hinzu, um dieses Profil zu nutzen.';
|
||||
@override String get noConnections => 'Keine Verbindungen';
|
||||
@override String get plexHomeAccount => 'Plex Home-Konto';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex-Konto: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} über ${account}';
|
||||
@override String get connectionDefault => 'Standard';
|
||||
@override String connectionAs({required Object displayName}) => 'als ${displayName}';
|
||||
@override String get makeDefault => 'Als Standard festlegen';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsDe {
|
||||
'profiles.noConnectionsHint' => 'Keine Verbindungen — füge eine hinzu, um dieses Profil zu nutzen.',
|
||||
'profiles.noConnections' => 'Keine Verbindungen',
|
||||
'profiles.plexHomeAccount' => 'Plex Home-Konto',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex-Konto: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} über ${account}',
|
||||
'profiles.connectionDefault' => 'Standard',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'als ${displayName}',
|
||||
'profiles.makeDefault' => 'Als Standard festlegen',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsDe {
|
||||
'watchTogether.failedToJoin' => 'Beitritt zur Sitzung fehlgeschlagen',
|
||||
'watchTogether.sessionCodeCopied' => 'Sitzungscode in Zwischenablage kopiert',
|
||||
'watchTogether.relayUnreachable' => 'Relay-Server nicht erreichbar. Eine Sperre durch den Internetanbieter kann gemeinsames Schauen verhindern.',
|
||||
'watchTogether.reconnectingToHost' => 'Verbindung zum Host wird wiederhergestellt …',
|
||||
'watchTogether.currentPlayback' => 'Aktuelle Wiedergabe',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Verbindung zum Host wird wiederhergestellt …',
|
||||
'watchTogether.currentPlayback' => 'Aktuelle Wiedergabe',
|
||||
'watchTogether.joinCurrentPlayback' => 'Aktueller Wiedergabe beitreten',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Zu dem Inhalt wechseln, den der Host gerade ansieht',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Aktuelle Wiedergabe konnte nicht geöffnet werden',
|
||||
|
||||
@@ -2296,9 +2296,6 @@ class Translations$profiles$en {
|
||||
/// en: 'Active'
|
||||
String get active => 'Active';
|
||||
|
||||
/// en: 'via ${name}'
|
||||
String viaPlexAccount({required Object name}) => 'via ${name}';
|
||||
|
||||
/// en: 'Manage'
|
||||
String get manage => 'Manage';
|
||||
|
||||
@@ -2392,6 +2389,12 @@ class Translations$profiles$en {
|
||||
/// en: 'Plex Home account'
|
||||
String get plexHomeAccount => 'Plex Home account';
|
||||
|
||||
/// en: 'Plex account: ${account}'
|
||||
String plexAccountChip({required Object account}) => 'Plex account: ${account}';
|
||||
|
||||
/// en: '${user} via ${account}'
|
||||
String plexAccountUserChip({required Object user, required Object account}) => '${user} via ${account}';
|
||||
|
||||
/// en: 'Default'
|
||||
String get connectionDefault => 'Default';
|
||||
|
||||
@@ -6757,7 +6760,6 @@ extension on Translations {
|
||||
'profiles.deleteThisProfileTitle' => 'Delete this profile?',
|
||||
'profiles.deleteThisProfileMessage' => ({required Object displayName}) => 'Remove ${displayName}. Connections aren\'t affected.',
|
||||
'profiles.active' => 'Active',
|
||||
'profiles.viaPlexAccount' => ({required Object name}) => 'via ${name}',
|
||||
'profiles.manage' => 'Manage',
|
||||
'profiles.delete' => 'Delete',
|
||||
'profiles.signOut' => 'Sign out',
|
||||
@@ -6789,6 +6791,8 @@ extension on Translations {
|
||||
'profiles.noConnectionsHint' => 'No connections — add one to use this profile.',
|
||||
'profiles.noConnections' => 'No connections',
|
||||
'profiles.plexHomeAccount' => 'Plex Home account',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex account: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} via ${account}',
|
||||
'profiles.connectionDefault' => 'Default',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'as ${displayName}',
|
||||
'profiles.makeDefault' => 'Make default',
|
||||
@@ -7065,9 +7069,9 @@ extension on Translations {
|
||||
'explore.stats.completed' => ({required Object n}) => '${n} completed',
|
||||
'explore.stats.onHold' => ({required Object n}) => '${n} on hold',
|
||||
'explore.stats.dropped' => ({required Object n}) => '${n} dropped',
|
||||
'explore.season.winter' => 'Winter',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'explore.season.winter' => 'Winter',
|
||||
'explore.season.spring' => 'Spring',
|
||||
'explore.season.summer' => 'Summer',
|
||||
'explore.season.fall' => 'Fall',
|
||||
@@ -7579,9 +7583,9 @@ extension on Translations {
|
||||
'externalPlayer.playerCommand' => 'Command',
|
||||
'externalPlayer.playerPackage' => 'Package Name',
|
||||
'externalPlayer.playerUrlScheme' => 'URL Scheme',
|
||||
'externalPlayer.off' => 'Off',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'externalPlayer.off' => 'Off',
|
||||
'externalPlayer.launchFailed' => 'Failed to open external player',
|
||||
'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} is not installed',
|
||||
'externalPlayer.playInExternalPlayer' => 'Play in External Player',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$es extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Sin conexiones — añade una para usar este perfil.';
|
||||
@override String get noConnections => 'Sin conexiones';
|
||||
@override String get plexHomeAccount => 'Cuenta Plex Home';
|
||||
@override String plexAccountChip({required Object account}) => 'Cuenta Plex: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} a través de ${account}';
|
||||
@override String get connectionDefault => 'Predeterminada';
|
||||
@override String connectionAs({required Object displayName}) => 'como ${displayName}';
|
||||
@override String get makeDefault => 'Establecer como predeterminada';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsEs {
|
||||
'profiles.noConnectionsHint' => 'Sin conexiones — añade una para usar este perfil.',
|
||||
'profiles.noConnections' => 'Sin conexiones',
|
||||
'profiles.plexHomeAccount' => 'Cuenta Plex Home',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Cuenta Plex: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} a través de ${account}',
|
||||
'profiles.connectionDefault' => 'Predeterminada',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'como ${displayName}',
|
||||
'profiles.makeDefault' => 'Establecer como predeterminada',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsEs {
|
||||
'watchTogether.failedToJoin' => 'Error al unirse a la sesión',
|
||||
'watchTogether.sessionCodeCopied' => 'Código de sesión copiado al portapapeles',
|
||||
'watchTogether.relayUnreachable' => 'No se puede acceder al servidor de retransmisión. Es posible que tu proveedor de internet esté bloqueando Ver juntos.',
|
||||
'watchTogether.reconnectingToHost' => 'Reconectando con el anfitrión...',
|
||||
'watchTogether.currentPlayback' => 'Reproducción actual',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Reconectando con el anfitrión...',
|
||||
'watchTogether.currentPlayback' => 'Reproducción actual',
|
||||
'watchTogether.joinCurrentPlayback' => 'Unirse a la reproducción actual',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Vuelve a lo que el anfitrión está viendo ahora mismo',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'No se pudo abrir la reproducción actual',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$fr extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Aucune connexion — ajoutez-en une pour utiliser ce profil.';
|
||||
@override String get noConnections => 'Aucune connexion';
|
||||
@override String get plexHomeAccount => 'Compte Plex Home';
|
||||
@override String plexAccountChip({required Object account}) => 'Compte Plex : ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} via ${account}';
|
||||
@override String get connectionDefault => 'Par défaut';
|
||||
@override String connectionAs({required Object displayName}) => 'en tant que ${displayName}';
|
||||
@override String get makeDefault => 'Définir par défaut';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsFr {
|
||||
'profiles.noConnectionsHint' => 'Aucune connexion — ajoutez-en une pour utiliser ce profil.',
|
||||
'profiles.noConnections' => 'Aucune connexion',
|
||||
'profiles.plexHomeAccount' => 'Compte Plex Home',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Compte Plex : ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} via ${account}',
|
||||
'profiles.connectionDefault' => 'Par défaut',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'en tant que ${displayName}',
|
||||
'profiles.makeDefault' => 'Définir par défaut',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsFr {
|
||||
'watchTogether.failedToJoin' => 'Échec de la connexion à la session',
|
||||
'watchTogether.sessionCodeCopied' => 'Code de session copié dans le presse-papiers',
|
||||
'watchTogether.relayUnreachable' => 'Serveur relais inaccessible. Un blocage par le fournisseur d’accès peut empêcher le fonctionnement de Regarder ensemble.',
|
||||
'watchTogether.reconnectingToHost' => 'Reconnexion à l\'hôte...',
|
||||
'watchTogether.currentPlayback' => 'Lecture en cours',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Reconnexion à l\'hôte...',
|
||||
'watchTogether.currentPlayback' => 'Lecture en cours',
|
||||
'watchTogether.joinCurrentPlayback' => 'Rejoindre la lecture en cours',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Reprendre le contenu que l’hôte regarde actuellement',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Impossible d\'ouvrir la lecture en cours',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$hu extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Nincsenek kapcsolatok — adj hozzá egyet a profil használatához.';
|
||||
@override String get noConnections => 'Nincsenek kapcsolatok';
|
||||
@override String get plexHomeAccount => 'Plex Home-fiók';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex-fiók: ${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} fiókján keresztül: ${user}';
|
||||
@override String get connectionDefault => 'Alapértelmezett';
|
||||
@override String connectionAs({required Object displayName}) => 'mint ${displayName}';
|
||||
@override String get makeDefault => 'Beállítás alapértelmezettként';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsHu {
|
||||
'profiles.noConnectionsHint' => 'Nincsenek kapcsolatok — adj hozzá egyet a profil használatához.',
|
||||
'profiles.noConnections' => 'Nincsenek kapcsolatok',
|
||||
'profiles.plexHomeAccount' => 'Plex Home-fiók',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex-fiók: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} fiókján keresztül: ${user}',
|
||||
'profiles.connectionDefault' => 'Alapértelmezett',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'mint ${displayName}',
|
||||
'profiles.makeDefault' => 'Beállítás alapértelmezettként',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsHu {
|
||||
'watchTogether.failedToJoin' => 'Nem sikerült csatlakozni a munkamenethez',
|
||||
'watchTogether.sessionCodeCopied' => 'A munkamenetkód a vágólapra másolva',
|
||||
'watchTogether.relayUnreachable' => 'A relészerver nem érhető el. Az internetszolgáltató blokkolása megakadályozhatja a közös nézést.',
|
||||
'watchTogether.reconnectingToHost' => 'Újracsatlakozás a házigazdához...',
|
||||
'watchTogether.currentPlayback' => 'Jelenlegi lejátszás',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Újracsatlakozás a házigazdához...',
|
||||
'watchTogether.currentPlayback' => 'Jelenlegi lejátszás',
|
||||
'watchTogether.joinCurrentPlayback' => 'Csatlakozás a jelenlegi lejátszáshoz',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Visszatérés ahhoz, amit a házigazda éppen néz',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Nem sikerült megnyitni a jelenlegi lejátszást',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$it extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Nessuna connessione — aggiungine una per usare questo profilo.';
|
||||
@override String get noConnections => 'Nessuna connessione';
|
||||
@override String get plexHomeAccount => 'Account Plex Home';
|
||||
@override String plexAccountChip({required Object account}) => 'Account Plex: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} tramite ${account}';
|
||||
@override String get connectionDefault => 'Predefinita';
|
||||
@override String connectionAs({required Object displayName}) => 'come ${displayName}';
|
||||
@override String get makeDefault => 'Imposta come predefinita';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsIt {
|
||||
'profiles.noConnectionsHint' => 'Nessuna connessione — aggiungine una per usare questo profilo.',
|
||||
'profiles.noConnections' => 'Nessuna connessione',
|
||||
'profiles.plexHomeAccount' => 'Account Plex Home',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Account Plex: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} tramite ${account}',
|
||||
'profiles.connectionDefault' => 'Predefinita',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'come ${displayName}',
|
||||
'profiles.makeDefault' => 'Imposta come predefinita',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsIt {
|
||||
'watchTogether.failedToJoin' => 'Impossibile unirsi alla sessione',
|
||||
'watchTogether.sessionCodeCopied' => 'Codice della sessione copiato negli appunti',
|
||||
'watchTogether.relayUnreachable' => 'Il server relay non è raggiungibile. Eventuali blocchi dell\'ISP potrebbero impedire l\'uso di Guarda insieme.',
|
||||
'watchTogether.reconnectingToHost' => 'Riconnessione all\'host...',
|
||||
'watchTogether.currentPlayback' => 'Riproduzione corrente',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Riconnessione all\'host...',
|
||||
'watchTogether.currentPlayback' => 'Riproduzione corrente',
|
||||
'watchTogether.joinCurrentPlayback' => 'Unisciti alla riproduzione corrente',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Torna a ciò che l\'host sta guardando in questo momento',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Impossibile aprire la riproduzione corrente',
|
||||
|
||||
@@ -876,6 +876,8 @@ class _Translations$profiles$ja extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => '接続がありません — このプロフィールを使うには接続を追加してください。';
|
||||
@override String get noConnections => '接続がありません';
|
||||
@override String get plexHomeAccount => 'Plex Homeアカウント';
|
||||
@override String plexAccountChip({required Object account}) => 'Plexアカウント: ${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account}経由の${user}';
|
||||
@override String get connectionDefault => 'デフォルト';
|
||||
@override String connectionAs({required Object displayName}) => '${displayName}として';
|
||||
@override String get makeDefault => 'デフォルトに設定';
|
||||
@@ -2824,6 +2826,8 @@ extension on TranslationsJa {
|
||||
'profiles.noConnectionsHint' => '接続がありません — このプロフィールを使うには接続を追加してください。',
|
||||
'profiles.noConnections' => '接続がありません',
|
||||
'profiles.plexHomeAccount' => 'Plex Homeアカウント',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plexアカウント: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account}経由の${user}',
|
||||
'profiles.connectionDefault' => 'デフォルト',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '${displayName}として',
|
||||
'profiles.makeDefault' => 'デフォルトに設定',
|
||||
@@ -3210,10 +3214,10 @@ extension on TranslationsJa {
|
||||
'watchTogether.failedToJoin' => 'セッションへの参加に失敗しました',
|
||||
'watchTogether.sessionCodeCopied' => 'セッションコードをクリップボードにコピーしました',
|
||||
'watchTogether.relayUnreachable' => 'リレーサーバーに接続できません。ISPによるブロックのため「一緒に見る」を利用できない可能性があります。',
|
||||
'watchTogether.reconnectingToHost' => 'ホストに再接続中…',
|
||||
'watchTogether.currentPlayback' => '現在の再生',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'ホストに再接続中…',
|
||||
'watchTogether.currentPlayback' => '現在の再生',
|
||||
'watchTogether.joinCurrentPlayback' => '現在の再生に参加',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'ホストが現在視聴中のコンテンツに戻る',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => '現在の再生を開けませんでした',
|
||||
|
||||
@@ -881,6 +881,8 @@ class _Translations$profiles$kk extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Қосылымдар жоқ — бұл профильді пайдалану үшін қосылым қосыңыз.';
|
||||
@override String get noConnections => 'Қосылымдар жоқ';
|
||||
@override String get plexHomeAccount => 'Plex Home тіркелгісі';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex тіркелгісі: ${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} арқылы ${user}';
|
||||
@override String get connectionDefault => 'Әдепкі';
|
||||
@override String connectionAs({required Object displayName}) => '${displayName} ретінде';
|
||||
@override String get makeDefault => 'Әдепкі ету';
|
||||
@@ -2842,6 +2844,8 @@ extension on TranslationsKk {
|
||||
'profiles.noConnectionsHint' => 'Қосылымдар жоқ — бұл профильді пайдалану үшін қосылым қосыңыз.',
|
||||
'profiles.noConnections' => 'Қосылымдар жоқ',
|
||||
'profiles.plexHomeAccount' => 'Plex Home тіркелгісі',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex тіркелгісі: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} арқылы ${user}',
|
||||
'profiles.connectionDefault' => 'Әдепкі',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '${displayName} ретінде',
|
||||
'profiles.makeDefault' => 'Әдепкі ету',
|
||||
@@ -3224,10 +3228,10 @@ extension on TranslationsKk {
|
||||
'watchTogether.pasteFromClipboard' => 'Алмасу буферінен қою',
|
||||
'watchTogether.pleaseEnterCode' => 'Сеанс кодын енгізіңіз',
|
||||
'watchTogether.codeMustBe5Chars' => 'Сеанс коды 5 таңбадан тұруы керек',
|
||||
'watchTogether.joinInstructions' => 'Ұйымдастырушының сеанс кодын енгізіңіз.',
|
||||
'watchTogether.failedToCreate' => 'Сеансты жасау мүмкін болмады',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joinInstructions' => 'Ұйымдастырушының сеанс кодын енгізіңіз.',
|
||||
'watchTogether.failedToCreate' => 'Сеансты жасау мүмкін болмады',
|
||||
'watchTogether.failedToJoin' => 'Сеансқа қосылу мүмкін болмады',
|
||||
'watchTogether.sessionCodeCopied' => 'Сеанс коды көшірілді',
|
||||
'watchTogether.relayUnreachable' => 'Реле сервері қолжетімсіз.',
|
||||
|
||||
@@ -876,6 +876,8 @@ class _Translations$profiles$ko extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => '연결이 없습니다 — 이 프로필을 사용하려면 하나 추가하세요.';
|
||||
@override String get noConnections => '연결 없음';
|
||||
@override String get plexHomeAccount => 'Plex Home 계정';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex 계정: ${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} 계정의 ${user}';
|
||||
@override String get connectionDefault => '기본값';
|
||||
@override String connectionAs({required Object displayName}) => '${displayName}(으)로';
|
||||
@override String get makeDefault => '기본값으로 설정';
|
||||
@@ -2824,6 +2826,8 @@ extension on TranslationsKo {
|
||||
'profiles.noConnectionsHint' => '연결이 없습니다 — 이 프로필을 사용하려면 하나 추가하세요.',
|
||||
'profiles.noConnections' => '연결 없음',
|
||||
'profiles.plexHomeAccount' => 'Plex Home 계정',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex 계정: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} 계정의 ${user}',
|
||||
'profiles.connectionDefault' => '기본값',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '${displayName}(으)로',
|
||||
'profiles.makeDefault' => '기본값으로 설정',
|
||||
@@ -3210,10 +3214,10 @@ extension on TranslationsKo {
|
||||
'watchTogether.failedToJoin' => '세션 참여 실패',
|
||||
'watchTogether.sessionCodeCopied' => '세션 코드가 클립보드에 복사되었습니다',
|
||||
'watchTogether.relayUnreachable' => '릴레이 서버에 연결할 수 없습니다. ISP 차단으로 함께 보기를 사용하지 못할 수 있습니다.',
|
||||
'watchTogether.reconnectingToHost' => '호스트에 재연결 중...',
|
||||
'watchTogether.currentPlayback' => '현재 재생',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => '호스트에 재연결 중...',
|
||||
'watchTogether.currentPlayback' => '현재 재생',
|
||||
'watchTogether.joinCurrentPlayback' => '현재 재생 참여',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => '호스트가 현재 시청 중인 콘텐츠로 이동합니다',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => '현재 재생을 열 수 없습니다',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$nb extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Ingen tilkoblinger — legg til én for å bruke denne profilen.';
|
||||
@override String get noConnections => 'Ingen tilkoblinger';
|
||||
@override String get plexHomeAccount => 'Plex Home-konto';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex-konto: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} via ${account}';
|
||||
@override String get connectionDefault => 'Standard';
|
||||
@override String connectionAs({required Object displayName}) => 'som ${displayName}';
|
||||
@override String get makeDefault => 'Gjør til standard';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsNb {
|
||||
'profiles.noConnectionsHint' => 'Ingen tilkoblinger — legg til én for å bruke denne profilen.',
|
||||
'profiles.noConnections' => 'Ingen tilkoblinger',
|
||||
'profiles.plexHomeAccount' => 'Plex Home-konto',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex-konto: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} via ${account}',
|
||||
'profiles.connectionDefault' => 'Standard',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'som ${displayName}',
|
||||
'profiles.makeDefault' => 'Gjør til standard',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsNb {
|
||||
'watchTogether.failedToJoin' => 'Kunne ikke bli med i økt',
|
||||
'watchTogether.sessionCodeCopied' => 'Øktkode kopiert til utklippstavle',
|
||||
'watchTogether.relayUnreachable' => 'Reléserveren kan ikke nås. Blokkering hos internettleverandøren kan hindre Se sammen.',
|
||||
'watchTogether.reconnectingToHost' => 'Kobler til verten på nytt...',
|
||||
'watchTogether.currentPlayback' => 'Gjeldende avspilling',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Kobler til verten på nytt...',
|
||||
'watchTogether.currentPlayback' => 'Gjeldende avspilling',
|
||||
'watchTogether.joinCurrentPlayback' => 'Bli med i gjeldende avspilling',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Hopp tilbake til det verten ser på nå',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Kunne ikke åpne gjeldende avspilling',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$nl extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Geen verbindingen — voeg er één toe om dit profiel te gebruiken.';
|
||||
@override String get noConnections => 'Geen verbindingen';
|
||||
@override String get plexHomeAccount => 'Plex Home-account';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex-account: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} via ${account}';
|
||||
@override String get connectionDefault => 'Standaard';
|
||||
@override String connectionAs({required Object displayName}) => 'als ${displayName}';
|
||||
@override String get makeDefault => 'Als standaard instellen';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsNl {
|
||||
'profiles.noConnectionsHint' => 'Geen verbindingen — voeg er één toe om dit profiel te gebruiken.',
|
||||
'profiles.noConnections' => 'Geen verbindingen',
|
||||
'profiles.plexHomeAccount' => 'Plex Home-account',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex-account: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} via ${account}',
|
||||
'profiles.connectionDefault' => 'Standaard',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'als ${displayName}',
|
||||
'profiles.makeDefault' => 'Als standaard instellen',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsNl {
|
||||
'watchTogether.failedToJoin' => 'Deelnemen aan sessie mislukt',
|
||||
'watchTogether.sessionCodeCopied' => 'Sessiecode naar het klembord gekopieerd',
|
||||
'watchTogether.relayUnreachable' => 'De relayserver is onbereikbaar. Een blokkering door je internetprovider kan Samen kijken verhinderen.',
|
||||
'watchTogether.reconnectingToHost' => 'Opnieuw verbinden met host...',
|
||||
'watchTogether.currentPlayback' => 'Wat nu wordt afgespeeld',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Opnieuw verbinden met host...',
|
||||
'watchTogether.currentPlayback' => 'Wat nu wordt afgespeeld',
|
||||
'watchTogether.joinCurrentPlayback' => 'Deelnemen aan huidige weergave',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Ga terug naar wat de host nu kijkt',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Wat nu wordt afgespeeld kon niet worden geopend',
|
||||
|
||||
@@ -879,6 +879,8 @@ class _Translations$profiles$pl extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Brak połączeń — dodaj jedno, aby używać tego profilu.';
|
||||
@override String get noConnections => 'Brak połączeń';
|
||||
@override String get plexHomeAccount => 'Konto Plex Home';
|
||||
@override String plexAccountChip({required Object account}) => 'Konto Plex: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} przez ${account}';
|
||||
@override String get connectionDefault => 'Domyślne';
|
||||
@override String connectionAs({required Object displayName}) => 'jako ${displayName}';
|
||||
@override String get makeDefault => 'Ustaw jako domyślne';
|
||||
@@ -2833,6 +2835,8 @@ extension on TranslationsPl {
|
||||
'profiles.noConnectionsHint' => 'Brak połączeń — dodaj jedno, aby używać tego profilu.',
|
||||
'profiles.noConnections' => 'Brak połączeń',
|
||||
'profiles.plexHomeAccount' => 'Konto Plex Home',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Konto Plex: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} przez ${account}',
|
||||
'profiles.connectionDefault' => 'Domyślne',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'jako ${displayName}',
|
||||
'profiles.makeDefault' => 'Ustaw jako domyślne',
|
||||
@@ -3219,10 +3223,10 @@ extension on TranslationsPl {
|
||||
'watchTogether.failedToJoin' => 'Nie udało się dołączyć do sesji',
|
||||
'watchTogether.sessionCodeCopied' => 'Kod sesji skopiowany do schowka',
|
||||
'watchTogether.relayUnreachable' => 'Serwer pośredniczący jest nieosiągalny. Blokada operatora internetowego może uniemożliwiać korzystanie z funkcji „Oglądaj razem”.',
|
||||
'watchTogether.reconnectingToHost' => 'Ponowne łączenie z gospodarzem...',
|
||||
'watchTogether.currentPlayback' => 'Bieżące odtwarzanie',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Ponowne łączenie z gospodarzem...',
|
||||
'watchTogether.currentPlayback' => 'Bieżące odtwarzanie',
|
||||
'watchTogether.joinCurrentPlayback' => 'Dołącz do bieżącego odtwarzania',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Wróć do treści oglądanej obecnie przez gospodarza',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Nie udało się otworzyć bieżącego odtwarzania',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$pt extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Sem conexões — adicione uma para usar este perfil.';
|
||||
@override String get noConnections => 'Sem conexões';
|
||||
@override String get plexHomeAccount => 'Conta Plex Home';
|
||||
@override String plexAccountChip({required Object account}) => 'Conta Plex: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} via ${account}';
|
||||
@override String get connectionDefault => 'Padrão';
|
||||
@override String connectionAs({required Object displayName}) => 'como ${displayName}';
|
||||
@override String get makeDefault => 'Definir como padrão';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsPt {
|
||||
'profiles.noConnectionsHint' => 'Sem conexões — adicione uma para usar este perfil.',
|
||||
'profiles.noConnections' => 'Sem conexões',
|
||||
'profiles.plexHomeAccount' => 'Conta Plex Home',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Conta Plex: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} via ${account}',
|
||||
'profiles.connectionDefault' => 'Padrão',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'como ${displayName}',
|
||||
'profiles.makeDefault' => 'Definir como padrão',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsPt {
|
||||
'watchTogether.failedToJoin' => 'Falha ao entrar na sessão',
|
||||
'watchTogether.sessionCodeCopied' => 'Código da sessão copiado para a área de transferência',
|
||||
'watchTogether.relayUnreachable' => 'Servidor de retransmissão inacessível. O bloqueio pelo provedor de internet pode impedir o uso do Assistir Juntos.',
|
||||
'watchTogether.reconnectingToHost' => 'Reconectando ao anfitrião...',
|
||||
'watchTogether.currentPlayback' => 'Reprodução atual',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Reconectando ao anfitrião...',
|
||||
'watchTogether.currentPlayback' => 'Reprodução atual',
|
||||
'watchTogether.joinCurrentPlayback' => 'Entrar na reprodução atual',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Voltar ao conteúdo que o anfitrião está assistindo agora',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Falha ao abrir a reprodução atual',
|
||||
|
||||
@@ -879,6 +879,8 @@ class _Translations$profiles$ru extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Нет соединений — добавьте одно, чтобы использовать этот профиль.';
|
||||
@override String get noConnections => 'Нет соединений';
|
||||
@override String get plexHomeAccount => 'Аккаунт Plex Home';
|
||||
@override String plexAccountChip({required Object account}) => 'Аккаунт Plex: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} через ${account}';
|
||||
@override String get connectionDefault => 'По умолчанию';
|
||||
@override String connectionAs({required Object displayName}) => 'как ${displayName}';
|
||||
@override String get makeDefault => 'Сделать по умолчанию';
|
||||
@@ -2833,6 +2835,8 @@ extension on TranslationsRu {
|
||||
'profiles.noConnectionsHint' => 'Нет соединений — добавьте одно, чтобы использовать этот профиль.',
|
||||
'profiles.noConnections' => 'Нет соединений',
|
||||
'profiles.plexHomeAccount' => 'Аккаунт Plex Home',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Аккаунт Plex: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} через ${account}',
|
||||
'profiles.connectionDefault' => 'По умолчанию',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'как ${displayName}',
|
||||
'profiles.makeDefault' => 'Сделать по умолчанию',
|
||||
@@ -3219,10 +3223,10 @@ extension on TranslationsRu {
|
||||
'watchTogether.failedToJoin' => 'Не удалось присоединиться к сессии',
|
||||
'watchTogether.sessionCodeCopied' => 'Код сессии скопирован в буфер обмена',
|
||||
'watchTogether.relayUnreachable' => 'Сервер ретрансляции недоступен. Блокировка интернет-провайдером может помешать совместному просмотру.',
|
||||
'watchTogether.reconnectingToHost' => 'Повторное подключение к организатору...',
|
||||
'watchTogether.currentPlayback' => 'Текущее воспроизведение',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Повторное подключение к организатору...',
|
||||
'watchTogether.currentPlayback' => 'Текущее воспроизведение',
|
||||
'watchTogether.joinCurrentPlayback' => 'Присоединиться к текущему воспроизведению',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Вернуться к материалу, который сейчас смотрит организатор',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Не удалось открыть текущее воспроизведение',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$sv extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Inga anslutningar — lägg till en för att använda den här profilen.';
|
||||
@override String get noConnections => 'Inga anslutningar';
|
||||
@override String get plexHomeAccount => 'Plex Home-konto';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex-konto: ${account}';
|
||||
@override String plexAccountUserChip({required Object user, required Object account}) => '${user} via ${account}';
|
||||
@override String get connectionDefault => 'Standard';
|
||||
@override String connectionAs({required Object displayName}) => 'som ${displayName}';
|
||||
@override String get makeDefault => 'Gör till standard';
|
||||
@@ -2827,6 +2829,8 @@ extension on TranslationsSv {
|
||||
'profiles.noConnectionsHint' => 'Inga anslutningar — lägg till en för att använda den här profilen.',
|
||||
'profiles.noConnections' => 'Inga anslutningar',
|
||||
'profiles.plexHomeAccount' => 'Plex Home-konto',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex-konto: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object user, required Object account}) => '${user} via ${account}',
|
||||
'profiles.connectionDefault' => 'Standard',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => 'som ${displayName}',
|
||||
'profiles.makeDefault' => 'Gör till standard',
|
||||
@@ -3213,10 +3217,10 @@ extension on TranslationsSv {
|
||||
'watchTogether.failedToJoin' => 'Det gick inte att gå med i sessionen',
|
||||
'watchTogether.sessionCodeCopied' => 'Sessionskoden har kopierats till urklipp',
|
||||
'watchTogether.relayUnreachable' => 'Reläservern kan inte nås. Din internetleverantör kan blockera Titta tillsammans.',
|
||||
'watchTogether.reconnectingToHost' => 'Återansluter till värden...',
|
||||
'watchTogether.currentPlayback' => 'Aktuell uppspelning',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => 'Återansluter till värden...',
|
||||
'watchTogether.currentPlayback' => 'Aktuell uppspelning',
|
||||
'watchTogether.joinCurrentPlayback' => 'Gå med i aktuell uppspelning',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => 'Hoppa tillbaka till det värden tittar på just nu',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => 'Kunde inte öppna aktuell uppspelning',
|
||||
|
||||
@@ -881,6 +881,8 @@ class _Translations$profiles$tr extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Bağlantı yok — bu profili kullanmak için bir tane ekleyin.';
|
||||
@override String get noConnections => 'Bağlantı yok';
|
||||
@override String get plexHomeAccount => 'Plex Ev hesabı';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex hesabı: ${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} hesabı üzerinden ${user}';
|
||||
@override String get connectionDefault => 'Varsayılan';
|
||||
@override String connectionAs({required Object displayName}) => '${displayName} olarak';
|
||||
@override String get makeDefault => 'Varsayılan yap';
|
||||
@@ -2842,6 +2844,8 @@ extension on TranslationsTr {
|
||||
'profiles.noConnectionsHint' => 'Bağlantı yok — bu profili kullanmak için bir tane ekleyin.',
|
||||
'profiles.noConnections' => 'Bağlantı yok',
|
||||
'profiles.plexHomeAccount' => 'Plex Ev hesabı',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex hesabı: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} hesabı üzerinden ${user}',
|
||||
'profiles.connectionDefault' => 'Varsayılan',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '${displayName} olarak',
|
||||
'profiles.makeDefault' => 'Varsayılan yap',
|
||||
@@ -3224,10 +3228,10 @@ extension on TranslationsTr {
|
||||
'watchTogether.pasteFromClipboard' => 'Panodan yapıştır',
|
||||
'watchTogether.pleaseEnterCode' => 'Lütfen bir oturum kodu girin',
|
||||
'watchTogether.codeMustBe5Chars' => 'Oturum kodu 5 karakter olmalıdır',
|
||||
'watchTogether.joinInstructions' => 'Katılmak için kurucunun oturum kodunu girin.',
|
||||
'watchTogether.failedToCreate' => 'Oturum oluşturulamadı',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joinInstructions' => 'Katılmak için kurucunun oturum kodunu girin.',
|
||||
'watchTogether.failedToCreate' => 'Oturum oluşturulamadı',
|
||||
'watchTogether.failedToJoin' => 'Oturuma katılınamadı',
|
||||
'watchTogether.sessionCodeCopied' => 'Oturum kodu panoya kopyalandı',
|
||||
'watchTogether.relayUnreachable' => 'Aktarıcı sunucusuna ulaşılamıyor. İSS engellemesi Birlikte İzle\'yi önleyebilir.',
|
||||
|
||||
@@ -881,6 +881,8 @@ class _Translations$profiles$uz extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => 'Ulanishlar yoʻq — ushbu profildan foydalanish uchun ulanish qoʻshing.';
|
||||
@override String get noConnections => 'Ulanishlar yoʻq';
|
||||
@override String get plexHomeAccount => 'Plex Home hisobi';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex hisobi: ${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} hisobi orqali ${user}';
|
||||
@override String get connectionDefault => 'Standart';
|
||||
@override String connectionAs({required Object displayName}) => '${displayName} sifatida';
|
||||
@override String get makeDefault => 'Standart qilish';
|
||||
@@ -2842,6 +2844,8 @@ extension on TranslationsUz {
|
||||
'profiles.noConnectionsHint' => 'Ulanishlar yoʻq — ushbu profildan foydalanish uchun ulanish qoʻshing.',
|
||||
'profiles.noConnections' => 'Ulanishlar yoʻq',
|
||||
'profiles.plexHomeAccount' => 'Plex Home hisobi',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex hisobi: ${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} hisobi orqali ${user}',
|
||||
'profiles.connectionDefault' => 'Standart',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '${displayName} sifatida',
|
||||
'profiles.makeDefault' => 'Standart qilish',
|
||||
@@ -3224,10 +3228,10 @@ extension on TranslationsUz {
|
||||
'watchTogether.pasteFromClipboard' => 'Xotiradan joylash',
|
||||
'watchTogether.pleaseEnterCode' => 'Seans kodini kiriting',
|
||||
'watchTogether.codeMustBe5Chars' => 'Seans kodi 5 ta belgidan iborat boʻlishi kerak',
|
||||
'watchTogether.joinInstructions' => 'Tashkilotchining seans kodini kiriting.',
|
||||
'watchTogether.failedToCreate' => 'Seansni yaratib boʻlmadi',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.joinInstructions' => 'Tashkilotchining seans kodini kiriting.',
|
||||
'watchTogether.failedToCreate' => 'Seansni yaratib boʻlmadi',
|
||||
'watchTogether.failedToJoin' => 'Seansga qoʻshilib boʻlmadi',
|
||||
'watchTogether.sessionCodeCopied' => 'Seans kodi nusxalandi',
|
||||
'watchTogether.relayUnreachable' => 'Rele serveriga ulanib boʻlmadi.',
|
||||
|
||||
@@ -876,6 +876,8 @@ class Translations$profiles$zh extends Translations$profiles$en {
|
||||
@override String get noConnectionsHint => '没有连接 — 请添加连接以使用此用户资料。';
|
||||
@override String get noConnections => '没有连接';
|
||||
@override String get plexHomeAccount => 'Plex Home 账户';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex 账户:${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} 账户下的 ${user}';
|
||||
@override String get connectionDefault => '默认';
|
||||
@override String connectionAs({required Object displayName}) => '以 ${displayName} 身份';
|
||||
@override String get makeDefault => '设为默认';
|
||||
@@ -2824,6 +2826,8 @@ extension on TranslationsZh {
|
||||
'profiles.noConnectionsHint' => '没有连接 — 请添加连接以使用此用户资料。',
|
||||
'profiles.noConnections' => '没有连接',
|
||||
'profiles.plexHomeAccount' => 'Plex Home 账户',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex 账户:${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} 账户下的 ${user}',
|
||||
'profiles.connectionDefault' => '默认',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '以 ${displayName} 身份',
|
||||
'profiles.makeDefault' => '设为默认',
|
||||
@@ -3210,10 +3214,10 @@ extension on TranslationsZh {
|
||||
'watchTogether.failedToJoin' => '加入会话失败',
|
||||
'watchTogether.sessionCodeCopied' => '会话代码已复制到剪贴板',
|
||||
'watchTogether.relayUnreachable' => '无法访问中继服务器。网络运营商的屏蔽可能导致“一起看”不可用。',
|
||||
'watchTogether.reconnectingToHost' => '正在重新连接到主持人…',
|
||||
'watchTogether.currentPlayback' => '当前播放',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => '正在重新连接到主持人…',
|
||||
'watchTogether.currentPlayback' => '当前播放',
|
||||
'watchTogether.joinCurrentPlayback' => '加入当前播放',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => '加入主持人当前正在观看的内容',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => '无法打开当前播放',
|
||||
|
||||
@@ -877,6 +877,8 @@ class _Translations$profiles$zh_Hant extends Translations$profiles$zh {
|
||||
@override String get noConnectionsHint => '無連線 — 請新增一個連線以啟用此設定檔。';
|
||||
@override String get noConnections => '無連線資訊';
|
||||
@override String get plexHomeAccount => 'Plex Home 帳戶';
|
||||
@override String plexAccountChip({required Object account}) => 'Plex 帳戶:${account}';
|
||||
@override String plexAccountUserChip({required Object account, required Object user}) => '${account} 帳戶下的 ${user}';
|
||||
@override String get connectionDefault => '預設';
|
||||
@override String connectionAs({required Object displayName}) => '以 ${displayName} 身分';
|
||||
@override String get makeDefault => '設為預設值';
|
||||
@@ -2825,6 +2827,8 @@ extension on TranslationsZhHant {
|
||||
'profiles.noConnectionsHint' => '無連線 — 請新增一個連線以啟用此設定檔。',
|
||||
'profiles.noConnections' => '無連線資訊',
|
||||
'profiles.plexHomeAccount' => 'Plex Home 帳戶',
|
||||
'profiles.plexAccountChip' => ({required Object account}) => 'Plex 帳戶:${account}',
|
||||
'profiles.plexAccountUserChip' => ({required Object account, required Object user}) => '${account} 帳戶下的 ${user}',
|
||||
'profiles.connectionDefault' => '預設',
|
||||
'profiles.connectionAs' => ({required Object displayName}) => '以 ${displayName} 身分',
|
||||
'profiles.makeDefault' => '設為預設值',
|
||||
@@ -3211,10 +3215,10 @@ extension on TranslationsZhHant {
|
||||
'watchTogether.failedToJoin' => '加入工作階段失敗',
|
||||
'watchTogether.sessionCodeCopied' => '工作階段代碼已複製到剪貼簿',
|
||||
'watchTogether.relayUnreachable' => '無法連線至中繼伺服器。ISP 封鎖可能會導致「一起看」無法使用。',
|
||||
'watchTogether.reconnectingToHost' => '正在重新連線至主持人…',
|
||||
'watchTogether.currentPlayback' => '目前播放內容',
|
||||
_ => null,
|
||||
} ?? switch (path) {
|
||||
'watchTogether.reconnectingToHost' => '正在重新連線至主持人…',
|
||||
'watchTogether.currentPlayback' => '目前播放內容',
|
||||
'watchTogether.joinCurrentPlayback' => '加入目前播放點',
|
||||
'watchTogether.joinCurrentPlaybackDescription' => '同步至主持人目前的觀看進度',
|
||||
'watchTogether.failedToOpenCurrentPlayback' => '無法開啟目前播放點',
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Ta bort denna profil?",
|
||||
"deleteThisProfileMessage": "Ta bort ${displayName}. Anslutningar påverkas inte.",
|
||||
"active": "Aktiv",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Hantera",
|
||||
"delete": "Ta bort",
|
||||
"signOut": "Logga ut",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Inga anslutningar — lägg till en för att använda den här profilen.",
|
||||
"noConnections": "Inga anslutningar",
|
||||
"plexHomeAccount": "Plex Home-konto",
|
||||
"plexAccountChip": "Plex-konto: ${account}",
|
||||
"plexAccountUserChip": "${user} via ${account}",
|
||||
"connectionDefault": "Standard",
|
||||
"connectionAs": "som ${displayName}",
|
||||
"makeDefault": "Gör till standard",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Bu profil silinsin mi?",
|
||||
"deleteThisProfileMessage": "${displayName} kişisi kaldırılacak. Bağlantılar etkilenmez.",
|
||||
"active": "Aktif",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Yönet",
|
||||
"delete": "Sil",
|
||||
"signOut": "Çıkış Yap",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Bağlantı yok — bu profili kullanmak için bir tane ekleyin.",
|
||||
"noConnections": "Bağlantı yok",
|
||||
"plexHomeAccount": "Plex Ev hesabı",
|
||||
"plexAccountChip": "Plex hesabı: ${account}",
|
||||
"plexAccountUserChip": "${account} hesabı üzerinden ${user}",
|
||||
"connectionDefault": "Varsayılan",
|
||||
"connectionAs": "${displayName} olarak",
|
||||
"makeDefault": "Varsayılan yap",
|
||||
|
||||
@@ -763,7 +763,6 @@
|
||||
"deleteThisProfileTitle": "Ushbu profil oʻchirilsinmi?",
|
||||
"deleteThisProfileMessage": "${displayName} oʻchiriladi. Ulanishlarga taʼsir qilmaydi.",
|
||||
"active": "Faol",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "Boshqarish",
|
||||
"delete": "Oʻchirish",
|
||||
"signOut": "Chiqish",
|
||||
@@ -795,6 +794,8 @@
|
||||
"noConnectionsHint": "Ulanishlar yoʻq — ushbu profildan foydalanish uchun ulanish qoʻshing.",
|
||||
"noConnections": "Ulanishlar yoʻq",
|
||||
"plexHomeAccount": "Plex Home hisobi",
|
||||
"plexAccountChip": "Plex hisobi: ${account}",
|
||||
"plexAccountUserChip": "${account} hisobi orqali ${user}",
|
||||
"connectionDefault": "Standart",
|
||||
"connectionAs": "${displayName} sifatida",
|
||||
"makeDefault": "Standart qilish",
|
||||
|
||||
@@ -762,7 +762,6 @@
|
||||
"deleteThisProfileTitle": "刪除此使用者設定檔?",
|
||||
"deleteThisProfileMessage": "將移除 ${displayName}。連線資訊將不受影響。",
|
||||
"active": "使用中",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "管理",
|
||||
"delete": "刪除",
|
||||
"signOut": "登出",
|
||||
@@ -794,6 +793,8 @@
|
||||
"noConnectionsHint": "無連線 — 請新增一個連線以啟用此設定檔。",
|
||||
"noConnections": "無連線資訊",
|
||||
"plexHomeAccount": "Plex Home 帳戶",
|
||||
"plexAccountChip": "Plex 帳戶:${account}",
|
||||
"plexAccountUserChip": "${account} 帳戶下的 ${user}",
|
||||
"connectionDefault": "預設",
|
||||
"connectionAs": "以 ${displayName} 身分",
|
||||
"makeDefault": "設為預設值",
|
||||
|
||||
@@ -762,7 +762,6 @@
|
||||
"deleteThisProfileTitle": "删除此用户资料?",
|
||||
"deleteThisProfileMessage": "移除 ${displayName}。连接不会受影响。",
|
||||
"active": "当前使用",
|
||||
"viaPlexAccount": "",
|
||||
"manage": "管理",
|
||||
"delete": "删除",
|
||||
"signOut": "退出登录",
|
||||
@@ -794,6 +793,8 @@
|
||||
"noConnectionsHint": "没有连接 — 请添加连接以使用此用户资料。",
|
||||
"noConnections": "没有连接",
|
||||
"plexHomeAccount": "Plex Home 账户",
|
||||
"plexAccountChip": "Plex 账户:${account}",
|
||||
"plexAccountUserChip": "${account} 账户下的 ${user}",
|
||||
"connectionDefault": "默认",
|
||||
"connectionAs": "以 ${displayName} 身份",
|
||||
"makeDefault": "设为默认",
|
||||
|
||||
@@ -29,11 +29,18 @@ class ProfilesView {
|
||||
/// Picture URL per profile id; null means render initials. See [resolveProfileAvatarUrls].
|
||||
final Map<String, String?> avatarUrlByProfile;
|
||||
|
||||
/// Live Plex Home users per account connection id. Chip/label UI needs it
|
||||
/// to turn a [ProfileConnection.userIdentifier] uuid into the Home user's
|
||||
/// name; without it a borrowed Plex connection can only name the account
|
||||
/// owner, which reads as the wrong identity.
|
||||
final Map<String, List<PlexHomeUser>> plexHomeByConnectionId;
|
||||
|
||||
const ProfilesView({
|
||||
required this.profiles,
|
||||
required this.connectionsByProfile,
|
||||
required this.connectionsById,
|
||||
required this.avatarUrlByProfile,
|
||||
required this.plexHomeByConnectionId,
|
||||
});
|
||||
|
||||
static const empty = ProfilesView(
|
||||
@@ -41,6 +48,7 @@ class ProfilesView {
|
||||
connectionsByProfile: {},
|
||||
connectionsById: {},
|
||||
avatarUrlByProfile: {},
|
||||
plexHomeByConnectionId: {},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -108,6 +116,7 @@ ProfilesView _build({
|
||||
connectionsById: connectionsById,
|
||||
plexHomeByConnectionId: homes,
|
||||
),
|
||||
plexHomeByConnectionId: homes,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -327,21 +327,14 @@ class _ProfileSwitchScreenState extends State<ProfileSwitchScreen> with MountedS
|
||||
List<_ChipData> _chipsFor(Profile profile, ProfilesView view) {
|
||||
final chips = <_ChipData>[];
|
||||
// Plex Home profiles implicitly own their parent Plex connection (no
|
||||
// join-table row), so prepend it before any borrowed connections.
|
||||
// join-table row), so prepend it before any borrowed connections. The
|
||||
// profile *is* the Home user there, so its own name identifies the user
|
||||
// half of the label.
|
||||
if (profile.isPlexHome) {
|
||||
final parentId = profile.parentConnectionId;
|
||||
if (parentId != null) {
|
||||
final conn = view.connectionsById[parentId];
|
||||
if (conn != null) {
|
||||
chips.add(
|
||||
_ChipData(
|
||||
backend: conn.backend,
|
||||
label: conn is PlexAccountConnection
|
||||
? t.profiles.viaPlexAccount(name: conn.accountLabel)
|
||||
: conn.displayLabel,
|
||||
),
|
||||
);
|
||||
}
|
||||
if (conn != null) chips.add(_chipFor(conn, user: profile.displayName));
|
||||
}
|
||||
}
|
||||
final pcs = visibleProfileConnections(
|
||||
@@ -350,11 +343,47 @@ class _ProfileSwitchScreenState extends State<ProfileSwitchScreen> with MountedS
|
||||
);
|
||||
for (final pc in pcs) {
|
||||
final conn = view.connectionsById[pc.connectionId];
|
||||
if (conn != null) chips.add(_ChipData(backend: conn.backend, label: conn.displayLabel));
|
||||
if (conn != null) chips.add(_chipFor(conn, user: _plexHomeUserName(view, conn, pc.userIdentifier)));
|
||||
}
|
||||
return chips;
|
||||
}
|
||||
|
||||
/// A Plex account connection labels itself with the account owner's name,
|
||||
/// which under a profile tile reads as the profile being signed in as that
|
||||
/// person — wrong for a Plex Home user, and wrong again for a local profile
|
||||
/// that borrowed a Home user out of someone else's account.
|
||||
///
|
||||
/// Both halves of that relation go through a single translated string so a
|
||||
/// locale can order them itself; several put the account first (`ja`, `ko`,
|
||||
/// `tr`, `zh`). [user] is null only when the Home cache cannot resolve the
|
||||
/// connection's uuid yet, which falls back to naming the account alone.
|
||||
_ChipData _chipFor(Connection conn, {required String? user}) {
|
||||
return _ChipData(
|
||||
backend: conn.backend,
|
||||
label: switch (conn) {
|
||||
PlexAccountConnection(:final accountLabel) when user != null => t.profiles.plexAccountUserChip(
|
||||
user: user,
|
||||
account: accountLabel,
|
||||
),
|
||||
PlexAccountConnection(:final accountLabel) => t.profiles.plexAccountChip(account: accountLabel),
|
||||
_ => conn.displayLabel,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// Home user behind a borrowed Plex connection, or null when the live cache
|
||||
/// has no match for [userIdentifier] (not loaded yet, or the row predates
|
||||
/// the account's current Home membership).
|
||||
String? _plexHomeUserName(ProfilesView view, Connection conn, String userIdentifier) {
|
||||
if (conn is! PlexAccountConnection || userIdentifier.isEmpty) return null;
|
||||
final users = view.plexHomeByConnectionId[conn.id];
|
||||
if (users == null) return null;
|
||||
for (final user in users) {
|
||||
if (user.uuid == userIdentifier) return user.displayName;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<void> _addLocalProfile() async {
|
||||
await Navigator.of(context).push<bool>(MaterialPageRoute(builder: (_) => const AddLocalProfileScreen()));
|
||||
}
|
||||
@@ -566,7 +595,12 @@ class _ConnectionChips extends StatelessWidget {
|
||||
children: [
|
||||
BackendBadge(backend: c.backend, size: 12),
|
||||
const SizedBox(width: 4),
|
||||
Text(c.label, style: theme.textTheme.labelSmall),
|
||||
// Account labels are often an email address, and a chip in a
|
||||
// Wrap gets unbounded main-axis space — without this the row
|
||||
// overflows the tile instead of ellipsizing.
|
||||
Flexible(
|
||||
child: Text(c.label, style: theme.textTheme.labelSmall, overflow: .ellipsis),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -10,6 +10,7 @@ import 'package:plezy/database/app_database.dart';
|
||||
import 'package:plezy/focus/focusable_wrapper.dart';
|
||||
import 'package:plezy/focus/input_mode_tracker.dart';
|
||||
import 'package:plezy/i18n/strings.g.dart';
|
||||
import 'package:plezy/models/plex/plex_home_user.dart';
|
||||
import 'package:plezy/profiles/active_profile_provider.dart';
|
||||
import 'package:plezy/profiles/plex_home_service.dart';
|
||||
import 'package:plezy/profiles/profile.dart';
|
||||
@@ -369,38 +370,137 @@ void main() {
|
||||
await tester.pump();
|
||||
});
|
||||
|
||||
testWidgets('labels a Plex Home parent connection as an account, not as the profile', (tester) async {
|
||||
final db = AppDatabase.forTesting(NativeDatabase.memory());
|
||||
final profile = Profile.plexHome(
|
||||
testWidgets('names the Plex Home user and the account together, not the account alone', (tester) async {
|
||||
await _pumpPicker(
|
||||
tester,
|
||||
profiles: [
|
||||
Profile.plexHome(
|
||||
id: 'home-alice',
|
||||
displayName: 'Alice',
|
||||
parentConnectionId: 'plex-account',
|
||||
plexHomeUserUuid: 'alice-uuid',
|
||||
createdAt: DateTime(2026, 1, 1),
|
||||
),
|
||||
],
|
||||
connections: [_plexAccount('Bob')],
|
||||
);
|
||||
final profiles = _FakeProfileRegistry(db, [profile]);
|
||||
final connections = _FakeConnectionRegistry(db, [
|
||||
PlexAccountConnection(
|
||||
id: 'plex-account',
|
||||
accountToken: 'token',
|
||||
clientIdentifier: 'client',
|
||||
accountLabel: 'Bob',
|
||||
|
||||
expect(find.text('Alice'), findsOneWidget);
|
||||
expect(
|
||||
_relationChip(tester, tile: _tileFor('Alice'), first: 'Alice', second: 'Bob'),
|
||||
t.profiles.plexAccountUserChip(user: 'Alice', account: 'Bob'),
|
||||
);
|
||||
expect(find.text('Bob'), findsNothing, reason: 'the owner name alone reads as being signed in as the owner');
|
||||
|
||||
await tester.pumpWidget(const SizedBox.shrink());
|
||||
await tester.pump();
|
||||
});
|
||||
|
||||
testWidgets('names the borrowed Home user and the account it came from', (tester) async {
|
||||
await _pumpPicker(
|
||||
tester,
|
||||
profiles: [Profile.local(id: 'local-alice', displayName: 'Alice', createdAt: DateTime(2026, 1, 1))],
|
||||
connections: [_plexAccount('Bob')],
|
||||
profileConnections: const [
|
||||
ProfileConnection(
|
||||
profileId: 'local-alice',
|
||||
connectionId: 'plex-account',
|
||||
userToken: 'borrowed-token',
|
||||
userIdentifier: 'charlie-uuid',
|
||||
),
|
||||
],
|
||||
homeUsers: [_homeUser('charlie-uuid', 'Charlie')],
|
||||
);
|
||||
|
||||
expect(
|
||||
_relationChip(tester, tile: _tileFor('Alice'), first: 'Charlie', second: 'Bob'),
|
||||
t.profiles.plexAccountUserChip(user: 'Charlie', account: 'Bob'),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(const SizedBox.shrink());
|
||||
await tester.pump();
|
||||
});
|
||||
|
||||
testWidgets('falls back to naming the account when the Home user cannot be resolved', (tester) async {
|
||||
await _pumpPicker(
|
||||
tester,
|
||||
profiles: [Profile.local(id: 'local-alice', displayName: 'Alice', createdAt: DateTime(2026, 1, 1))],
|
||||
connections: [_plexAccount('Bob')],
|
||||
profileConnections: const [
|
||||
ProfileConnection(
|
||||
profileId: 'local-alice',
|
||||
connectionId: 'plex-account',
|
||||
userToken: 'borrowed-token',
|
||||
userIdentifier: 'departed-uuid',
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
expect(find.text(t.profiles.plexAccountChip(account: 'Bob')), findsOneWidget);
|
||||
expect(find.text('Bob'), findsNothing);
|
||||
|
||||
await tester.pumpWidget(const SizedBox.shrink());
|
||||
await tester.pump();
|
||||
});
|
||||
|
||||
testWidgets('lets a locale put the account before the user', (tester) async {
|
||||
// ja renders the relation as `${account}経由の${user}`. Splitting the two
|
||||
// halves across widgets — or across two translated fragments — would pin
|
||||
// them to English order; this is the assertion that keeps them in one
|
||||
// translated string.
|
||||
// `runAsync`: a deferred locale library loads on the real event loop,
|
||||
// which the widget tester's fake async would otherwise never pump.
|
||||
await tester.runAsync(() => LocaleSettings.setLocale(AppLocale.ja));
|
||||
addTearDown(() => LocaleSettings.setLocaleSync(AppLocale.en));
|
||||
await _pumpPicker(
|
||||
tester,
|
||||
profiles: [
|
||||
Profile.plexHome(
|
||||
id: 'home-alice',
|
||||
displayName: 'Alice',
|
||||
parentConnectionId: 'plex-account',
|
||||
plexHomeUserUuid: 'alice-uuid',
|
||||
createdAt: DateTime(2026, 1, 1),
|
||||
),
|
||||
]);
|
||||
final profileConnections = _FakeProfileConnectionRegistry(db);
|
||||
],
|
||||
connections: [_plexAccount('Bob')],
|
||||
);
|
||||
|
||||
final label = _relationChip(tester, tile: _tileFor('Alice'), first: 'Alice', second: 'Bob');
|
||||
expect(label, t.profiles.plexAccountUserChip(user: 'Alice', account: 'Bob'));
|
||||
expect(label.indexOf('Bob'), lessThan(label.indexOf('Alice')));
|
||||
|
||||
await tester.pumpWidget(const SizedBox.shrink());
|
||||
await tester.pump();
|
||||
});
|
||||
}
|
||||
|
||||
/// Boots the picker over a fixed profile/connection set. [homeUsers] seeds the
|
||||
/// live Plex Home cache, which is what turns a borrowed connection's
|
||||
/// `userIdentifier` uuid into a name.
|
||||
Future<void> _pumpPicker(
|
||||
WidgetTester tester, {
|
||||
required List<Profile> profiles,
|
||||
required List<Connection> connections,
|
||||
List<ProfileConnection> profileConnections = const [],
|
||||
List<PlexHomeUser> homeUsers = const [],
|
||||
}) async {
|
||||
final db = AppDatabase.forTesting(NativeDatabase.memory());
|
||||
final profileRegistry = _FakeProfileRegistry(db, profiles);
|
||||
final connectionRegistry = _FakeConnectionRegistry(db, connections);
|
||||
final profileConnectionRegistry = _FakeProfileConnectionRegistry(db, profileConnections);
|
||||
final storage = await StorageService.getInstance();
|
||||
final plexHome = PlexHomeService(
|
||||
connections: connections,
|
||||
profileConnections: profileConnections,
|
||||
connections: connectionRegistry,
|
||||
profileConnections: profileConnectionRegistry,
|
||||
storage: storage,
|
||||
plexHomeUserFetcher: (_) async => const [],
|
||||
plexHomeUserFetcher: (_) async => homeUsers,
|
||||
);
|
||||
final activeProfile = ActiveProfileProvider(
|
||||
registry: profiles,
|
||||
registry: profileRegistry,
|
||||
plexHome: plexHome,
|
||||
connections: connections,
|
||||
profileConnections: profileConnections,
|
||||
connections: connectionRegistry,
|
||||
profileConnections: profileConnectionRegistry,
|
||||
storage: storage,
|
||||
);
|
||||
addTearDown(() async {
|
||||
@@ -408,15 +508,20 @@ void main() {
|
||||
await plexHome.dispose();
|
||||
await db.close();
|
||||
});
|
||||
if (homeUsers.isNotEmpty) {
|
||||
for (final connection in connections.whereType<PlexAccountConnection>()) {
|
||||
expect(await plexHome.refresh(connection), isTrue);
|
||||
}
|
||||
}
|
||||
|
||||
await tester.pumpWidget(
|
||||
TranslationProvider(
|
||||
child: MultiProvider(
|
||||
providers: [
|
||||
Provider<StorageService>.value(value: storage),
|
||||
Provider<ProfileRegistry>.value(value: profiles),
|
||||
Provider<ProfileConnectionRegistry>.value(value: profileConnections),
|
||||
Provider<ConnectionRegistry>.value(value: connections),
|
||||
Provider<ProfileRegistry>.value(value: profileRegistry),
|
||||
Provider<ProfileConnectionRegistry>.value(value: profileConnectionRegistry),
|
||||
Provider<ConnectionRegistry>.value(value: connectionRegistry),
|
||||
Provider<PlexHomeService>.value(value: plexHome),
|
||||
ChangeNotifierProvider<ActiveProfileProvider>.value(value: activeProfile),
|
||||
],
|
||||
@@ -425,14 +530,51 @@ void main() {
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
expect(find.text('Alice'), findsOneWidget);
|
||||
expect(find.text(t.profiles.viaPlexAccount(name: 'Bob')), findsOneWidget);
|
||||
expect(find.text('Bob'), findsNothing);
|
||||
PlexAccountConnection _plexAccount(String accountLabel) {
|
||||
return PlexAccountConnection(
|
||||
id: 'plex-account',
|
||||
accountToken: 'token',
|
||||
clientIdentifier: 'client',
|
||||
accountLabel: accountLabel,
|
||||
createdAt: DateTime(2026, 1, 1),
|
||||
);
|
||||
}
|
||||
|
||||
await tester.pumpWidget(const SizedBox.shrink());
|
||||
await tester.pump();
|
||||
});
|
||||
PlexHomeUser _homeUser(String uuid, String title) {
|
||||
return PlexHomeUser(
|
||||
id: 1,
|
||||
uuid: uuid,
|
||||
title: title,
|
||||
thumb: '',
|
||||
hasPassword: false,
|
||||
restricted: false,
|
||||
updatedAt: null,
|
||||
admin: false,
|
||||
guest: false,
|
||||
protected: false,
|
||||
);
|
||||
}
|
||||
|
||||
Finder _tileFor(String displayName) {
|
||||
return find.ancestor(of: find.text(displayName), matching: find.byType(FocusableWrapper));
|
||||
}
|
||||
|
||||
/// The single chip label inside [tile] that names both [first] and [second].
|
||||
///
|
||||
/// Asserting that exactly one text node carries both halves is the point: two
|
||||
/// nodes, or one node plus a neighbouring label, would mean the relation is
|
||||
/// assembled in Dart and no locale could reorder it.
|
||||
String _relationChip(WidgetTester tester, {required Finder tile, required String first, required String second}) {
|
||||
final labels = tester
|
||||
.widgetList<Text>(find.descendant(of: tile, matching: find.byType(Text)))
|
||||
.map((text) => text.data)
|
||||
.whereType<String>()
|
||||
.where((label) => label.contains(first) && label.contains(second))
|
||||
.toList();
|
||||
expect(labels, hasLength(1), reason: 'both halves must render as one translated string');
|
||||
return labels.single;
|
||||
}
|
||||
|
||||
/// Tile labels in painted order. Only the two names the reorder tests seed are
|
||||
@@ -509,6 +651,9 @@ class _FakeConnectionRegistry extends ConnectionRegistry {
|
||||
|
||||
@override
|
||||
Future<List<Connection>> list() async => _connections;
|
||||
|
||||
@override
|
||||
Future<Connection?> get(String id) async => _connections.where((conn) => conn.id == id).firstOrNull;
|
||||
}
|
||||
|
||||
class _FakeProfileConnectionRegistry extends ProfileConnectionRegistry {
|
||||
|
||||
Reference in New Issue
Block a user