diff --git a/assets/emby_icon.svg b/assets/emby_icon.svg
new file mode 100644
index 00000000..47ba8df6
--- /dev/null
+++ b/assets/emby_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/connection/connection.dart b/lib/connection/connection.dart
index 9f02de79..da595abb 100644
--- a/lib/connection/connection.dart
+++ b/lib/connection/connection.dart
@@ -1,4 +1,5 @@
import '../media/media_backend.dart';
+import '../media/media_browser_dialect.dart';
import '../models/plex/plex_home_user.dart';
import '../services/plex_auth_service.dart';
import '../utils/json_utils.dart';
@@ -9,22 +10,38 @@ import '../utils/url_utils.dart';
/// (e.g. database column values).
enum ConnectionKind {
plex,
- jellyfin;
+ jellyfin,
+ emby;
String get id => switch (this) {
ConnectionKind.plex => 'plex',
ConnectionKind.jellyfin => 'jellyfin',
+ ConnectionKind.emby => 'emby',
};
static ConnectionKind fromId(String id) => switch (id) {
'plex' => ConnectionKind.plex,
'jellyfin' => ConnectionKind.jellyfin,
+ 'emby' => ConnectionKind.emby,
_ => throw ArgumentError('Unknown ConnectionKind id: $id'),
};
MediaBackend get backend => switch (this) {
ConnectionKind.plex => MediaBackend.plex,
ConnectionKind.jellyfin => MediaBackend.jellyfin,
+ ConnectionKind.emby => MediaBackend.emby,
+ };
+
+ /// The MediaBrowser dialect this kind speaks, or `null` for Plex.
+ MediaBrowserDialect? get dialect => switch (this) {
+ ConnectionKind.plex => null,
+ ConnectionKind.jellyfin => MediaBrowserDialect.jellyfin,
+ ConnectionKind.emby => MediaBrowserDialect.emby,
+ };
+
+ static ConnectionKind fromDialect(MediaBrowserDialect dialect) => switch (dialect) {
+ MediaBrowserDialect.jellyfin => ConnectionKind.jellyfin,
+ MediaBrowserDialect.emby => ConnectionKind.emby,
};
}
@@ -188,7 +205,9 @@ class PlexAccountConnection extends Connection {
}
}
-/// A single-server Jellyfin connection.
+/// A single-server connection to a MediaBrowser-family server — Jellyfin or its
+/// Emby ancestor. [dialect] selects which of the two wire dialects this
+/// connection speaks; every other field has the same meaning on both.
class JellyfinConnection extends Connection {
@override
final String id;
@@ -202,10 +221,14 @@ class JellyfinConnection extends Connection {
@override
final DateTime? lastAuthenticatedAt;
+ /// Which MediaBrowser dialect this server speaks. Drives [kind], [backend]
+ /// and every route/capability delta in [JellyfinClient].
+ final MediaBrowserDialect dialect;
+
/// Active server base URL, no trailing slash. e.g. `https://jellyfin.home.lan`.
final String baseUrl;
- /// Candidate server URLs for this Jellyfin server, with [baseUrl] first.
+ /// Candidate server URLs for this server, with [baseUrl] first.
/// Existing installs only have [baseUrl]; deserialization backfills this.
final List baseUrls;
@@ -215,7 +238,7 @@ class JellyfinConnection extends Connection {
/// Server's machine identifier (System/Info `Id`).
final String serverMachineId;
- /// Authenticated Jellyfin user id (UUID).
+ /// Authenticated user id. A UUID on Jellyfin, an opaque hex string on Emby.
final String userId;
/// Authenticated user's display name.
@@ -228,13 +251,13 @@ class JellyfinConnection extends Connection {
/// `Authorization: MediaBrowser DeviceId="..."` header).
final String deviceId;
- /// Whether this user is a Jellyfin admin (`/Users/{id}.Policy.IsAdministrator`).
+ /// Whether this user is a server admin (`/Users/{id}.Policy.IsAdministrator`).
/// Captured at auth time so the UI can gate admin-only entries (delete,
/// match/unmatch, edit metadata) without an extra round-trip.
final bool isAdministrator;
/// The authenticated user's `PrimaryImageTag`, or `null` when they have no
- /// profile picture. Jellyfin omits the key entirely in that case, and the
+ /// profile picture. The server omits the key entirely in that case, and the
/// tag is `MD5(imagePath + lastModified)` so it changes on every upload —
/// which makes the derived avatar URL self-invalidating. Captured at auth
/// time and refreshed by [JellyfinClient.checkHealth].
@@ -250,6 +273,7 @@ class JellyfinConnection extends Connection {
required this.userName,
required this.accessToken,
required this.deviceId,
+ this.dialect = MediaBrowserDialect.jellyfin,
this.isAdministrator = false,
this.primaryImageTag,
this.status = ConnectionStatus.unknown,
@@ -259,7 +283,7 @@ class JellyfinConnection extends Connection {
baseUrls = _normalizeBaseUrls(baseUrl, baseUrls);
@override
- ConnectionKind get kind => ConnectionKind.jellyfin;
+ ConnectionKind get kind => ConnectionKind.fromDialect(dialect);
@override
String get displayName => '$userName · $serverName';
@@ -306,11 +330,12 @@ class JellyfinConnection extends Connection {
String? userName,
String? accessToken,
String? deviceId,
+ MediaBrowserDialect? dialect,
bool? isAdministrator,
String? primaryImageTag,
- /// Deleting a Jellyfin profile picture drops `PrimaryImageTag` from the
- /// user DTO, so a refresh must be able to null the cached value — a bare
+ /// Deleting a profile picture drops `PrimaryImageTag` from the user DTO, so
+ /// a refresh must be able to null the cached value — a bare
/// `primaryImageTag: null` is indistinguishable from "unchanged".
bool clearPrimaryImageTag = false,
ConnectionStatus? status,
@@ -328,6 +353,7 @@ class JellyfinConnection extends Connection {
userName: userName ?? this.userName,
accessToken: accessToken ?? this.accessToken,
deviceId: deviceId ?? this.deviceId,
+ dialect: dialect ?? this.dialect,
isAdministrator: isAdministrator ?? this.isAdministrator,
primaryImageTag: clearPrimaryImageTag ? null : (primaryImageTag ?? this.primaryImageTag),
status: status ?? this.status,
@@ -336,6 +362,9 @@ class JellyfinConnection extends Connection {
);
}
+ /// The persisted payload deliberately omits [dialect]: the `connections.kind`
+ /// column is the authoritative, indexed discriminator and
+ /// [JellyfinConnection.fromConfigJson] receives it from there.
@override
Map toConfigJson() {
return {
@@ -358,6 +387,7 @@ class JellyfinConnection extends Connection {
required ConnectionStatus status,
required DateTime createdAt,
DateTime? lastAuthenticatedAt,
+ MediaBrowserDialect dialect = MediaBrowserDialect.jellyfin,
}) {
final rawBaseUrls = json['baseUrls'];
final baseUrls = rawBaseUrls is List ? rawBaseUrls.whereType().toList(growable: false) : const [];
@@ -369,7 +399,8 @@ class JellyfinConnection extends Connection {
id: id,
baseUrl: baseUrl,
baseUrls: baseUrls,
- serverName: json['serverName'] as String? ?? 'Jellyfin',
+ dialect: dialect,
+ serverName: json['serverName'] as String? ?? dialect.productName,
serverMachineId: json['serverMachineId'] as String? ?? '',
userId: json['userId'] as String? ?? '',
userName: json['userName'] as String? ?? '',
diff --git a/lib/connection/connection_registry.dart b/lib/connection/connection_registry.dart
index eb692b47..a2e93649 100644
--- a/lib/connection/connection_registry.dart
+++ b/lib/connection/connection_registry.dart
@@ -161,12 +161,13 @@ class ConnectionRegistry {
createdAt: createdAt,
lastAuthenticatedAt: lastAuth,
),
- ConnectionKind.jellyfin => JellyfinConnection.fromConfigJson(
+ ConnectionKind.jellyfin || ConnectionKind.emby => JellyfinConnection.fromConfigJson(
id: row.id,
json: revealed.config,
status: ConnectionStatus.unknown,
createdAt: createdAt,
lastAuthenticatedAt: lastAuth,
+ dialect: kind.dialect!,
),
};
if (revealed.migrated) {
diff --git a/lib/database/app_database.dart b/lib/database/app_database.dart
index 71adefe5..bcf8ccfd 100644
--- a/lib/database/app_database.dart
+++ b/lib/database/app_database.dart
@@ -235,7 +235,7 @@ class AppDatabase extends _$AppDatabase {
static bool _containsPlaintextConnectionCredential(String kind, Map config) {
bool isPlaintext(Object? value) => value is String && value.isNotEmpty && !CredentialVault.isProtected(value);
- if (kind == 'jellyfin') return isPlaintext(config['accessToken']);
+ if (kind == 'jellyfin' || kind == 'emby') return isPlaintext(config['accessToken']);
if (kind != 'plex') return false;
if (isPlaintext(config['accountToken'])) return true;
final servers = config['servers'];
diff --git a/lib/database/app_database.g.dart b/lib/database/app_database.g.dart
index 19bc7399..a818e3c1 100644
--- a/lib/database/app_database.g.dart
+++ b/lib/database/app_database.g.dart
@@ -4497,7 +4497,7 @@ class ConnectionRow extends DataClass implements Insertable {
/// (one per account); for Jellyfin it's the server's machineId.
final String id;
- /// Backend kind: `'plex'` or `'jellyfin'`.
+ /// Backend kind: `'plex'`, `'jellyfin'`, or `'emby'`.
final String kind;
/// User-visible label (account email, server name).
diff --git a/lib/database/download_operations.dart b/lib/database/download_operations.dart
index 2df91c5f..f154d1c5 100644
--- a/lib/database/download_operations.dart
+++ b/lib/database/download_operations.dart
@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:drift/drift.dart';
import 'package:flutter/foundation.dart';
import '../media/ids.dart';
+import '../media/media_backend.dart';
import 'app_database.dart';
import '../models/download_models.dart';
@@ -202,22 +203,30 @@ extension DownloadDatabaseOperations on AppDatabase {
final connectionRows = await select(connections).get();
final connectionIds = connectionRows.map((row) => row.id).toSet();
final connectionKindsById = {for (final row in connectionRows) row.id: row.kind};
- final jellyfinIdentities = {};
- final jellyfinMachineIds = {};
- for (final connection in connectionRows.where((row) => row.kind == 'jellyfin')) {
- final identity = _jellyfinConnectionIdentity(connection);
- jellyfinIdentities[connection.id] = identity;
- jellyfinMachineIds.add(identity.machineId);
+ final mediaBrowserIdentities = {};
+ final mediaBrowserMachineIds = {};
+ // `Connections.kind` is the authoritative dialect discriminator; both
+ // MediaBrowser kinds use the same compound machine/user scope shape.
+ for (final connection in connectionRows.where(
+ (row) => row.kind == MediaBackend.jellyfin.id || row.kind == MediaBackend.emby.id,
+ )) {
+ final identity = _mediaBrowserConnectionIdentity(connection);
+ mediaBrowserIdentities[connection.id] = (
+ machineId: identity.machineId,
+ userId: identity.userId,
+ backendId: connection.kind,
+ );
+ mediaBrowserMachineIds.add(identity.machineId);
}
- final jellyfinScopesByProfileAndMachine = >>{};
+ final mediaBrowserScopesByProfileAndMachine = >>{};
for (final binding in await select(profileConnections).get()) {
if (binding.userIdentifier.isEmpty) continue;
- final identity = jellyfinIdentities[binding.connectionId];
+ final identity = mediaBrowserIdentities[binding.connectionId];
if (identity == null || identity.userId != null && identity.userId != binding.userIdentifier) continue;
- jellyfinScopesByProfileAndMachine
- .putIfAbsent(binding.profileId, () => >{})
- .putIfAbsent(identity.machineId, () => {})
- .add('${identity.machineId}/${binding.userIdentifier}');
+ mediaBrowserScopesByProfileAndMachine
+ .putIfAbsent(binding.profileId, () => >{})
+ .putIfAbsent(identity.machineId, () => <({String scopeId, String backendId})>{})
+ .add((scopeId: '${identity.machineId}/${binding.userIdentifier}', backendId: identity.backendId));
}
final ownedKeys = {
for (final owner in owners)
@@ -239,35 +248,37 @@ extension DownloadDatabaseOperations on AppDatabase {
await addDownloadOwner(
profileId: profileId,
globalKey: row.globalKey,
- backendId: 'plex',
+ backendId: MediaBackend.plex.id,
clientScopeId: scopeId,
);
continue;
}
- final jellyfinScopes = jellyfinScopesByProfileAndMachine[profileId]?[row.serverId] ?? const {};
- if (jellyfinScopes.length == 1) {
- final adoptingScope = jellyfinScopes.single;
+ final mediaBrowserScopes =
+ mediaBrowserScopesByProfileAndMachine[profileId]?[row.serverId] ??
+ const <({String scopeId, String backendId})>{};
+ if (mediaBrowserScopes.length == 1) {
+ final adopting = mediaBrowserScopes.single;
await transaction(() async {
if (isStillActive != null && !isStillActive()) return;
- await updateDownloadedMediaClientScope(row.globalKey, adoptingScope);
+ await updateDownloadedMediaClientScope(row.globalKey, adopting.scopeId);
await addDownloadOwner(
profileId: profileId,
globalKey: row.globalKey,
- backendId: 'jellyfin',
- clientScopeId: adoptingScope,
+ backendId: adopting.backendId,
+ clientScopeId: adopting.scopeId,
);
});
continue;
}
- // A compound non-Plex scope is a legacy Jellyfin user namespace.
+ // A compound non-Plex scope is a legacy MediaBrowser user namespace.
// Never attach it to another profile unless that profile has exactly
- // one matching Jellyfin binding. The same applies when persisted
- // Jellyfin connections identify the machine but the profile has zero
- // or multiple possible users.
- final hasLegacyJellyfinScope = scopeId?.startsWith('${row.serverId}/') ?? false;
- if (hasLegacyJellyfinScope || jellyfinMachineIds.contains(row.serverId)) continue;
+ // one matching MediaBrowser binding. The same applies when persisted
+ // MediaBrowser connections identify the machine but the profile has
+ // zero or multiple possible users.
+ final hasLegacyMediaBrowserScope = scopeId?.startsWith('${row.serverId}/') ?? false;
+ if (hasLegacyMediaBrowserScope || mediaBrowserMachineIds.contains(row.serverId)) continue;
final backendId = connectionKindsById[scopeId];
await addDownloadOwner(
@@ -694,7 +705,7 @@ bool _isValidDownloadOwner(
return localProfileIds.isEmpty;
}
-({String machineId, String? userId}) _jellyfinConnectionIdentity(ConnectionRow connection) {
+({String machineId, String? userId}) _mediaBrowserConnectionIdentity(ConnectionRow connection) {
final separator = connection.id.indexOf('/');
var machineId = separator < 0 ? connection.id : connection.id.substring(0, separator);
String? userId = separator < 0 || separator == connection.id.length - 1
diff --git a/lib/database/tables.dart b/lib/database/tables.dart
index 6e17d9f6..38fcdb1f 100644
--- a/lib/database/tables.dart
+++ b/lib/database/tables.dart
@@ -131,8 +131,8 @@ class SyncRuleDownloads extends Table {
/// Persisted media-server connections.
///
/// One row per "connection" the user has added — a Plex account (with its
-/// discovered servers and active Home profile) or a single Jellyfin server.
-/// The [configJson] payload is backend-specific and parsed by the
+/// discovered servers and active Home profile) or a single MediaBrowser
+/// server/user. The [configJson] payload is backend-specific and parsed by the
/// [Connection] sealed class.
@DataClassName('ConnectionRow')
@TableIndex(name: 'idx_connections_kind', columns: {#kind})
@@ -141,7 +141,7 @@ class Connections extends Table {
/// (one per account); for Jellyfin it's the server's machineId.
TextColumn get id => text()();
- /// Backend kind: `'plex'` or `'jellyfin'`.
+ /// Backend kind: `'plex'`, `'jellyfin'`, or `'emby'`.
TextColumn get kind => text()();
/// User-visible label (account email, server name).
diff --git a/lib/i18n/az.i18n.json b/lib/i18n/az.i18n.json
index 5101b646..52925cfe 100644
--- a/lib/i18n/az.i18n.json
+++ b/lib/i18n/az.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Təsdiqləmə gözlənilir...\nSəyahətçinizdən (brauzer) daxil olun.",
"useBrowser": "Səyahətçini istifadə et",
"or": "və ya",
- "connectToJellyfin": "Jellyfin-ə qoşul",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Sürətli Qoşulmanı istifadə et",
"quickConnectInstructions": "Jellyfin-də Sürətli Qoşulmanı açın və bu kodu daxil edin.",
"quickConnectWaiting": "Təsdiq gözlənilir…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "${name} üçün seansın vaxtı bitdi",
"sessionExpiredMany": "${count} server üçün seansın vaxtı bitdi",
"signInAgain": "Yenidən daxil ol",
- "editJellyfinTitle": "Jellyfin qoşulmasını dəyişdir",
- "editJellyfinIntro": "${serverName} üçün URL əlavə edin və ya silin."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Kəşf et",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin serveri əlavə et",
+ "addMediaBrowserTitle": "",
"serverUrls": "Server URL-ləri",
"serverUrlsHelper": "Vergüllə ayrılmış bir neçə URL-ə icazə verilir.",
"findServer": "Server tap",
- "searchingLocalServers": "Yerli Jellyfin serverləri axtarılır...",
- "localServers": "Yerli Jellyfin serverləri",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "İstifadəçi adı",
"password": "Şifrə",
"signIn": "Daxil ol",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Plex ilə daxil ol",
"pinExpired": "PIN-in vaxtı bitdi. Lütfən təzədən cəhd edin.",
"failedToRegisterAccount": "Hesab qeydiyyatı uğursuz oldu: ${error}",
- "enterJellyfinUrlError": "Jellyfin server URL-inizi daxil edin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Qoşulma əlavə et",
"addConnectionTitleScoped": "${name} profilinə əlavə et",
"signInWithPlexCard": "Plex ilə daxil ol",
"signInWithPlexCardSubtitle": "Bu cihazı səlahiyyətləndirin.",
"signInWithPlexCardSubtitleScoped": "Plex hesabını səlahiyyətləndirin.",
- "connectToJellyfinCard": "Jellyfin-ə qoşul",
- "connectToJellyfinCardSubtitle": "Server URL, istifadəçi adı və şifrənizi daxil edin.",
- "connectToJellyfinCardSubtitleScoped": "Jellyfin serverinə daxil olun. ${name} profilinə bağlanır.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Başqa profildən götür",
"borrowFromAnotherProfileSubtitle": "Başqa profilin qoşulmasını yenidən istifadə edin."
}
diff --git a/lib/i18n/bg.i18n.json b/lib/i18n/bg.i18n.json
index 2a075ded..b891116d 100644
--- a/lib/i18n/bg.i18n.json
+++ b/lib/i18n/bg.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Изчакване на удостоверяване...\nВлезте от браузъра си.",
"useBrowser": "Използвай браузър",
"or": "или",
- "connectToJellyfin": "Свържи се с Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Използвай Quick Connect",
"quickConnectInstructions": "Отворете Quick Connect в Jellyfin и въведете този код.",
"quickConnectWaiting": "Изчакване на одобрение…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Сесията за ${name} е изтекла",
"sessionExpiredMany": "Сесиите за ${count} сървъра са изтекли",
"signInAgain": "Влез отново",
- "editJellyfinTitle": "Редактиране на Jellyfin връзка",
- "editJellyfinIntro": "Добавете или премахнете URL адреси за ${serverName}. Plezy ще използва достъпния URL адрес с най-ниска латентност."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Открий",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Добави Jellyfin сървър",
+ "addMediaBrowserTitle": "",
"serverUrls": "URL адреси на сървъра",
"serverUrlsHelper": "Позволени са няколко URL адреса, разделени със запетаи.",
"findServer": "Намери сървър",
- "searchingLocalServers": "Търсене на локални Jellyfin сървъри...",
- "localServers": "Локални Jellyfin сървъри",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Потребителско име",
"password": "Парола",
"signIn": "Вход",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Вход с Plex",
"pinExpired": "PIN-ът изтече преди вход. Моля, опитайте отново.",
"failedToRegisterAccount": "Неуспешна регистрация на акаунт: ${error}",
- "enterJellyfinUrlError": "Въведете URL адреса на вашия Jellyfin сървър",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Добави връзка",
"addConnectionTitleScoped": "Добави към ${name}",
"signInWithPlexCard": "Вход с Plex",
"signInWithPlexCardSubtitle": "Удостоверете това устройство. Споделените сървъри се добавят.",
"signInWithPlexCardSubtitleScoped": "Удостоверете Plex акаунт. Домашните потребители стават профили.",
- "connectToJellyfinCard": "Свързване с Jellyfin",
- "connectToJellyfinCardSubtitle": "Въведете URL адрес на сървъра, потребителско име и парола.",
- "connectToJellyfinCardSubtitleScoped": "Вход в Jellyfin сървър. Свързва се с ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Използвай от друг профил",
"borrowFromAnotherProfileSubtitle": "Използвай връзка от друг профил. PIN-защитените профили изискват PIN."
}
diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json
index d7ead2a5..7b13da37 100644
--- a/lib/i18n/da.i18n.json
+++ b/lib/i18n/da.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Venter på godkendelse...\nLog ind fra din browser.",
"useBrowser": "Brug browseren",
"or": "eller",
- "connectToJellyfin": "Forbind til Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Brug Quick Connect",
"quickConnectInstructions": "Åbn Quick Connect i Jellyfin, og indtast denne kode.",
"quickConnectWaiting": "Venter på godkendelse…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Sessionen er udløbet for ${name}",
"sessionExpiredMany": "Sessionerne er udløbet for ${count} servere",
"signInAgain": "Log ind igen",
- "editJellyfinTitle": "Rediger Jellyfin-forbindelse",
- "editJellyfinIntro": "Tilføj eller fjern URL'er for ${serverName}. Plezy bruger den tilgængelige URL med lavest latenstid."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Opdag",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Tilføj Jellyfin-server",
+ "addMediaBrowserTitle": "",
"serverUrls": "Server-URL'er",
"serverUrlsHelper": "Du kan angive flere URL'er adskilt med komma.",
"findServer": "Find server",
- "searchingLocalServers": "Søger efter lokale Jellyfin-servere...",
- "localServers": "Lokale Jellyfin-servere",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Brugernavn",
"password": "Adgangskode",
"signIn": "Log ind",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Log ind med Plex",
"pinExpired": "PIN-koden udløb før login. Prøv igen.",
"failedToRegisterAccount": "Kunne ikke registrere kontoen: ${error}",
- "enterJellyfinUrlError": "Angiv URL'en til din Jellyfin-server",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Tilføj forbindelse",
"addConnectionTitleScoped": "Tilføj til ${name}",
"signInWithPlexCard": "Log ind med Plex",
"signInWithPlexCardSubtitle": "Godkend denne enhed. Delte servere tilføjes.",
"signInWithPlexCardSubtitleScoped": "Godkend en Plex-konto. Plex Home-brugere bliver til profiler.",
- "connectToJellyfinCard": "Forbind til Jellyfin",
- "connectToJellyfinCardSubtitle": "Indtast din server-URL, dit brugernavn og din adgangskode.",
- "connectToJellyfinCardSubtitleScoped": "Log ind på en Jellyfin-server. Serveren knyttes til ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Lån fra en anden profil",
"borrowFromAnotherProfileSubtitle": "Genbrug en anden profils forbindelse. PIN-beskyttede profiler kræver en PIN."
}
diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json
index 57c33ff8..fd02e1bf 100644
--- a/lib/i18n/de.i18n.json
+++ b/lib/i18n/de.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Warte auf die Authentifizierung …\nMelde dich über deinen Browser an.",
"useBrowser": "Browser verwenden",
"or": "oder",
- "connectToJellyfin": "Mit Jellyfin verbinden",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Quick Connect verwenden",
"quickConnectInstructions": "Öffne Quick Connect in Jellyfin und gib diesen Code ein.",
"quickConnectWaiting": "Warte auf Bestätigung…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Sitzung für ${name} abgelaufen",
"sessionExpiredMany": "Sitzungen für ${count} Server abgelaufen",
"signInAgain": "Erneut anmelden",
- "editJellyfinTitle": "Jellyfin-Verbindung bearbeiten",
- "editJellyfinIntro": "Füge URLs für ${serverName} hinzu oder entferne sie. Plezy verwendet die erreichbare URL mit der geringsten Latenz."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Entdecken",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin-Server hinzufügen",
+ "addMediaBrowserTitle": "",
"serverUrls": "Server-URLs",
"serverUrlsHelper": "Mehrere URLs möglich, durch Kommas getrennt.",
"findServer": "Server finden",
- "searchingLocalServers": "Suche nach lokalen Jellyfin-Servern …",
- "localServers": "Lokale Jellyfin-Server",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Benutzername",
"password": "Passwort",
"signIn": "Anmelden",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Mit Plex anmelden",
"pinExpired": "PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.",
"failedToRegisterAccount": "Konto konnte nicht registriert werden: ${error}",
- "enterJellyfinUrlError": "Gib die URL deines Jellyfin-Servers ein",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Verbindung hinzufügen",
"addConnectionTitleScoped": "Zu ${name} hinzufügen",
"signInWithPlexCard": "Mit Plex anmelden",
"signInWithPlexCardSubtitle": "Dieses Gerät autorisieren. Geteilte Server werden hinzugefügt.",
"signInWithPlexCardSubtitleScoped": "Ein Plex-Konto autorisieren. Home-Benutzer werden zu Profilen.",
- "connectToJellyfinCard": "Mit Jellyfin verbinden",
- "connectToJellyfinCardSubtitle": "Gib Server-URL, Benutzername und Passwort ein.",
- "connectToJellyfinCardSubtitleScoped": "Bei einem Jellyfin-Server anmelden. Wird mit ${name} verknüpft.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Von einem anderen Profil ausleihen",
"borrowFromAnotherProfileSubtitle": "Verbindung eines anderen Profils wiederverwenden. PIN-geschützte Profile erfordern eine PIN."
}
diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json
index 3353a0bc..d66b40e5 100644
--- a/lib/i18n/en.i18n.json
+++ b/lib/i18n/en.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Waiting for authentication...\nSign in from your browser.",
"useBrowser": "Use browser",
"or": "or",
- "connectToJellyfin": "Connect to Jellyfin",
+ "connectToMediaBrowser": "Connect to ${product}",
"useQuickConnect": "Use Quick Connect",
"quickConnectInstructions": "Open Quick Connect in Jellyfin and enter this code.",
"quickConnectWaiting": "Waiting for approval…",
@@ -802,7 +802,7 @@
"borrowAddTo": "Add to ${displayName}",
"borrowExplain": "Borrow another profile's connection. PIN-protected profiles require a PIN.",
"borrowEmpty": "Nothing to borrow yet.",
- "borrowEmptySubtitle": "Connect Plex or Jellyfin to another profile first.",
+ "borrowEmptySubtitle": "Connect Plex, Jellyfin, or Emby to another profile first.",
"borrowLoadFailed": "Available connections could not be loaded. Try again.",
"borrowFromProfile": "From ${displayName}",
"borrowConnectionBorrowed": "Connection borrowed.",
@@ -822,13 +822,13 @@
"connections": {
"sectionTitle": "Connections",
"addConnection": "Add connection",
- "addConnectionSubtitleNoProfile": "Sign in with Plex or connect a Jellyfin server",
- "addConnectionSubtitleScoped": "Add to ${displayName}: Plex, Jellyfin, or another profile connection",
+ "addConnectionSubtitleNoProfile": "Sign in with Plex or connect a Jellyfin or Emby server",
+ "addConnectionSubtitleScoped": "Add to ${displayName}: Plex, Jellyfin, Emby, or another profile connection",
"sessionExpiredOne": "Session expired for ${name}",
"sessionExpiredMany": "Session expired for ${count} servers",
"signInAgain": "Sign in again",
- "editJellyfinTitle": "Edit Jellyfin connection",
- "editJellyfinIntro": "Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency."
+ "editMediaBrowserTitle": "Edit ${product} connection",
+ "editMediaBrowserIntro": "Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency."
},
"discover": {
"title": "Discover",
@@ -966,7 +966,7 @@
"title": "About",
"openSourceLicenses": "Open Source Licenses",
"versionLabel": "Version ${version}",
- "appDescription": "A beautiful Plex and Jellyfin client for Flutter",
+ "appDescription": "A beautiful Plex, Jellyfin, and Emby client for Flutter",
"viewLicensesDescription": "View licenses of third-party libraries"
},
"serverSelection": {
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Add Jellyfin server",
+ "addMediaBrowserTitle": "Add ${product} server",
"serverUrls": "Server URLs",
"serverUrlsHelper": "Multiple URLs allowed, separated by commas.",
"findServer": "Find server",
- "searchingLocalServers": "Looking for local Jellyfin servers...",
- "localServers": "Local Jellyfin servers",
+ "searchingLocalMediaBrowserServers": "Looking for local ${product} servers...",
+ "localMediaBrowserServers": "Local ${product} servers",
"username": "Username",
"password": "Password",
"signIn": "Sign in",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Sign in with Plex",
"pinExpired": "PIN expired before sign-in. Please try again.",
"failedToRegisterAccount": "Failed to register account: ${error}",
- "enterJellyfinUrlError": "Enter your Jellyfin server URL",
+ "enterMediaBrowserUrlError": "Enter your ${product} server URL",
"addConnectionTitle": "Add connection",
"addConnectionTitleScoped": "Add to ${name}",
"signInWithPlexCard": "Sign in with Plex",
"signInWithPlexCardSubtitle": "Authorize this device. Shared servers are added.",
"signInWithPlexCardSubtitleScoped": "Authorize a Plex account. Home users become profiles.",
- "connectToJellyfinCard": "Connect to Jellyfin",
- "connectToJellyfinCardSubtitle": "Enter your server URL, username, and password.",
- "connectToJellyfinCardSubtitleScoped": "Sign in to a Jellyfin server. Binds to ${name}.",
+ "connectToMediaBrowserCard": "Connect to ${product}",
+ "connectToMediaBrowserCardSubtitle": "Enter your server URL, username, and password.",
+ "connectToMediaBrowserCardSubtitleScoped": "Sign in to your ${product} server. Binds to ${name}.",
"borrowFromAnotherProfile": "Borrow from another profile",
"borrowFromAnotherProfileSubtitle": "Reuse another profile's connection. PIN-protected profiles require a PIN."
}
diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json
index 26c4ef6d..e581bf61 100644
--- a/lib/i18n/es.i18n.json
+++ b/lib/i18n/es.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Esperando autenticación...\nInicia sesión desde tu navegador.",
"useBrowser": "Usar navegador",
"or": "o",
- "connectToJellyfin": "Conectar a Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Usar Quick Connect",
"quickConnectInstructions": "Abre Quick Connect en Jellyfin e introduce este código.",
"quickConnectWaiting": "Esperando aprobación…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Sesión caducada para ${name}",
"sessionExpiredMany": "Sesión caducada para ${count} servidores",
"signInAgain": "Iniciar sesión de nuevo",
- "editJellyfinTitle": "Editar conexión de Jellyfin",
- "editJellyfinIntro": "Añade o elimina direcciones URL para ${serverName}. Plezy usará la dirección accesible con menor latencia."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Descubrir",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Añadir servidor Jellyfin",
+ "addMediaBrowserTitle": "",
"serverUrls": "Direcciones URL del servidor",
"serverUrlsHelper": "Se permiten varias URL, separadas por comas.",
"findServer": "Buscar servidor",
- "searchingLocalServers": "Buscando servidores Jellyfin locales...",
- "localServers": "Servidores Jellyfin locales",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Usuario",
"password": "Contraseña",
"signIn": "Iniciar sesión",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Iniciar sesión con Plex",
"pinExpired": "El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.",
"failedToRegisterAccount": "No se pudo registrar la cuenta: ${error}",
- "enterJellyfinUrlError": "Introduce la URL de tu servidor Jellyfin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Añadir conexión",
"addConnectionTitleScoped": "Añadir a ${name}",
"signInWithPlexCard": "Iniciar sesión con Plex",
"signInWithPlexCardSubtitle": "Autoriza este dispositivo. Se añaden servidores compartidos.",
"signInWithPlexCardSubtitleScoped": "Autoriza una cuenta Plex. Los usuarios de Home se convierten en perfiles.",
- "connectToJellyfinCard": "Conectar a Jellyfin",
- "connectToJellyfinCardSubtitle": "Introduce la URL del servidor, usuario y contraseña.",
- "connectToJellyfinCardSubtitleScoped": "Inicia sesión en un servidor Jellyfin. Se vincula a ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Tomar prestado de otro perfil",
"borrowFromAnotherProfileSubtitle": "Reutiliza la conexión de otro perfil. Los perfiles protegidos con PIN requieren un PIN."
}
diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json
index b9259cb3..51b5ee53 100644
--- a/lib/i18n/fr.i18n.json
+++ b/lib/i18n/fr.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "En attente d'authentification...\nConnectez-vous depuis votre navigateur.",
"useBrowser": "Utiliser le navigateur",
"or": "ou",
- "connectToJellyfin": "Se connecter à Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Utiliser Quick Connect",
"quickConnectInstructions": "Ouvrez Quick Connect dans Jellyfin et saisissez ce code.",
"quickConnectWaiting": "En attente d'approbation…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Session expirée pour ${name}",
"sessionExpiredMany": "Session expirée pour ${count} serveurs",
"signInAgain": "Se reconnecter",
- "editJellyfinTitle": "Modifier la connexion Jellyfin",
- "editJellyfinIntro": "Ajoutez ou supprimez des URL pour ${serverName}. Plezy utilisera l'URL joignable avec la latence la plus faible."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Découvrir",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Ajouter un serveur Jellyfin",
+ "addMediaBrowserTitle": "",
"serverUrls": "URL du serveur",
"serverUrlsHelper": "Plusieurs URL possibles, séparées par des virgules.",
"findServer": "Rechercher un serveur",
- "searchingLocalServers": "Recherche de serveurs Jellyfin locaux...",
- "localServers": "Serveurs Jellyfin locaux",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Nom d'utilisateur",
"password": "Mot de passe",
"signIn": "Se connecter",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Se connecter avec Plex",
"pinExpired": "Le PIN a expiré avant la connexion. Veuillez réessayer.",
"failedToRegisterAccount": "Échec de l'enregistrement du compte : ${error}",
- "enterJellyfinUrlError": "Saisissez l'URL de votre serveur Jellyfin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Ajouter une connexion",
"addConnectionTitleScoped": "Ajouter à ${name}",
"signInWithPlexCard": "Se connecter avec Plex",
"signInWithPlexCardSubtitle": "Autorisez cet appareil. Les serveurs partagés sont ajoutés.",
"signInWithPlexCardSubtitleScoped": "Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.",
- "connectToJellyfinCard": "Se connecter à Jellyfin",
- "connectToJellyfinCardSubtitle": "Saisissez l'URL du serveur, le nom d'utilisateur et le mot de passe.",
- "connectToJellyfinCardSubtitleScoped": "Connectez-vous à un serveur Jellyfin. Cette connexion sera liée à ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Emprunter à un autre profil",
"borrowFromAnotherProfileSubtitle": "Réutiliser la connexion d'un autre profil. Les profils protégés par PIN exigent un PIN."
}
diff --git a/lib/i18n/hu.i18n.json b/lib/i18n/hu.i18n.json
index ddd02d3e..099a8569 100644
--- a/lib/i18n/hu.i18n.json
+++ b/lib/i18n/hu.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Várakozás a hitelesítésre...\nJelentkezz be a böngésződben.",
"useBrowser": "Böngésző használata",
"or": "vagy",
- "connectToJellyfin": "Csatlakozás Jellyfinhez",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Quick Connect használata",
"quickConnectInstructions": "Nyisd meg a Quick Connect-et a Jellyfinben, és add meg ezt a kódot.",
"quickConnectWaiting": "Várakozás a jóváhagyásra…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "A(z) ${name} munkamenete lejárt",
"sessionExpiredMany": "${count} szerver munkamenete lejárt",
"signInAgain": "Bejelentkezés újra",
- "editJellyfinTitle": "Jellyfin kapcsolat szerkesztése",
- "editJellyfinIntro": "URL-ek hozzáadása vagy eltávolítása ehhez: ${serverName}. A Plezy a legalacsonyabb késleltetésű, elérhető URL-t fogja használni."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Felfedezés",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin szerver hozzáadása",
+ "addMediaBrowserTitle": "",
"serverUrls": "Szerver URL-címei",
"serverUrlsHelper": "Több URL is megadható, vesszővel elválasztva.",
"findServer": "Szerver keresése",
- "searchingLocalServers": "Helyi Jellyfin-szerverek keresése...",
- "localServers": "Helyi Jellyfin-szerverek",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Felhasználónév",
"password": "Jelszó",
"signIn": "Bejelentkezés",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Bejelentkezés Plexszel",
"pinExpired": "A PIN-kód a bejelentkezés előtt lejárt. Próbáld újra.",
"failedToRegisterAccount": "Nem sikerült a fiók regisztrálása: ${error}",
- "enterJellyfinUrlError": "Add meg a Jellyfin szervered URL-jét",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Kapcsolat hozzáadása",
"addConnectionTitleScoped": "Hozzáadás a következőhöz: ${name}",
"signInWithPlexCard": "Bejelentkezés Plexszel",
"signInWithPlexCardSubtitle": "Eszköz engedélyezése. A megosztott szerverek hozzáadásra kerülnek.",
"signInWithPlexCardSubtitleScoped": "Plex-fiók engedélyezése. A Plex Home-felhasználókból profilok lesznek.",
- "connectToJellyfinCard": "Csatlakozás Jellyfinhez",
- "connectToJellyfinCardSubtitle": "Add meg a szerver URL-jét, felhasználónevedet és jelszavadat.",
- "connectToJellyfinCardSubtitleScoped": "Bejelentkezés egy Jellyfin-szerverre. Hozzárendelés ehhez: ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Kapcsolat használata másik profilból",
"borrowFromAnotherProfileSubtitle": "Egy másik profil kapcsolatának használata. A PIN-kóddal védett profilokhoz PIN-kód szükséges."
}
diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json
index f8766769..c3a07485 100644
--- a/lib/i18n/it.i18n.json
+++ b/lib/i18n/it.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "In attesa di autenticazione...\nAccedi dal browser.",
"useBrowser": "Usa il browser",
"or": "o",
- "connectToJellyfin": "Connettiti a Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Usa Quick Connect",
"quickConnectInstructions": "Apri Quick Connect in Jellyfin e inserisci questo codice.",
"quickConnectWaiting": "In attesa di approvazione…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Sessione scaduta per ${name}",
"sessionExpiredMany": "Sessione scaduta per ${count} server",
"signInAgain": "Accedi di nuovo",
- "editJellyfinTitle": "Modifica connessione Jellyfin",
- "editJellyfinIntro": "Aggiungi o rimuovi URL per ${serverName}. Plezy userà l'URL raggiungibile con la latenza più bassa."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Esplora",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Aggiungi server Jellyfin",
+ "addMediaBrowserTitle": "",
"serverUrls": "URL del server",
"serverUrlsHelper": "Sono consentiti più URL, separati da virgole.",
"findServer": "Trova il server",
- "searchingLocalServers": "Ricerca dei server Jellyfin locali...",
- "localServers": "Server Jellyfin locali",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Nome utente",
"password": "Password",
"signIn": "Accedi",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Accedi con Plex",
"pinExpired": "PIN scaduto prima dell'accesso. Riprova.",
"failedToRegisterAccount": "Registrazione account non riuscita: ${error}",
- "enterJellyfinUrlError": "Inserisci l'URL del tuo server Jellyfin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Aggiungi connessione",
"addConnectionTitleScoped": "Aggiungi a ${name}",
"signInWithPlexCard": "Accedi con Plex",
"signInWithPlexCardSubtitle": "Autorizza questo dispositivo. I server condivisi vengono aggiunti.",
"signInWithPlexCardSubtitleScoped": "Autorizza un account Plex. Gli utenti Home diventano profili.",
- "connectToJellyfinCard": "Connettiti a Jellyfin",
- "connectToJellyfinCardSubtitle": "Inserisci l'URL del server, il nome utente e la password.",
- "connectToJellyfinCardSubtitleScoped": "Accedi a un server Jellyfin. Verrà associato a ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Prendi in prestito da un altro profilo",
"borrowFromAnotherProfileSubtitle": "Riutilizza la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN."
}
diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json
index fc25953a..b8fc6caf 100644
--- a/lib/i18n/ja.i18n.json
+++ b/lib/i18n/ja.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "認証を待っています…\nブラウザでサインインしてください。",
"useBrowser": "ブラウザを使用",
"or": "または",
- "connectToJellyfin": "Jellyfinに接続",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Quick Connect を使う",
"quickConnectInstructions": "JellyfinでQuick Connectを開き、このコードを入力してください。",
"quickConnectWaiting": "承認を待っています…",
@@ -826,8 +826,8 @@
"sessionExpiredOne": "${name} のセッションの有効期限が切れました",
"sessionExpiredMany": "${count} 台のサーバーのセッションの有効期限が切れました",
"signInAgain": "再度サインイン",
- "editJellyfinTitle": "Jellyfin接続を編集",
- "editJellyfinIntro": "${serverName}のURLを追加または削除します。Plezyは接続可能なURLのうち遅延が最も少ないものを使用します。"
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "探す",
@@ -1867,12 +1867,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfinサーバーを追加",
+ "addMediaBrowserTitle": "",
"serverUrls": "サーバーURL",
"serverUrlsHelper": "複数のURLをカンマ区切りで入力できます。",
"findServer": "サーバーを検索",
- "searchingLocalServers": "ローカルのJellyfinサーバーを検索中…",
- "localServers": "ローカルのJellyfinサーバー",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "ユーザー名",
"password": "パスワード",
"signIn": "サインイン",
@@ -1884,15 +1884,15 @@
"addPlexTitle": "Plexでサインイン",
"pinExpired": "サインイン前にPINの有効期限が切れました。もう一度お試しください。",
"failedToRegisterAccount": "アカウントの登録に失敗しました: ${error}",
- "enterJellyfinUrlError": "JellyfinサーバーのURLを入力してください",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "接続を追加",
"addConnectionTitleScoped": "${name}に追加",
"signInWithPlexCard": "Plexでサインイン",
"signInWithPlexCardSubtitle": "このデバイスを承認します。共有サーバーが追加されます。",
"signInWithPlexCardSubtitleScoped": "Plexアカウントを承認します。Homeユーザーはプロフィールになります。",
- "connectToJellyfinCard": "Jellyfinに接続",
- "connectToJellyfinCardSubtitle": "サーバーURL、ユーザー名、パスワードを入力してください。",
- "connectToJellyfinCardSubtitleScoped": "Jellyfinサーバーにサインインします。${name}にひも付けられます。",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "別のプロフィールの接続を利用",
"borrowFromAnotherProfileSubtitle": "別のプロフィールの接続を再利用します。PINで保護されたプロフィールにはPINが必要です。"
}
diff --git a/lib/i18n/kk.i18n.json b/lib/i18n/kk.i18n.json
index 2f6ad86b..8f634355 100644
--- a/lib/i18n/kk.i18n.json
+++ b/lib/i18n/kk.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Растау күтілуде...\nБраузеріңізден кіріңіз.",
"useBrowser": "Браузерді пайдалану",
"or": "немесе",
- "connectToJellyfin": "Jellyfin-ге қосылу",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Жылдам қосылуды пайдалану",
"quickConnectInstructions": "Jellyfin-де Жылдам қосылуды ашып, осы кодты енгізіңіз.",
"quickConnectWaiting": "Растау күтілуде…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "${name} үшін сеанс мерзімі өтті",
"sessionExpiredMany": "${count} сервер үшін сеанс мерзімі өтті",
"signInAgain": "Қайтадан кіру",
- "editJellyfinTitle": "Jellyfin қосылымын өңдеу",
- "editJellyfinIntro": "${serverName} үшін URL мекенжайын қосыңыз немесе өшіріңіз."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Шолу",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin серверін қосу",
+ "addMediaBrowserTitle": "",
"serverUrls": "Сервер URL-дері",
"serverUrlsHelper": "Үтірмен бөлінген бірнеше URL мекенжайына рұқсат етіледі.",
"findServer": "Серверді табу",
- "searchingLocalServers": "Жергілікті Jellyfin серверлері ізделуде...",
- "localServers": "Жергілікті Jellyfin серверлері",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Пайдаланушы аты",
"password": "Құпия сөз",
"signIn": "Кіру",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Plex арқылы кіру",
"pinExpired": "PIN код мерзімі өтті.",
"failedToRegisterAccount": "Тіркелгіні тіркеу қатесі: ${error}",
- "enterJellyfinUrlError": "Jellyfin сервер URL-ін енгізіңіз",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Қосылым қосу",
"addConnectionTitleScoped": "${name} профиліне қосу",
"signInWithPlexCard": "Plex арқылы кіру",
"signInWithPlexCardSubtitle": "Осы құрылғыны авторизациялау.",
"signInWithPlexCardSubtitleScoped": "Plex тіркелгісін авторизациялау.",
- "connectToJellyfinCard": "Jellyfin-ге қосылу",
- "connectToJellyfinCardSubtitle": "Сервер URL-ін, пайдаланушы атын енгізіңіз.",
- "connectToJellyfinCardSubtitleScoped": "Jellyfin серверіне кіру. ${name} профиліне жалғануда.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Басқа профильден алу",
"borrowFromAnotherProfileSubtitle": "Басқа профильдің қосылымын қайта пайдалану."
}
diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json
index 0ab23c0d..18ba9b36 100644
--- a/lib/i18n/ko.i18n.json
+++ b/lib/i18n/ko.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "인증 대기 중...\n브라우저에서 로그인하세요.",
"useBrowser": "브라우저 사용",
"or": "또는",
- "connectToJellyfin": "Jellyfin에 연결",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Quick Connect 사용",
"quickConnectInstructions": "Jellyfin에서 Quick Connect를 열고 이 코드를 입력하세요.",
"quickConnectWaiting": "승인 대기 중…",
@@ -826,8 +826,8 @@
"sessionExpiredOne": "${name}의 세션이 만료되었습니다",
"sessionExpiredMany": "${count}개 서버의 세션이 만료되었습니다",
"signInAgain": "다시 로그인",
- "editJellyfinTitle": "Jellyfin 연결 편집",
- "editJellyfinIntro": "${serverName}의 URL을 추가하거나 제거하세요. Plezy는 연결 가능한 URL 중 지연 시간이 가장 낮은 URL을 사용합니다."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "둘러보기",
@@ -1867,12 +1867,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin 서버 추가",
+ "addMediaBrowserTitle": "",
"serverUrls": "서버 URL",
"serverUrlsHelper": "쉼표로 구분하여 여러 URL을 입력할 수 있습니다.",
"findServer": "서버 찾기",
- "searchingLocalServers": "로컬 Jellyfin 서버 검색 중...",
- "localServers": "로컬 Jellyfin 서버",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "사용자 이름",
"password": "비밀번호",
"signIn": "로그인",
@@ -1884,15 +1884,15 @@
"addPlexTitle": "Plex로 로그인",
"pinExpired": "로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.",
"failedToRegisterAccount": "계정 등록 실패: ${error}",
- "enterJellyfinUrlError": "Jellyfin 서버 URL을 입력하세요",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "연결 추가",
"addConnectionTitleScoped": "${name}에 추가",
"signInWithPlexCard": "Plex로 로그인",
"signInWithPlexCardSubtitle": "이 기기를 승인합니다. 공유 서버가 추가됩니다.",
"signInWithPlexCardSubtitleScoped": "Plex 계정을 승인합니다. Home 사용자는 프로필이 됩니다.",
- "connectToJellyfinCard": "Jellyfin에 연결",
- "connectToJellyfinCardSubtitle": "서버 URL, 사용자 이름, 비밀번호를 입력하세요.",
- "connectToJellyfinCardSubtitleScoped": "Jellyfin 서버에 로그인합니다. ${name}에 연결됩니다.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "다른 프로필에서 빌리기",
"borrowFromAnotherProfileSubtitle": "다른 프로필의 연결을 재사용합니다. PIN으로 보호된 프로필에는 PIN이 필요합니다."
}
diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json
index 8baf28ad..b550b228 100644
--- a/lib/i18n/nb.i18n.json
+++ b/lib/i18n/nb.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Venter på autentisering...\nLogg inn fra nettleseren.",
"useBrowser": "Bruk nettleser",
"or": "eller",
- "connectToJellyfin": "Koble til Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Bruk Quick Connect",
"quickConnectInstructions": "Åpne Quick Connect i Jellyfin og skriv inn denne koden.",
"quickConnectWaiting": "Venter på godkjenning…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Økten er utløpt for ${name}",
"sessionExpiredMany": "Økten er utløpt for ${count} servere",
"signInAgain": "Logg inn igjen",
- "editJellyfinTitle": "Rediger Jellyfin-tilkobling",
- "editJellyfinIntro": "Legg til eller fjern URL-er for ${serverName}. Plezy bruker den tilgjengelige URL-en med lavest forsinkelse."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Oppdag",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Legg til Jellyfin-server",
+ "addMediaBrowserTitle": "",
"serverUrls": "Server-URL-er",
"serverUrlsHelper": "Flere URL-er er tillatt, atskilt med komma.",
"findServer": "Finn server",
- "searchingLocalServers": "Søker etter lokale Jellyfin-servere...",
- "localServers": "Lokale Jellyfin-servere",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Brukernavn",
"password": "Passord",
"signIn": "Logg inn",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Logg inn med Plex",
"pinExpired": "PIN-koden utløp før innloggingen var fullført. Prøv igjen.",
"failedToRegisterAccount": "Kunne ikke registrere kontoen: ${error}",
- "enterJellyfinUrlError": "Oppgi URL-en til Jellyfin-serveren din",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Legg til tilkobling",
"addConnectionTitleScoped": "Legg til for ${name}",
"signInWithPlexCard": "Logg inn med Plex",
"signInWithPlexCardSubtitle": "Autoriser denne enheten. Delte servere legges til.",
"signInWithPlexCardSubtitleScoped": "Autoriser en Plex-konto. Home-brukere blir profiler.",
- "connectToJellyfinCard": "Koble til Jellyfin",
- "connectToJellyfinCardSubtitle": "Skriv inn server-URL, brukernavn og passord.",
- "connectToJellyfinCardSubtitleScoped": "Logg på en Jellyfin-server. Knyttes til ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Lån fra en annen profil",
"borrowFromAnotherProfileSubtitle": "Gjenbruk en annen profils tilkobling. PIN-beskyttede profiler krever PIN."
}
diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json
index f42a9ae4..38618aad 100644
--- a/lib/i18n/nl.i18n.json
+++ b/lib/i18n/nl.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Wachten op authenticatie...\nMeld je aan via je browser.",
"useBrowser": "Gebruik browser",
"or": "of",
- "connectToJellyfin": "Verbinden met Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Quick Connect gebruiken",
"quickConnectInstructions": "Open Quick Connect in Jellyfin en voer deze code in.",
"quickConnectWaiting": "Wachten op goedkeuring…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Sessie verlopen voor ${name}",
"sessionExpiredMany": "Sessie verlopen voor ${count} servers",
"signInAgain": "Opnieuw aanmelden",
- "editJellyfinTitle": "Jellyfin-verbinding bewerken",
- "editJellyfinIntro": "Voeg URL's voor ${serverName} toe of verwijder ze. Plezy gebruikt de bereikbare URL met de laagste latentie."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Ontdekken",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin-server toevoegen",
+ "addMediaBrowserTitle": "",
"serverUrls": "Server-URL's",
"serverUrlsHelper": "Meerdere URL's toegestaan, gescheiden door komma's.",
"findServer": "Server zoeken",
- "searchingLocalServers": "Lokale Jellyfin-servers zoeken...",
- "localServers": "Lokale Jellyfin-servers",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Gebruikersnaam",
"password": "Wachtwoord",
"signIn": "Inloggen",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Inloggen met Plex",
"pinExpired": "De pincode verliep voordat je kon inloggen. Probeer het opnieuw.",
"failedToRegisterAccount": "Account registreren mislukt: ${error}",
- "enterJellyfinUrlError": "Voer de URL van je Jellyfin-server in",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Verbinding toevoegen",
"addConnectionTitleScoped": "Toevoegen aan ${name}",
"signInWithPlexCard": "Inloggen met Plex",
"signInWithPlexCardSubtitle": "Autoriseer dit apparaat. Gedeelde servers worden toegevoegd.",
"signInWithPlexCardSubtitleScoped": "Autoriseer een Plex-account. Home-gebruikers worden profielen.",
- "connectToJellyfinCard": "Verbinden met Jellyfin",
- "connectToJellyfinCardSubtitle": "Voer je server-URL, gebruikersnaam en wachtwoord in.",
- "connectToJellyfinCardSubtitleScoped": "Log in op een Jellyfin-server. Wordt gekoppeld aan ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Van een ander profiel lenen",
"borrowFromAnotherProfileSubtitle": "Hergebruik de verbinding van een ander profiel. Voor profielen met pincodebeveiliging is een pincode vereist."
}
diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json
index 5358ff85..40896f89 100644
--- a/lib/i18n/pl.i18n.json
+++ b/lib/i18n/pl.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Oczekiwanie na uwierzytelnienie...\nZaloguj się w przeglądarce.",
"useBrowser": "Użyj przeglądarki",
"or": "lub",
- "connectToJellyfin": "Połącz z Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Użyj Quick Connect",
"quickConnectInstructions": "Otwórz Quick Connect w Jellyfin i wpisz ten kod.",
"quickConnectWaiting": "Oczekiwanie na zatwierdzenie…",
@@ -829,8 +829,8 @@
"sessionExpiredOne": "Sesja wygasła dla ${name}",
"sessionExpiredMany": "Sesja wygasła dla ${count} serwerów",
"signInAgain": "Zaloguj się ponownie",
- "editJellyfinTitle": "Edytuj połączenie Jellyfin",
- "editJellyfinIntro": "Dodaj lub usuń adresy URL dla ${serverName}. Plezy użyje osiągalnego URL-a o najniższym opóźnieniu."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Odkryj",
@@ -1885,12 +1885,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Dodaj serwer Jellyfin",
+ "addMediaBrowserTitle": "",
"serverUrls": "Adresy URL serwera",
"serverUrlsHelper": "Można podać wiele adresów URL rozdzielonych przecinkami.",
"findServer": "Znajdź serwer",
- "searchingLocalServers": "Szukanie lokalnych serwerów Jellyfin...",
- "localServers": "Lokalne serwery Jellyfin",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Nazwa użytkownika",
"password": "Hasło",
"signIn": "Zaloguj się",
@@ -1902,15 +1902,15 @@
"addPlexTitle": "Zaloguj się przez Plex",
"pinExpired": "PIN wygasł przed zalogowaniem. Spróbuj ponownie.",
"failedToRegisterAccount": "Nie udało się zarejestrować konta: ${error}",
- "enterJellyfinUrlError": "Podaj URL serwera Jellyfin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Dodaj połączenie",
"addConnectionTitleScoped": "Dodaj do ${name}",
"signInWithPlexCard": "Zaloguj się przez Plex",
"signInWithPlexCardSubtitle": "Autoryzuj to urządzenie. Serwery udostępnione zostaną dodane.",
"signInWithPlexCardSubtitleScoped": "Autoryzuj konto Plex. Użytkownicy Home staną się profilami.",
- "connectToJellyfinCard": "Połącz z Jellyfin",
- "connectToJellyfinCardSubtitle": "Wpisz URL serwera, nazwę użytkownika i hasło.",
- "connectToJellyfinCardSubtitleScoped": "Zaloguj się do serwera Jellyfin. Powiązane z ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Pożycz z innego profilu",
"borrowFromAnotherProfileSubtitle": "Użyj połączenia innego profilu. Profile chronione PIN-em wymagają podania PIN-u."
}
diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json
index cf271b11..ce5b4b7b 100644
--- a/lib/i18n/pt.i18n.json
+++ b/lib/i18n/pt.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Aguardando autenticação...\nEntre pelo navegador.",
"useBrowser": "Usar navegador",
"or": "ou",
- "connectToJellyfin": "Conectar ao Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Usar Quick Connect",
"quickConnectInstructions": "Abra o Quick Connect no Jellyfin e insira este código.",
"quickConnectWaiting": "Aguardando aprovação…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Sessão de ${name} expirada",
"sessionExpiredMany": "Sessões expiradas em ${count} servidores",
"signInAgain": "Entrar novamente",
- "editJellyfinTitle": "Editar conexão Jellyfin",
- "editJellyfinIntro": "Adicione ou remova URLs de ${serverName}. O Plezy usará a URL acessível com a menor latência."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Descobrir",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Adicionar servidor Jellyfin",
+ "addMediaBrowserTitle": "",
"serverUrls": "URLs do servidor",
"serverUrlsHelper": "Várias URLs são permitidas, separadas por vírgulas.",
"findServer": "Encontrar servidor",
- "searchingLocalServers": "Procurando servidores Jellyfin locais...",
- "localServers": "Servidores Jellyfin locais",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Usuário",
"password": "Senha",
"signIn": "Entrar",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Entrar com Plex",
"pinExpired": "O PIN expirou antes de entrar. Tente novamente.",
"failedToRegisterAccount": "Falha ao registrar a conta: ${error}",
- "enterJellyfinUrlError": "Insira a URL do seu servidor Jellyfin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Adicionar conexão",
"addConnectionTitleScoped": "Adicionar a ${name}",
"signInWithPlexCard": "Entrar com Plex",
"signInWithPlexCardSubtitle": "Autorize este dispositivo. Servidores compartilhados são adicionados.",
"signInWithPlexCardSubtitleScoped": "Autorize uma conta Plex. Os usuários do Plex Home se tornam perfis.",
- "connectToJellyfinCard": "Conectar ao Jellyfin",
- "connectToJellyfinCardSubtitle": "Insira URL do servidor, usuário e senha.",
- "connectToJellyfinCardSubtitleScoped": "Entre em um servidor Jellyfin. A conexão será vinculada a ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Pegar emprestado de outro perfil",
"borrowFromAnotherProfileSubtitle": "Reutilize a conexão de outro perfil. Perfis protegidos por PIN exigem PIN."
}
diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json
index f41e3ce0..4d8d399d 100644
--- a/lib/i18n/ru.i18n.json
+++ b/lib/i18n/ru.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Ожидание аутентификации...\nВыполните вход в браузере.",
"useBrowser": "Использовать браузер",
"or": "или",
- "connectToJellyfin": "Подключиться к Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Использовать Quick Connect",
"quickConnectInstructions": "Откройте Quick Connect в Jellyfin и введите этот код.",
"quickConnectWaiting": "Ожидание подтверждения…",
@@ -829,8 +829,8 @@
"sessionExpiredOne": "Сессия истекла для ${name}",
"sessionExpiredMany": "Сессия истекла для ${count} серверов",
"signInAgain": "Войти снова",
- "editJellyfinTitle": "Изменить подключение Jellyfin",
- "editJellyfinIntro": "Добавьте или удалите URL для ${serverName}. Plezy будет использовать доступный URL с минимальной задержкой."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Обзор",
@@ -1885,12 +1885,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Добавить сервер Jellyfin",
+ "addMediaBrowserTitle": "",
"serverUrls": "URL-адреса сервера",
"serverUrlsHelper": "Можно указать несколько URL через запятую.",
"findServer": "Найти сервер",
- "searchingLocalServers": "Поиск локальных серверов Jellyfin...",
- "localServers": "Локальные серверы Jellyfin",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Имя пользователя",
"password": "Пароль",
"signIn": "Войти",
@@ -1902,15 +1902,15 @@
"addPlexTitle": "Войти через Plex",
"pinExpired": "Срок действия PIN истёк до входа. Попробуйте снова.",
"failedToRegisterAccount": "Не удалось зарегистрировать учётную запись: ${error}",
- "enterJellyfinUrlError": "Введите URL вашего сервера Jellyfin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Добавить подключение",
"addConnectionTitleScoped": "Добавить в ${name}",
"signInWithPlexCard": "Войти через Plex",
"signInWithPlexCardSubtitle": "Авторизуйте это устройство. Общие серверы будут добавлены.",
"signInWithPlexCardSubtitleScoped": "Авторизуйте аккаунт Plex. Пользователи Home станут профилями.",
- "connectToJellyfinCard": "Подключиться к Jellyfin",
- "connectToJellyfinCardSubtitle": "Введите URL сервера, имя пользователя и пароль.",
- "connectToJellyfinCardSubtitleScoped": "Войдите на сервер Jellyfin. Привязывается к ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Использовать подключение другого профиля",
"borrowFromAnotherProfileSubtitle": "Повторно используйте подключение другого профиля. Для защищённых профилей потребуется PIN."
}
diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart
index b28c6fc9..906445ed 100644
--- a/lib/i18n/strings.g.dart
+++ b/lib/i18n/strings.g.dart
@@ -4,7 +4,7 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 22
-/// Strings: 32946 (1497 per locale)
+/// Strings: 32736 (1488 per locale)
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
diff --git a/lib/i18n/strings_az.g.dart b/lib/i18n/strings_az.g.dart
index 12681937..f6f2801a 100644
--- a/lib/i18n/strings_az.g.dart
+++ b/lib/i18n/strings_az.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$az extends Translations$auth$en {
@override String get waitingForAuth => 'Təsdiqləmə gözlənilir...\nSəyahətçinizdən (brauzer) daxil olun.';
@override String get useBrowser => 'Səyahətçini istifadə et';
@override String get or => 'və ya';
- @override String get connectToJellyfin => 'Jellyfin-ə qoşul';
@override String get useQuickConnect => 'Sürətli Qoşulmanı istifadə et';
@override String get quickConnectInstructions => 'Jellyfin-də Sürətli Qoşulmanı açın və bu kodu daxil edin.';
@override String get quickConnectWaiting => 'Təsdiq gözlənilir…';
@@ -922,8 +921,6 @@ class _Translations$connections$az extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => '${name} üçün seansın vaxtı bitdi';
@override String sessionExpiredMany({required Object count}) => '${count} server üçün seansın vaxtı bitdi';
@override String get signInAgain => 'Yenidən daxil ol';
- @override String get editJellyfinTitle => 'Jellyfin qoşulmasını dəyişdir';
- @override String editJellyfinIntro({required Object serverName}) => '${serverName} üçün URL əlavə edin və ya silin.';
}
// Path: discover
@@ -1814,12 +1811,9 @@ class _Translations$addServer$az extends Translations$addServer$en {
final TranslationsAz _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin serveri əlavə et';
@override String get serverUrls => 'Server URL-ləri';
@override String get serverUrlsHelper => 'Vergüllə ayrılmış bir neçə URL-ə icazə verilir.';
@override String get findServer => 'Server tap';
- @override String get searchingLocalServers => 'Yerli Jellyfin serverləri axtarılır...';
- @override String get localServers => 'Yerli Jellyfin serverləri';
@override String get username => 'İstifadəçi adı';
@override String get password => 'Şifrə';
@override String get signIn => 'Daxil ol';
@@ -1831,15 +1825,11 @@ class _Translations$addServer$az extends Translations$addServer$en {
@override String get addPlexTitle => 'Plex ilə daxil ol';
@override String get pinExpired => 'PIN-in vaxtı bitdi. Lütfən təzədən cəhd edin.';
@override String failedToRegisterAccount({required Object error}) => 'Hesab qeydiyyatı uğursuz oldu: ${error}';
- @override String get enterJellyfinUrlError => 'Jellyfin server URL-inizi daxil edin';
@override String get addConnectionTitle => 'Qoşulma əlavə et';
@override String addConnectionTitleScoped({required Object name}) => '${name} profilinə əlavə et';
@override String get signInWithPlexCard => 'Plex ilə daxil ol';
@override String get signInWithPlexCardSubtitle => 'Bu cihazı səlahiyyətləndirin.';
@override String get signInWithPlexCardSubtitleScoped => 'Plex hesabını səlahiyyətləndirin.';
- @override String get connectToJellyfinCard => 'Jellyfin-ə qoşul';
- @override String get connectToJellyfinCardSubtitle => 'Server URL, istifadəçi adı və şifrənizi daxil edin.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Jellyfin serverinə daxil olun. ${name} profilinə bağlanır.';
@override String get borrowFromAnotherProfile => 'Başqa profildən götür';
@override String get borrowFromAnotherProfileSubtitle => 'Başqa profilin qoşulmasını yenidən istifadə edin.';
}
@@ -2219,7 +2209,6 @@ extension on TranslationsAz {
'auth.waitingForAuth' => 'Təsdiqləmə gözlənilir...\nSəyahətçinizdən (brauzer) daxil olun.',
'auth.useBrowser' => 'Səyahətçini istifadə et',
'auth.or' => 'və ya',
- 'auth.connectToJellyfin' => 'Jellyfin-ə qoşul',
'auth.useQuickConnect' => 'Sürətli Qoşulmanı istifadə et',
'auth.quickConnectInstructions' => 'Jellyfin-də Sürətli Qoşulmanı açın və bu kodu daxil edin.',
'auth.quickConnectWaiting' => 'Təsdiq gözlənilir…',
@@ -2722,9 +2711,9 @@ extension on TranslationsAz {
'videoControls.noChaptersAvailable' => 'Hissələr əlçatan deyil',
'videoControls.queue' => 'Növbə',
'videoControls.noQueueItems' => 'Növbədə element yoxdur',
+ 'videoControls.searchSubtitles' => 'Altyazı axtar',
_ => null,
} ?? switch (path) {
- 'videoControls.searchSubtitles' => 'Altyazı axtar',
'videoControls.language' => 'Dil',
'videoControls.noSubtitlesFound' => 'Altyazı tapılmadı',
'videoControls.subtitleDownloaded' => 'Altyazı yükləndi',
@@ -2884,8 +2873,6 @@ extension on TranslationsAz {
'connections.sessionExpiredOne' => ({required Object name}) => '${name} üçün seansın vaxtı bitdi',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} server üçün seansın vaxtı bitdi',
'connections.signInAgain' => 'Yenidən daxil ol',
- 'connections.editJellyfinTitle' => 'Jellyfin qoşulmasını dəyişdir',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName} üçün URL əlavə edin və ya silin.',
'discover.title' => 'Kəşf et',
'discover.noContentAvailable' => 'Məzmun əlçatan deyil',
'discover.addMediaToLibraries' => 'Kitabxanalarınıza bir az media əlavə edin',
@@ -3236,11 +3223,11 @@ extension on TranslationsAz {
'watchTogether.enterCodeHint' => '5 rəqəmli/hərfli kodu daxil edin',
'watchTogether.pasteFromClipboard' => 'Buferdən yapışdır',
'watchTogether.pleaseEnterCode' => 'Lütfən seans kodunu daxil edin',
- _ => null,
- } ?? switch (path) {
'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.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.',
@@ -3678,12 +3665,9 @@ extension on TranslationsAz {
'services.libraryFilter.modeHintWhitelist' => 'Yalnız aşağıda seçilən kitabxanaları eyniləşdir.',
'services.libraryFilter.libraries' => 'Kitabxanalar',
'services.libraryFilter.noLibraries' => 'Kitabxana yoxdur',
- 'addServer.addJellyfinTitle' => 'Jellyfin serveri əlavə et',
'addServer.serverUrls' => 'Server URL-ləri',
'addServer.serverUrlsHelper' => 'Vergüllə ayrılmış bir neçə URL-ə icazə verilir.',
'addServer.findServer' => 'Server tap',
- 'addServer.searchingLocalServers' => 'Yerli Jellyfin serverləri axtarılır...',
- 'addServer.localServers' => 'Yerli Jellyfin serverləri',
'addServer.username' => 'İstifadəçi adı',
'addServer.password' => 'Şifrə',
'addServer.signIn' => 'Daxil ol',
@@ -3695,15 +3679,11 @@ extension on TranslationsAz {
'addServer.addPlexTitle' => 'Plex ilə daxil ol',
'addServer.pinExpired' => 'PIN-in vaxtı bitdi. Lütfən təzədən cəhd edin.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Hesab qeydiyyatı uğursuz oldu: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Jellyfin server URL-inizi daxil edin',
'addServer.addConnectionTitle' => 'Qoşulma əlavə et',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} profilinə əlavə et',
'addServer.signInWithPlexCard' => 'Plex ilə daxil ol',
'addServer.signInWithPlexCardSubtitle' => 'Bu cihazı səlahiyyətləndirin.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Plex hesabını səlahiyyətləndirin.',
- 'addServer.connectToJellyfinCard' => 'Jellyfin-ə qoşul',
- 'addServer.connectToJellyfinCardSubtitle' => 'Server URL, istifadəçi adı və şifrənizi daxil edin.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Jellyfin serverinə daxil olun. ${name} profilinə bağlanır.',
'addServer.borrowFromAnotherProfile' => 'Başqa profildən götür',
'addServer.borrowFromAnotherProfileSubtitle' => 'Başqa profilin qoşulmasını yenidən istifadə edin.',
_ => null,
diff --git a/lib/i18n/strings_bg.g.dart b/lib/i18n/strings_bg.g.dart
index 63fa8076..5acf4aef 100644
--- a/lib/i18n/strings_bg.g.dart
+++ b/lib/i18n/strings_bg.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$bg extends Translations$auth$en {
@override String get waitingForAuth => 'Изчакване на удостоверяване...\nВлезте от браузъра си.';
@override String get useBrowser => 'Използвай браузър';
@override String get or => 'или';
- @override String get connectToJellyfin => 'Свържи се с Jellyfin';
@override String get useQuickConnect => 'Използвай Quick Connect';
@override String get quickConnectInstructions => 'Отворете Quick Connect в Jellyfin и въведете този код.';
@override String get quickConnectWaiting => 'Изчакване на одобрение…';
@@ -918,8 +917,6 @@ class _Translations$connections$bg extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Сесията за ${name} е изтекла';
@override String sessionExpiredMany({required Object count}) => 'Сесиите за ${count} сървъра са изтекли';
@override String get signInAgain => 'Влез отново';
- @override String get editJellyfinTitle => 'Редактиране на Jellyfin връзка';
- @override String editJellyfinIntro({required Object serverName}) => 'Добавете или премахнете URL адреси за ${serverName}. Plezy ще използва достъпния URL адрес с най-ниска латентност.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$bg extends Translations$addServer$en {
final TranslationsBg _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Добави Jellyfin сървър';
@override String get serverUrls => 'URL адреси на сървъра';
@override String get serverUrlsHelper => 'Позволени са няколко URL адреса, разделени със запетаи.';
@override String get findServer => 'Намери сървър';
- @override String get searchingLocalServers => 'Търсене на локални Jellyfin сървъри...';
- @override String get localServers => 'Локални Jellyfin сървъри';
@override String get username => 'Потребителско име';
@override String get password => 'Парола';
@override String get signIn => 'Вход';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$bg extends Translations$addServer$en {
@override String get addPlexTitle => 'Вход с Plex';
@override String get pinExpired => 'PIN-ът изтече преди вход. Моля, опитайте отново.';
@override String failedToRegisterAccount({required Object error}) => 'Неуспешна регистрация на акаунт: ${error}';
- @override String get enterJellyfinUrlError => 'Въведете URL адреса на вашия Jellyfin сървър';
@override String get addConnectionTitle => 'Добави връзка';
@override String addConnectionTitleScoped({required Object name}) => 'Добави към ${name}';
@override String get signInWithPlexCard => 'Вход с Plex';
@override String get signInWithPlexCardSubtitle => 'Удостоверете това устройство. Споделените сървъри се добавят.';
@override String get signInWithPlexCardSubtitleScoped => 'Удостоверете Plex акаунт. Домашните потребители стават профили.';
- @override String get connectToJellyfinCard => 'Свързване с Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Въведете URL адрес на сървъра, потребителско име и парола.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Вход в Jellyfin сървър. Свързва се с ${name}.';
@override String get borrowFromAnotherProfile => 'Използвай от друг профил';
@override String get borrowFromAnotherProfileSubtitle => 'Използвай връзка от друг профил. PIN-защитените профили изискват PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsBg {
'auth.waitingForAuth' => 'Изчакване на удостоверяване...\nВлезте от браузъра си.',
'auth.useBrowser' => 'Използвай браузър',
'auth.or' => 'или',
- 'auth.connectToJellyfin' => 'Свържи се с Jellyfin',
'auth.useQuickConnect' => 'Използвай Quick Connect',
'auth.quickConnectInstructions' => 'Отворете Quick Connect в Jellyfin и въведете този код.',
'auth.quickConnectWaiting' => 'Изчакване на одобрение…',
@@ -2711,9 +2700,9 @@ extension on TranslationsBg {
'videoControls.searchSubtitles' => 'Търсене на субтитри',
'videoControls.language' => 'Език',
'videoControls.noSubtitlesFound' => 'Не са намерени субтитри',
+ 'videoControls.subtitleDownloaded' => 'Субтитърът е изтеглен',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Субтитърът е изтеглен',
'videoControls.subtitleDownloadedNotApplied' => 'Субтитрите са изтеглени, но не можаха да бъдат избрани',
'videoControls.subtitleDownloadFailed' => 'Неуспешно изтегляне на субтитър',
'videoControls.searchLanguages' => 'Търсене на езици...',
@@ -2869,8 +2858,6 @@ extension on TranslationsBg {
'connections.sessionExpiredOne' => ({required Object name}) => 'Сесията за ${name} е изтекла',
'connections.sessionExpiredMany' => ({required Object count}) => 'Сесиите за ${count} сървъра са изтекли',
'connections.signInAgain' => 'Влез отново',
- 'connections.editJellyfinTitle' => 'Редактиране на Jellyfin връзка',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Добавете или премахнете URL адреси за ${serverName}. Plezy ще използва достъпния URL адрес с най-ниска латентност.',
'discover.title' => 'Открий',
'discover.noContentAvailable' => 'Няма налично съдържание',
'discover.addMediaToLibraries' => 'Добавете медия към библиотеките си',
@@ -3225,11 +3212,11 @@ extension on TranslationsBg {
'watchTogether.failedToCreate' => 'Неуспешно създаване на сесия',
'watchTogether.failedToJoin' => 'Неуспешно присъединяване към сесия',
'watchTogether.sessionCodeCopied' => 'Кодът на сесията е копиран в клипборда',
- _ => null,
- } ?? switch (path) {
'watchTogether.relayUnreachable' => 'Релейният сървър е недостъпен. Възможно е интернет доставчикът да блокира гледането заедно.',
'watchTogether.reconnectingToHost' => 'Повторно свързване с организатора...',
'watchTogether.currentPlayback' => 'Текущо възпроизвеждане',
+ _ => null,
+ } ?? switch (path) {
'watchTogether.joinCurrentPlayback' => 'Присъедини се към текущото възпроизвеждане',
'watchTogether.joinCurrentPlaybackDescription' => 'Върнете се към това, което организаторът гледа в момента',
'watchTogether.failedToOpenCurrentPlayback' => 'Неуспешно отваряне на текущото възпроизвеждане',
@@ -3656,12 +3643,9 @@ extension on TranslationsBg {
'services.libraryFilter.modeHintWhitelist' => 'Синхронизирай само отметнатите по-долу библиотеки.',
'services.libraryFilter.libraries' => 'Библиотеки',
'services.libraryFilter.noLibraries' => 'Няма налични библиотеки',
- 'addServer.addJellyfinTitle' => 'Добави Jellyfin сървър',
'addServer.serverUrls' => 'URL адреси на сървъра',
'addServer.serverUrlsHelper' => 'Позволени са няколко URL адреса, разделени със запетаи.',
'addServer.findServer' => 'Намери сървър',
- 'addServer.searchingLocalServers' => 'Търсене на локални Jellyfin сървъри...',
- 'addServer.localServers' => 'Локални Jellyfin сървъри',
'addServer.username' => 'Потребителско име',
'addServer.password' => 'Парола',
'addServer.signIn' => 'Вход',
@@ -3673,15 +3657,11 @@ extension on TranslationsBg {
'addServer.addPlexTitle' => 'Вход с Plex',
'addServer.pinExpired' => 'PIN-ът изтече преди вход. Моля, опитайте отново.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Неуспешна регистрация на акаунт: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Въведете URL адреса на вашия Jellyfin сървър',
'addServer.addConnectionTitle' => 'Добави връзка',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Добави към ${name}',
'addServer.signInWithPlexCard' => 'Вход с Plex',
'addServer.signInWithPlexCardSubtitle' => 'Удостоверете това устройство. Споделените сървъри се добавят.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Удостоверете Plex акаунт. Домашните потребители стават профили.',
- 'addServer.connectToJellyfinCard' => 'Свързване с Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Въведете URL адрес на сървъра, потребителско име и парола.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Вход в Jellyfin сървър. Свързва се с ${name}.',
'addServer.borrowFromAnotherProfile' => 'Използвай от друг профил',
'addServer.borrowFromAnotherProfileSubtitle' => 'Използвай връзка от друг профил. PIN-защитените профили изискват PIN.',
_ => null,
diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart
index 4a26b12c..ce7fc418 100644
--- a/lib/i18n/strings_da.g.dart
+++ b/lib/i18n/strings_da.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$da extends Translations$auth$en {
@override String get waitingForAuth => 'Venter på godkendelse...\nLog ind fra din browser.';
@override String get useBrowser => 'Brug browseren';
@override String get or => 'eller';
- @override String get connectToJellyfin => 'Forbind til Jellyfin';
@override String get useQuickConnect => 'Brug Quick Connect';
@override String get quickConnectInstructions => 'Åbn Quick Connect i Jellyfin, og indtast denne kode.';
@override String get quickConnectWaiting => 'Venter på godkendelse…';
@@ -918,8 +917,6 @@ class _Translations$connections$da extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sessionen er udløbet for ${name}';
@override String sessionExpiredMany({required Object count}) => 'Sessionerne er udløbet for ${count} servere';
@override String get signInAgain => 'Log ind igen';
- @override String get editJellyfinTitle => 'Rediger Jellyfin-forbindelse';
- @override String editJellyfinIntro({required Object serverName}) => 'Tilføj eller fjern URL\'er for ${serverName}. Plezy bruger den tilgængelige URL med lavest latenstid.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$da extends Translations$addServer$en {
final TranslationsDa _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Tilføj Jellyfin-server';
@override String get serverUrls => 'Server-URL\'er';
@override String get serverUrlsHelper => 'Du kan angive flere URL\'er adskilt med komma.';
@override String get findServer => 'Find server';
- @override String get searchingLocalServers => 'Søger efter lokale Jellyfin-servere...';
- @override String get localServers => 'Lokale Jellyfin-servere';
@override String get username => 'Brugernavn';
@override String get password => 'Adgangskode';
@override String get signIn => 'Log ind';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$da extends Translations$addServer$en {
@override String get addPlexTitle => 'Log ind med Plex';
@override String get pinExpired => 'PIN-koden udløb før login. Prøv igen.';
@override String failedToRegisterAccount({required Object error}) => 'Kunne ikke registrere kontoen: ${error}';
- @override String get enterJellyfinUrlError => 'Angiv URL\'en til din Jellyfin-server';
@override String get addConnectionTitle => 'Tilføj forbindelse';
@override String addConnectionTitleScoped({required Object name}) => 'Tilføj til ${name}';
@override String get signInWithPlexCard => 'Log ind med Plex';
@override String get signInWithPlexCardSubtitle => 'Godkend denne enhed. Delte servere tilføjes.';
@override String get signInWithPlexCardSubtitleScoped => 'Godkend en Plex-konto. Plex Home-brugere bliver til profiler.';
- @override String get connectToJellyfinCard => 'Forbind til Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Indtast din server-URL, dit brugernavn og din adgangskode.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Log ind på en Jellyfin-server. Serveren knyttes til ${name}.';
@override String get borrowFromAnotherProfile => 'Lån fra en anden profil';
@override String get borrowFromAnotherProfileSubtitle => 'Genbrug en anden profils forbindelse. PIN-beskyttede profiler kræver en PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsDa {
'auth.waitingForAuth' => 'Venter på godkendelse...\nLog ind fra din browser.',
'auth.useBrowser' => 'Brug browseren',
'auth.or' => 'eller',
- 'auth.connectToJellyfin' => 'Forbind til Jellyfin',
'auth.useQuickConnect' => 'Brug Quick Connect',
'auth.quickConnectInstructions' => 'Åbn Quick Connect i Jellyfin, og indtast denne kode.',
'auth.quickConnectWaiting' => 'Venter på godkendelse…',
@@ -2711,9 +2700,9 @@ extension on TranslationsDa {
'videoControls.searchSubtitles' => 'Søg undertekster',
'videoControls.language' => 'Sprog',
'videoControls.noSubtitlesFound' => 'Ingen undertekster fundet',
+ 'videoControls.subtitleDownloaded' => 'Undertekst downloadet',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Undertekst downloadet',
'videoControls.subtitleDownloadedNotApplied' => 'Underteksten blev downloadet, men kunne ikke vælges',
'videoControls.subtitleDownloadFailed' => 'Kunne ikke downloade undertekst',
'videoControls.searchLanguages' => 'Søg sprog...',
@@ -2869,8 +2858,6 @@ extension on TranslationsDa {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sessionen er udløbet for ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sessionerne er udløbet for ${count} servere',
'connections.signInAgain' => 'Log ind igen',
- 'connections.editJellyfinTitle' => 'Rediger Jellyfin-forbindelse',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Tilføj eller fjern URL\'er for ${serverName}. Plezy bruger den tilgængelige URL med lavest latenstid.',
'discover.title' => 'Opdag',
'discover.noContentAvailable' => 'Intet indhold tilgængeligt',
'discover.addMediaToLibraries' => 'Tilføj medier til dine biblioteker',
@@ -3225,11 +3212,11 @@ extension on TranslationsDa {
'watchTogether.failedToCreate' => 'Kunne ikke oprette session',
'watchTogether.failedToJoin' => 'Kunne ikke deltage i session',
'watchTogether.sessionCodeCopied' => 'Sessionskode kopieret til udklipsholder',
- _ => null,
- } ?? switch (path) {
'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.joinCurrentPlayback' => 'Deltag i nuværende afspilning',
'watchTogether.joinCurrentPlaybackDescription' => 'Hop tilbage til det værten ser nu',
'watchTogether.failedToOpenCurrentPlayback' => 'Kunne ikke åbne nuværende afspilning',
@@ -3656,12 +3643,9 @@ extension on TranslationsDa {
'services.libraryFilter.modeHintWhitelist' => 'Synkroniser kun de biblioteker, du markerer nedenfor.',
'services.libraryFilter.libraries' => 'Biblioteker',
'services.libraryFilter.noLibraries' => 'Ingen biblioteker tilgængelige',
- 'addServer.addJellyfinTitle' => 'Tilføj Jellyfin-server',
'addServer.serverUrls' => 'Server-URL\'er',
'addServer.serverUrlsHelper' => 'Du kan angive flere URL\'er adskilt med komma.',
'addServer.findServer' => 'Find server',
- 'addServer.searchingLocalServers' => 'Søger efter lokale Jellyfin-servere...',
- 'addServer.localServers' => 'Lokale Jellyfin-servere',
'addServer.username' => 'Brugernavn',
'addServer.password' => 'Adgangskode',
'addServer.signIn' => 'Log ind',
@@ -3673,15 +3657,11 @@ extension on TranslationsDa {
'addServer.addPlexTitle' => 'Log ind med Plex',
'addServer.pinExpired' => 'PIN-koden udløb før login. Prøv igen.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunne ikke registrere kontoen: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Angiv URL\'en til din Jellyfin-server',
'addServer.addConnectionTitle' => 'Tilføj forbindelse',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Tilføj til ${name}',
'addServer.signInWithPlexCard' => 'Log ind med Plex',
'addServer.signInWithPlexCardSubtitle' => 'Godkend denne enhed. Delte servere tilføjes.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Godkend en Plex-konto. Plex Home-brugere bliver til profiler.',
- 'addServer.connectToJellyfinCard' => 'Forbind til Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Indtast din server-URL, dit brugernavn og din adgangskode.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Log ind på en Jellyfin-server. Serveren knyttes til ${name}.',
'addServer.borrowFromAnotherProfile' => 'Lån fra en anden profil',
'addServer.borrowFromAnotherProfileSubtitle' => 'Genbrug en anden profils forbindelse. PIN-beskyttede profiler kræver en PIN.',
_ => null,
diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart
index 0667d943..99acab24 100644
--- a/lib/i18n/strings_de.g.dart
+++ b/lib/i18n/strings_de.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$de extends Translations$auth$en {
@override String get waitingForAuth => 'Warte auf die Authentifizierung …\nMelde dich über deinen Browser an.';
@override String get useBrowser => 'Browser verwenden';
@override String get or => 'oder';
- @override String get connectToJellyfin => 'Mit Jellyfin verbinden';
@override String get useQuickConnect => 'Quick Connect verwenden';
@override String get quickConnectInstructions => 'Öffne Quick Connect in Jellyfin und gib diesen Code ein.';
@override String get quickConnectWaiting => 'Warte auf Bestätigung…';
@@ -918,8 +917,6 @@ class _Translations$connections$de extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sitzung für ${name} abgelaufen';
@override String sessionExpiredMany({required Object count}) => 'Sitzungen für ${count} Server abgelaufen';
@override String get signInAgain => 'Erneut anmelden';
- @override String get editJellyfinTitle => 'Jellyfin-Verbindung bearbeiten';
- @override String editJellyfinIntro({required Object serverName}) => 'Füge URLs für ${serverName} hinzu oder entferne sie. Plezy verwendet die erreichbare URL mit der geringsten Latenz.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$de extends Translations$addServer$en {
final TranslationsDe _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin-Server hinzufügen';
@override String get serverUrls => 'Server-URLs';
@override String get serverUrlsHelper => 'Mehrere URLs möglich, durch Kommas getrennt.';
@override String get findServer => 'Server finden';
- @override String get searchingLocalServers => 'Suche nach lokalen Jellyfin-Servern …';
- @override String get localServers => 'Lokale Jellyfin-Server';
@override String get username => 'Benutzername';
@override String get password => 'Passwort';
@override String get signIn => 'Anmelden';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$de extends Translations$addServer$en {
@override String get addPlexTitle => 'Mit Plex anmelden';
@override String get pinExpired => 'PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.';
@override String failedToRegisterAccount({required Object error}) => 'Konto konnte nicht registriert werden: ${error}';
- @override String get enterJellyfinUrlError => 'Gib die URL deines Jellyfin-Servers ein';
@override String get addConnectionTitle => 'Verbindung hinzufügen';
@override String addConnectionTitleScoped({required Object name}) => 'Zu ${name} hinzufügen';
@override String get signInWithPlexCard => 'Mit Plex anmelden';
@override String get signInWithPlexCardSubtitle => 'Dieses Gerät autorisieren. Geteilte Server werden hinzugefügt.';
@override String get signInWithPlexCardSubtitleScoped => 'Ein Plex-Konto autorisieren. Home-Benutzer werden zu Profilen.';
- @override String get connectToJellyfinCard => 'Mit Jellyfin verbinden';
- @override String get connectToJellyfinCardSubtitle => 'Gib Server-URL, Benutzername und Passwort ein.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Bei einem Jellyfin-Server anmelden. Wird mit ${name} verknüpft.';
@override String get borrowFromAnotherProfile => 'Von einem anderen Profil ausleihen';
@override String get borrowFromAnotherProfileSubtitle => 'Verbindung eines anderen Profils wiederverwenden. PIN-geschützte Profile erfordern eine PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsDe {
'auth.waitingForAuth' => 'Warte auf die Authentifizierung …\nMelde dich über deinen Browser an.',
'auth.useBrowser' => 'Browser verwenden',
'auth.or' => 'oder',
- 'auth.connectToJellyfin' => 'Mit Jellyfin verbinden',
'auth.useQuickConnect' => 'Quick Connect verwenden',
'auth.quickConnectInstructions' => 'Öffne Quick Connect in Jellyfin und gib diesen Code ein.',
'auth.quickConnectWaiting' => 'Warte auf Bestätigung…',
@@ -2711,9 +2700,9 @@ extension on TranslationsDe {
'videoControls.searchSubtitles' => 'Untertitel suchen',
'videoControls.language' => 'Sprache',
'videoControls.noSubtitlesFound' => 'Keine Untertitel gefunden',
+ 'videoControls.subtitleDownloaded' => 'Untertitel heruntergeladen',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Untertitel heruntergeladen',
'videoControls.subtitleDownloadedNotApplied' => 'Der Untertitel wurde heruntergeladen, konnte aber nicht ausgewählt werden',
'videoControls.subtitleDownloadFailed' => 'Untertitel konnte nicht heruntergeladen werden',
'videoControls.searchLanguages' => 'Sprachen suchen...',
@@ -2869,8 +2858,6 @@ extension on TranslationsDe {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sitzung für ${name} abgelaufen',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sitzungen für ${count} Server abgelaufen',
'connections.signInAgain' => 'Erneut anmelden',
- 'connections.editJellyfinTitle' => 'Jellyfin-Verbindung bearbeiten',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Füge URLs für ${serverName} hinzu oder entferne sie. Plezy verwendet die erreichbare URL mit der geringsten Latenz.',
'discover.title' => 'Entdecken',
'discover.noContentAvailable' => 'Kein Inhalt verfügbar',
'discover.addMediaToLibraries' => 'Medien zur Mediathek hinzufügen',
@@ -3225,11 +3212,11 @@ extension on TranslationsDe {
'watchTogether.failedToCreate' => 'Sitzung konnte nicht erstellt werden',
'watchTogether.failedToJoin' => 'Beitritt zur Sitzung fehlgeschlagen',
'watchTogether.sessionCodeCopied' => 'Sitzungscode in Zwischenablage kopiert',
- _ => null,
- } ?? switch (path) {
'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.joinCurrentPlayback' => 'Aktueller Wiedergabe beitreten',
'watchTogether.joinCurrentPlaybackDescription' => 'Zu dem Inhalt wechseln, den der Host gerade ansieht',
'watchTogether.failedToOpenCurrentPlayback' => 'Aktuelle Wiedergabe konnte nicht geöffnet werden',
@@ -3656,12 +3643,9 @@ extension on TranslationsDe {
'services.libraryFilter.modeHintWhitelist' => 'Nur die unten markierten Mediatheken synchronisieren.',
'services.libraryFilter.libraries' => 'Mediatheken',
'services.libraryFilter.noLibraries' => 'Keine Mediatheken verfügbar',
- 'addServer.addJellyfinTitle' => 'Jellyfin-Server hinzufügen',
'addServer.serverUrls' => 'Server-URLs',
'addServer.serverUrlsHelper' => 'Mehrere URLs möglich, durch Kommas getrennt.',
'addServer.findServer' => 'Server finden',
- 'addServer.searchingLocalServers' => 'Suche nach lokalen Jellyfin-Servern …',
- 'addServer.localServers' => 'Lokale Jellyfin-Server',
'addServer.username' => 'Benutzername',
'addServer.password' => 'Passwort',
'addServer.signIn' => 'Anmelden',
@@ -3673,15 +3657,11 @@ extension on TranslationsDe {
'addServer.addPlexTitle' => 'Mit Plex anmelden',
'addServer.pinExpired' => 'PIN ist vor der Anmeldung abgelaufen. Bitte erneut versuchen.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Konto konnte nicht registriert werden: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Gib die URL deines Jellyfin-Servers ein',
'addServer.addConnectionTitle' => 'Verbindung hinzufügen',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Zu ${name} hinzufügen',
'addServer.signInWithPlexCard' => 'Mit Plex anmelden',
'addServer.signInWithPlexCardSubtitle' => 'Dieses Gerät autorisieren. Geteilte Server werden hinzugefügt.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Ein Plex-Konto autorisieren. Home-Benutzer werden zu Profilen.',
- 'addServer.connectToJellyfinCard' => 'Mit Jellyfin verbinden',
- 'addServer.connectToJellyfinCardSubtitle' => 'Gib Server-URL, Benutzername und Passwort ein.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Bei einem Jellyfin-Server anmelden. Wird mit ${name} verknüpft.',
'addServer.borrowFromAnotherProfile' => 'Von einem anderen Profil ausleihen',
'addServer.borrowFromAnotherProfileSubtitle' => 'Verbindung eines anderen Profils wiederverwenden. PIN-geschützte Profile erfordern eine PIN.',
_ => null,
diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart
index 59a7893b..732842fe 100644
--- a/lib/i18n/strings_en.g.dart
+++ b/lib/i18n/strings_en.g.dart
@@ -136,8 +136,8 @@ class Translations$auth$en {
/// en: 'or'
String get or => 'or';
- /// en: 'Connect to Jellyfin'
- String get connectToJellyfin => 'Connect to Jellyfin';
+ /// en: 'Connect to ${product}'
+ String connectToMediaBrowser({required Object product}) => 'Connect to ${product}';
/// en: 'Use Quick Connect'
String get useQuickConnect => 'Use Quick Connect';
@@ -2413,8 +2413,8 @@ class Translations$profiles$en {
/// en: 'Nothing to borrow yet.'
String get borrowEmpty => 'Nothing to borrow yet.';
- /// en: 'Connect Plex or Jellyfin to another profile first.'
- String get borrowEmptySubtitle => 'Connect Plex or Jellyfin to another profile first.';
+ /// en: 'Connect Plex, Jellyfin, or Emby to another profile first.'
+ String get borrowEmptySubtitle => 'Connect Plex, Jellyfin, or Emby to another profile first.';
/// en: 'Available connections could not be loaded. Try again.'
String get borrowLoadFailed => 'Available connections could not be loaded. Try again.';
@@ -2476,11 +2476,11 @@ class Translations$connections$en {
/// en: 'Add connection'
String get addConnection => 'Add connection';
- /// en: 'Sign in with Plex or connect a Jellyfin server'
- String get addConnectionSubtitleNoProfile => 'Sign in with Plex or connect a Jellyfin server';
+ /// en: 'Sign in with Plex or connect a Jellyfin or Emby server'
+ String get addConnectionSubtitleNoProfile => 'Sign in with Plex or connect a Jellyfin or Emby server';
- /// en: 'Add to ${displayName}: Plex, Jellyfin, or another profile connection'
- String addConnectionSubtitleScoped({required Object displayName}) => 'Add to ${displayName}: Plex, Jellyfin, or another profile connection';
+ /// en: 'Add to ${displayName}: Plex, Jellyfin, Emby, or another profile connection'
+ String addConnectionSubtitleScoped({required Object displayName}) => 'Add to ${displayName}: Plex, Jellyfin, Emby, or another profile connection';
/// en: 'Session expired for ${name}'
String sessionExpiredOne({required Object name}) => 'Session expired for ${name}';
@@ -2491,11 +2491,11 @@ class Translations$connections$en {
/// en: 'Sign in again'
String get signInAgain => 'Sign in again';
- /// en: 'Edit Jellyfin connection'
- String get editJellyfinTitle => 'Edit Jellyfin connection';
+ /// en: 'Edit ${product} connection'
+ String editMediaBrowserTitle({required Object product}) => 'Edit ${product} connection';
/// en: 'Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency.'
- String editJellyfinIntro({required Object serverName}) => 'Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency.';
+ String editMediaBrowserIntro({required Object serverName}) => 'Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency.';
}
// Path: discover
@@ -2778,8 +2778,8 @@ class Translations$about$en {
/// en: 'Version ${version}'
String versionLabel({required Object version}) => 'Version ${version}';
- /// en: 'A beautiful Plex and Jellyfin client for Flutter'
- String get appDescription => 'A beautiful Plex and Jellyfin client for Flutter';
+ /// en: 'A beautiful Plex, Jellyfin, and Emby client for Flutter'
+ String get appDescription => 'A beautiful Plex, Jellyfin, and Emby client for Flutter';
/// en: 'View licenses of third-party libraries'
String get viewLicensesDescription => 'View licenses of third-party libraries';
@@ -4747,8 +4747,8 @@ class Translations$addServer$en {
// Translations
- /// en: 'Add Jellyfin server'
- String get addJellyfinTitle => 'Add Jellyfin server';
+ /// en: 'Add ${product} server'
+ String addMediaBrowserTitle({required Object product}) => 'Add ${product} server';
/// en: 'Server URLs'
String get serverUrls => 'Server URLs';
@@ -4759,11 +4759,11 @@ class Translations$addServer$en {
/// en: 'Find server'
String get findServer => 'Find server';
- /// en: 'Looking for local Jellyfin servers...'
- String get searchingLocalServers => 'Looking for local Jellyfin servers...';
+ /// en: 'Looking for local ${product} servers...'
+ String searchingLocalMediaBrowserServers({required Object product}) => 'Looking for local ${product} servers...';
- /// en: 'Local Jellyfin servers'
- String get localServers => 'Local Jellyfin servers';
+ /// en: 'Local ${product} servers'
+ String localMediaBrowserServers({required Object product}) => 'Local ${product} servers';
/// en: 'Username'
String get username => 'Username';
@@ -4798,8 +4798,8 @@ class Translations$addServer$en {
/// en: 'Failed to register account: ${error}'
String failedToRegisterAccount({required Object error}) => 'Failed to register account: ${error}';
- /// en: 'Enter your Jellyfin server URL'
- String get enterJellyfinUrlError => 'Enter your Jellyfin server URL';
+ /// en: 'Enter your ${product} server URL'
+ String enterMediaBrowserUrlError({required Object product}) => 'Enter your ${product} server URL';
/// en: 'Add connection'
String get addConnectionTitle => 'Add connection';
@@ -4816,14 +4816,14 @@ class Translations$addServer$en {
/// en: 'Authorize a Plex account. Home users become profiles.'
String get signInWithPlexCardSubtitleScoped => 'Authorize a Plex account. Home users become profiles.';
- /// en: 'Connect to Jellyfin'
- String get connectToJellyfinCard => 'Connect to Jellyfin';
+ /// en: 'Connect to ${product}'
+ String connectToMediaBrowserCard({required Object product}) => 'Connect to ${product}';
/// en: 'Enter your server URL, username, and password.'
- String get connectToJellyfinCardSubtitle => 'Enter your server URL, username, and password.';
+ String get connectToMediaBrowserCardSubtitle => 'Enter your server URL, username, and password.';
- /// en: 'Sign in to a Jellyfin server. Binds to ${name}.'
- String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Sign in to a Jellyfin server. Binds to ${name}.';
+ /// en: 'Sign in to your ${product} server. Binds to ${name}.'
+ String connectToMediaBrowserCardSubtitleScoped({required Object product, required Object name}) => 'Sign in to your ${product} server. Binds to ${name}.';
/// en: 'Borrow from another profile'
String get borrowFromAnotherProfile => 'Borrow from another profile';
@@ -6043,7 +6043,7 @@ extension on Translations {
'auth.waitingForAuth' => 'Waiting for authentication...\nSign in from your browser.',
'auth.useBrowser' => 'Use browser',
'auth.or' => 'or',
- 'auth.connectToJellyfin' => 'Connect to Jellyfin',
+ 'auth.connectToMediaBrowser' => ({required Object product}) => 'Connect to ${product}',
'auth.useQuickConnect' => 'Use Quick Connect',
'auth.quickConnectInstructions' => 'Open Quick Connect in Jellyfin and enter this code.',
'auth.quickConnectWaiting' => 'Waiting for approval…',
@@ -6790,7 +6790,7 @@ extension on Translations {
'profiles.borrowAddTo' => ({required Object displayName}) => 'Add to ${displayName}',
'profiles.borrowExplain' => 'Borrow another profile\'s connection. PIN-protected profiles require a PIN.',
'profiles.borrowEmpty' => 'Nothing to borrow yet.',
- 'profiles.borrowEmptySubtitle' => 'Connect Plex or Jellyfin to another profile first.',
+ 'profiles.borrowEmptySubtitle' => 'Connect Plex, Jellyfin, or Emby to another profile first.',
'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.',
'profiles.borrowFromProfile' => ({required Object displayName}) => 'From ${displayName}',
'profiles.borrowConnectionBorrowed' => 'Connection borrowed.',
@@ -6808,13 +6808,13 @@ extension on Translations {
'profiles.pinsDontMatch' => 'PINs don\'t match',
'connections.sectionTitle' => 'Connections',
'connections.addConnection' => 'Add connection',
- 'connections.addConnectionSubtitleNoProfile' => 'Sign in with Plex or connect a Jellyfin server',
- 'connections.addConnectionSubtitleScoped' => ({required Object displayName}) => 'Add to ${displayName}: Plex, Jellyfin, or another profile connection',
+ 'connections.addConnectionSubtitleNoProfile' => 'Sign in with Plex or connect a Jellyfin or Emby server',
+ 'connections.addConnectionSubtitleScoped' => ({required Object displayName}) => 'Add to ${displayName}: Plex, Jellyfin, Emby, or another profile connection',
'connections.sessionExpiredOne' => ({required Object name}) => 'Session expired for ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Session expired for ${count} servers',
'connections.signInAgain' => 'Sign in again',
- 'connections.editJellyfinTitle' => 'Edit Jellyfin connection',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency.',
+ 'connections.editMediaBrowserTitle' => ({required Object product}) => 'Edit ${product} connection',
+ 'connections.editMediaBrowserIntro' => ({required Object serverName}) => 'Add or remove URLs for ${serverName}. Plezy will use the reachable URL with the lowest latency.',
'discover.title' => 'Discover',
'discover.noContentAvailable' => 'No content available',
'discover.addMediaToLibraries' => 'Add some media to your libraries',
@@ -6936,7 +6936,7 @@ extension on Translations {
'about.title' => 'About',
'about.openSourceLicenses' => 'Open Source Licenses',
'about.versionLabel' => ({required Object version}) => 'Version ${version}',
- 'about.appDescription' => 'A beautiful Plex and Jellyfin client for Flutter',
+ 'about.appDescription' => 'A beautiful Plex, Jellyfin, and Emby client for Flutter',
'about.viewLicensesDescription' => 'View licenses of third-party libraries',
'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'No servers found for ${username} (${email})',
'serverSelection.failedToLoadServers' => ({required Object error}) => 'Failed to load servers: ${error}',
@@ -7744,12 +7744,12 @@ extension on Translations {
'services.libraryFilter.modeHintWhitelist' => 'Sync only the libraries checked below.',
'services.libraryFilter.libraries' => 'Libraries',
'services.libraryFilter.noLibraries' => 'No libraries available',
- 'addServer.addJellyfinTitle' => 'Add Jellyfin server',
+ 'addServer.addMediaBrowserTitle' => ({required Object product}) => 'Add ${product} server',
'addServer.serverUrls' => 'Server URLs',
'addServer.serverUrlsHelper' => 'Multiple URLs allowed, separated by commas.',
'addServer.findServer' => 'Find server',
- 'addServer.searchingLocalServers' => 'Looking for local Jellyfin servers...',
- 'addServer.localServers' => 'Local Jellyfin servers',
+ 'addServer.searchingLocalMediaBrowserServers' => ({required Object product}) => 'Looking for local ${product} servers...',
+ 'addServer.localMediaBrowserServers' => ({required Object product}) => 'Local ${product} servers',
'addServer.username' => 'Username',
'addServer.password' => 'Password',
'addServer.signIn' => 'Sign in',
@@ -7761,15 +7761,15 @@ extension on Translations {
'addServer.addPlexTitle' => 'Sign in with Plex',
'addServer.pinExpired' => 'PIN expired before sign-in. Please try again.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Failed to register account: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Enter your Jellyfin server URL',
+ 'addServer.enterMediaBrowserUrlError' => ({required Object product}) => 'Enter your ${product} server URL',
'addServer.addConnectionTitle' => 'Add connection',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Add to ${name}',
'addServer.signInWithPlexCard' => 'Sign in with Plex',
'addServer.signInWithPlexCardSubtitle' => 'Authorize this device. Shared servers are added.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Authorize a Plex account. Home users become profiles.',
- 'addServer.connectToJellyfinCard' => 'Connect to Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Enter your server URL, username, and password.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Sign in to a Jellyfin server. Binds to ${name}.',
+ 'addServer.connectToMediaBrowserCard' => ({required Object product}) => 'Connect to ${product}',
+ 'addServer.connectToMediaBrowserCardSubtitle' => 'Enter your server URL, username, and password.',
+ 'addServer.connectToMediaBrowserCardSubtitleScoped' => ({required Object product, required Object name}) => 'Sign in to your ${product} server. Binds to ${name}.',
'addServer.borrowFromAnotherProfile' => 'Borrow from another profile',
'addServer.borrowFromAnotherProfileSubtitle' => 'Reuse another profile\'s connection. PIN-protected profiles require a PIN.',
_ => null,
diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart
index ff331fff..2971ee74 100644
--- a/lib/i18n/strings_es.g.dart
+++ b/lib/i18n/strings_es.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$es extends Translations$auth$en {
@override String get waitingForAuth => 'Esperando autenticación...\nInicia sesión desde tu navegador.';
@override String get useBrowser => 'Usar navegador';
@override String get or => 'o';
- @override String get connectToJellyfin => 'Conectar a Jellyfin';
@override String get useQuickConnect => 'Usar Quick Connect';
@override String get quickConnectInstructions => 'Abre Quick Connect en Jellyfin e introduce este código.';
@override String get quickConnectWaiting => 'Esperando aprobación…';
@@ -918,8 +917,6 @@ class _Translations$connections$es extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sesión caducada para ${name}';
@override String sessionExpiredMany({required Object count}) => 'Sesión caducada para ${count} servidores';
@override String get signInAgain => 'Iniciar sesión de nuevo';
- @override String get editJellyfinTitle => 'Editar conexión de Jellyfin';
- @override String editJellyfinIntro({required Object serverName}) => 'Añade o elimina direcciones URL para ${serverName}. Plezy usará la dirección accesible con menor latencia.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$es extends Translations$addServer$en {
final TranslationsEs _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Añadir servidor Jellyfin';
@override String get serverUrls => 'Direcciones URL del servidor';
@override String get serverUrlsHelper => 'Se permiten varias URL, separadas por comas.';
@override String get findServer => 'Buscar servidor';
- @override String get searchingLocalServers => 'Buscando servidores Jellyfin locales...';
- @override String get localServers => 'Servidores Jellyfin locales';
@override String get username => 'Usuario';
@override String get password => 'Contraseña';
@override String get signIn => 'Iniciar sesión';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$es extends Translations$addServer$en {
@override String get addPlexTitle => 'Iniciar sesión con Plex';
@override String get pinExpired => 'El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.';
@override String failedToRegisterAccount({required Object error}) => 'No se pudo registrar la cuenta: ${error}';
- @override String get enterJellyfinUrlError => 'Introduce la URL de tu servidor Jellyfin';
@override String get addConnectionTitle => 'Añadir conexión';
@override String addConnectionTitleScoped({required Object name}) => 'Añadir a ${name}';
@override String get signInWithPlexCard => 'Iniciar sesión con Plex';
@override String get signInWithPlexCardSubtitle => 'Autoriza este dispositivo. Se añaden servidores compartidos.';
@override String get signInWithPlexCardSubtitleScoped => 'Autoriza una cuenta Plex. Los usuarios de Home se convierten en perfiles.';
- @override String get connectToJellyfinCard => 'Conectar a Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Introduce la URL del servidor, usuario y contraseña.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Inicia sesión en un servidor Jellyfin. Se vincula a ${name}.';
@override String get borrowFromAnotherProfile => 'Tomar prestado de otro perfil';
@override String get borrowFromAnotherProfileSubtitle => 'Reutiliza la conexión de otro perfil. Los perfiles protegidos con PIN requieren un PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsEs {
'auth.waitingForAuth' => 'Esperando autenticación...\nInicia sesión desde tu navegador.',
'auth.useBrowser' => 'Usar navegador',
'auth.or' => 'o',
- 'auth.connectToJellyfin' => 'Conectar a Jellyfin',
'auth.useQuickConnect' => 'Usar Quick Connect',
'auth.quickConnectInstructions' => 'Abre Quick Connect en Jellyfin e introduce este código.',
'auth.quickConnectWaiting' => 'Esperando aprobación…',
@@ -2711,9 +2700,9 @@ extension on TranslationsEs {
'videoControls.searchSubtitles' => 'Buscar subtítulos',
'videoControls.language' => 'Idioma',
'videoControls.noSubtitlesFound' => 'No se encontraron subtítulos',
+ 'videoControls.subtitleDownloaded' => 'Subtítulo descargado',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Subtítulo descargado',
'videoControls.subtitleDownloadedNotApplied' => 'El subtítulo se descargó, pero no se pudo seleccionar',
'videoControls.subtitleDownloadFailed' => 'Error al descargar subtítulo',
'videoControls.searchLanguages' => 'Buscar idiomas...',
@@ -2869,8 +2858,6 @@ extension on TranslationsEs {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sesión caducada para ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sesión caducada para ${count} servidores',
'connections.signInAgain' => 'Iniciar sesión de nuevo',
- 'connections.editJellyfinTitle' => 'Editar conexión de Jellyfin',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Añade o elimina direcciones URL para ${serverName}. Plezy usará la dirección accesible con menor latencia.',
'discover.title' => 'Descubrir',
'discover.noContentAvailable' => 'No hay contenido disponible',
'discover.addMediaToLibraries' => 'Añade contenido a tus bibliotecas',
@@ -3225,11 +3212,11 @@ extension on TranslationsEs {
'watchTogether.failedToCreate' => 'Error al crear la sesión',
'watchTogether.failedToJoin' => 'Error al unirse a la sesión',
'watchTogether.sessionCodeCopied' => 'Código de sesión copiado al portapapeles',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3656,12 +3643,9 @@ extension on TranslationsEs {
'services.libraryFilter.modeHintWhitelist' => 'Sincronizar solo las bibliotecas seleccionadas abajo.',
'services.libraryFilter.libraries' => 'Bibliotecas',
'services.libraryFilter.noLibraries' => 'No hay bibliotecas disponibles',
- 'addServer.addJellyfinTitle' => 'Añadir servidor Jellyfin',
'addServer.serverUrls' => 'Direcciones URL del servidor',
'addServer.serverUrlsHelper' => 'Se permiten varias URL, separadas por comas.',
'addServer.findServer' => 'Buscar servidor',
- 'addServer.searchingLocalServers' => 'Buscando servidores Jellyfin locales...',
- 'addServer.localServers' => 'Servidores Jellyfin locales',
'addServer.username' => 'Usuario',
'addServer.password' => 'Contraseña',
'addServer.signIn' => 'Iniciar sesión',
@@ -3673,15 +3657,11 @@ extension on TranslationsEs {
'addServer.addPlexTitle' => 'Iniciar sesión con Plex',
'addServer.pinExpired' => 'El PIN caducó antes de iniciar sesión. Inténtalo de nuevo.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'No se pudo registrar la cuenta: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Introduce la URL de tu servidor Jellyfin',
'addServer.addConnectionTitle' => 'Añadir conexión',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Añadir a ${name}',
'addServer.signInWithPlexCard' => 'Iniciar sesión con Plex',
'addServer.signInWithPlexCardSubtitle' => 'Autoriza este dispositivo. Se añaden servidores compartidos.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Autoriza una cuenta Plex. Los usuarios de Home se convierten en perfiles.',
- 'addServer.connectToJellyfinCard' => 'Conectar a Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Introduce la URL del servidor, usuario y contraseña.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Inicia sesión en un servidor Jellyfin. Se vincula a ${name}.',
'addServer.borrowFromAnotherProfile' => 'Tomar prestado de otro perfil',
'addServer.borrowFromAnotherProfileSubtitle' => 'Reutiliza la conexión de otro perfil. Los perfiles protegidos con PIN requieren un PIN.',
_ => null,
diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart
index ada1cf80..f6be83e3 100644
--- a/lib/i18n/strings_fr.g.dart
+++ b/lib/i18n/strings_fr.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$fr extends Translations$auth$en {
@override String get waitingForAuth => 'En attente d\'authentification...\nConnectez-vous depuis votre navigateur.';
@override String get useBrowser => 'Utiliser le navigateur';
@override String get or => 'ou';
- @override String get connectToJellyfin => 'Se connecter à Jellyfin';
@override String get useQuickConnect => 'Utiliser Quick Connect';
@override String get quickConnectInstructions => 'Ouvrez Quick Connect dans Jellyfin et saisissez ce code.';
@override String get quickConnectWaiting => 'En attente d\'approbation…';
@@ -918,8 +917,6 @@ class _Translations$connections$fr extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Session expirée pour ${name}';
@override String sessionExpiredMany({required Object count}) => 'Session expirée pour ${count} serveurs';
@override String get signInAgain => 'Se reconnecter';
- @override String get editJellyfinTitle => 'Modifier la connexion Jellyfin';
- @override String editJellyfinIntro({required Object serverName}) => 'Ajoutez ou supprimez des URL pour ${serverName}. Plezy utilisera l\'URL joignable avec la latence la plus faible.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$fr extends Translations$addServer$en {
final TranslationsFr _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Ajouter un serveur Jellyfin';
@override String get serverUrls => 'URL du serveur';
@override String get serverUrlsHelper => 'Plusieurs URL possibles, séparées par des virgules.';
@override String get findServer => 'Rechercher un serveur';
- @override String get searchingLocalServers => 'Recherche de serveurs Jellyfin locaux...';
- @override String get localServers => 'Serveurs Jellyfin locaux';
@override String get username => 'Nom d\'utilisateur';
@override String get password => 'Mot de passe';
@override String get signIn => 'Se connecter';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$fr extends Translations$addServer$en {
@override String get addPlexTitle => 'Se connecter avec Plex';
@override String get pinExpired => 'Le PIN a expiré avant la connexion. Veuillez réessayer.';
@override String failedToRegisterAccount({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}';
- @override String get enterJellyfinUrlError => 'Saisissez l\'URL de votre serveur Jellyfin';
@override String get addConnectionTitle => 'Ajouter une connexion';
@override String addConnectionTitleScoped({required Object name}) => 'Ajouter à ${name}';
@override String get signInWithPlexCard => 'Se connecter avec Plex';
@override String get signInWithPlexCardSubtitle => 'Autorisez cet appareil. Les serveurs partagés sont ajoutés.';
@override String get signInWithPlexCardSubtitleScoped => 'Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.';
- @override String get connectToJellyfinCard => 'Se connecter à Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Saisissez l\'URL du serveur, le nom d\'utilisateur et le mot de passe.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Connectez-vous à un serveur Jellyfin. Cette connexion sera liée à ${name}.';
@override String get borrowFromAnotherProfile => 'Emprunter à un autre profil';
@override String get borrowFromAnotherProfileSubtitle => 'Réutiliser la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsFr {
'auth.waitingForAuth' => 'En attente d\'authentification...\nConnectez-vous depuis votre navigateur.',
'auth.useBrowser' => 'Utiliser le navigateur',
'auth.or' => 'ou',
- 'auth.connectToJellyfin' => 'Se connecter à Jellyfin',
'auth.useQuickConnect' => 'Utiliser Quick Connect',
'auth.quickConnectInstructions' => 'Ouvrez Quick Connect dans Jellyfin et saisissez ce code.',
'auth.quickConnectWaiting' => 'En attente d\'approbation…',
@@ -2711,9 +2700,9 @@ extension on TranslationsFr {
'videoControls.searchSubtitles' => 'Rechercher des sous-titres',
'videoControls.language' => 'Langue',
'videoControls.noSubtitlesFound' => 'Aucun sous-titre trouvé',
+ 'videoControls.subtitleDownloaded' => 'Sous-titre téléchargé',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Sous-titre téléchargé',
'videoControls.subtitleDownloadedNotApplied' => 'Le sous-titre a été téléchargé, mais n’a pas pu être sélectionné',
'videoControls.subtitleDownloadFailed' => 'Échec du téléchargement du sous-titre',
'videoControls.searchLanguages' => 'Rechercher des langues...',
@@ -2869,8 +2858,6 @@ extension on TranslationsFr {
'connections.sessionExpiredOne' => ({required Object name}) => 'Session expirée pour ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Session expirée pour ${count} serveurs',
'connections.signInAgain' => 'Se reconnecter',
- 'connections.editJellyfinTitle' => 'Modifier la connexion Jellyfin',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Ajoutez ou supprimez des URL pour ${serverName}. Plezy utilisera l\'URL joignable avec la latence la plus faible.',
'discover.title' => 'Découvrir',
'discover.noContentAvailable' => 'Aucun contenu disponible',
'discover.addMediaToLibraries' => 'Ajoutez des médias à vos bibliothèques',
@@ -3225,11 +3212,11 @@ extension on TranslationsFr {
'watchTogether.failedToCreate' => 'Échec de la création de la session',
'watchTogether.failedToJoin' => 'Échec de la connexion à la session',
'watchTogether.sessionCodeCopied' => 'Code de session copié dans le presse-papiers',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3656,12 +3643,9 @@ extension on TranslationsFr {
'services.libraryFilter.modeHintWhitelist' => 'Synchroniser uniquement les bibliothèques cochées ci-dessous.',
'services.libraryFilter.libraries' => 'Bibliothèques',
'services.libraryFilter.noLibraries' => 'Aucune bibliothèque disponible',
- 'addServer.addJellyfinTitle' => 'Ajouter un serveur Jellyfin',
'addServer.serverUrls' => 'URL du serveur',
'addServer.serverUrlsHelper' => 'Plusieurs URL possibles, séparées par des virgules.',
'addServer.findServer' => 'Rechercher un serveur',
- 'addServer.searchingLocalServers' => 'Recherche de serveurs Jellyfin locaux...',
- 'addServer.localServers' => 'Serveurs Jellyfin locaux',
'addServer.username' => 'Nom d\'utilisateur',
'addServer.password' => 'Mot de passe',
'addServer.signIn' => 'Se connecter',
@@ -3673,15 +3657,11 @@ extension on TranslationsFr {
'addServer.addPlexTitle' => 'Se connecter avec Plex',
'addServer.pinExpired' => 'Le PIN a expiré avant la connexion. Veuillez réessayer.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}',
- 'addServer.enterJellyfinUrlError' => 'Saisissez l\'URL de votre serveur Jellyfin',
'addServer.addConnectionTitle' => 'Ajouter une connexion',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Ajouter à ${name}',
'addServer.signInWithPlexCard' => 'Se connecter avec Plex',
'addServer.signInWithPlexCardSubtitle' => 'Autorisez cet appareil. Les serveurs partagés sont ajoutés.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.',
- 'addServer.connectToJellyfinCard' => 'Se connecter à Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Saisissez l\'URL du serveur, le nom d\'utilisateur et le mot de passe.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Connectez-vous à un serveur Jellyfin. Cette connexion sera liée à ${name}.',
'addServer.borrowFromAnotherProfile' => 'Emprunter à un autre profil',
'addServer.borrowFromAnotherProfileSubtitle' => 'Réutiliser la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.',
_ => null,
diff --git a/lib/i18n/strings_hu.g.dart b/lib/i18n/strings_hu.g.dart
index f2b257f1..dedf1eb9 100644
--- a/lib/i18n/strings_hu.g.dart
+++ b/lib/i18n/strings_hu.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$hu extends Translations$auth$en {
@override String get waitingForAuth => 'Várakozás a hitelesítésre...\nJelentkezz be a böngésződben.';
@override String get useBrowser => 'Böngésző használata';
@override String get or => 'vagy';
- @override String get connectToJellyfin => 'Csatlakozás Jellyfinhez';
@override String get useQuickConnect => 'Quick Connect használata';
@override String get quickConnectInstructions => 'Nyisd meg a Quick Connect-et a Jellyfinben, és add meg ezt a kódot.';
@override String get quickConnectWaiting => 'Várakozás a jóváhagyásra…';
@@ -918,8 +917,6 @@ class _Translations$connections$hu extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'A(z) ${name} munkamenete lejárt';
@override String sessionExpiredMany({required Object count}) => '${count} szerver munkamenete lejárt';
@override String get signInAgain => 'Bejelentkezés újra';
- @override String get editJellyfinTitle => 'Jellyfin kapcsolat szerkesztése';
- @override String editJellyfinIntro({required Object serverName}) => 'URL-ek hozzáadása vagy eltávolítása ehhez: ${serverName}. A Plezy a legalacsonyabb késleltetésű, elérhető URL-t fogja használni.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$hu extends Translations$addServer$en {
final TranslationsHu _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin szerver hozzáadása';
@override String get serverUrls => 'Szerver URL-címei';
@override String get serverUrlsHelper => 'Több URL is megadható, vesszővel elválasztva.';
@override String get findServer => 'Szerver keresése';
- @override String get searchingLocalServers => 'Helyi Jellyfin-szerverek keresése...';
- @override String get localServers => 'Helyi Jellyfin-szerverek';
@override String get username => 'Felhasználónév';
@override String get password => 'Jelszó';
@override String get signIn => 'Bejelentkezés';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$hu extends Translations$addServer$en {
@override String get addPlexTitle => 'Bejelentkezés Plexszel';
@override String get pinExpired => 'A PIN-kód a bejelentkezés előtt lejárt. Próbáld újra.';
@override String failedToRegisterAccount({required Object error}) => 'Nem sikerült a fiók regisztrálása: ${error}';
- @override String get enterJellyfinUrlError => 'Add meg a Jellyfin szervered URL-jét';
@override String get addConnectionTitle => 'Kapcsolat hozzáadása';
@override String addConnectionTitleScoped({required Object name}) => 'Hozzáadás a következőhöz: ${name}';
@override String get signInWithPlexCard => 'Bejelentkezés Plexszel';
@override String get signInWithPlexCardSubtitle => 'Eszköz engedélyezése. A megosztott szerverek hozzáadásra kerülnek.';
@override String get signInWithPlexCardSubtitleScoped => 'Plex-fiók engedélyezése. A Plex Home-felhasználókból profilok lesznek.';
- @override String get connectToJellyfinCard => 'Csatlakozás Jellyfinhez';
- @override String get connectToJellyfinCardSubtitle => 'Add meg a szerver URL-jét, felhasználónevedet és jelszavadat.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Bejelentkezés egy Jellyfin-szerverre. Hozzárendelés ehhez: ${name}.';
@override String get borrowFromAnotherProfile => 'Kapcsolat használata másik profilból';
@override String get borrowFromAnotherProfileSubtitle => 'Egy másik profil kapcsolatának használata. A PIN-kóddal védett profilokhoz PIN-kód szükséges.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsHu {
'auth.waitingForAuth' => 'Várakozás a hitelesítésre...\nJelentkezz be a böngésződben.',
'auth.useBrowser' => 'Böngésző használata',
'auth.or' => 'vagy',
- 'auth.connectToJellyfin' => 'Csatlakozás Jellyfinhez',
'auth.useQuickConnect' => 'Quick Connect használata',
'auth.quickConnectInstructions' => 'Nyisd meg a Quick Connect-et a Jellyfinben, és add meg ezt a kódot.',
'auth.quickConnectWaiting' => 'Várakozás a jóváhagyásra…',
@@ -2711,9 +2700,9 @@ extension on TranslationsHu {
'videoControls.searchSubtitles' => 'Feliratok keresése',
'videoControls.language' => 'Nyelv',
'videoControls.noSubtitlesFound' => 'Nem találhatók feliratok',
+ 'videoControls.subtitleDownloaded' => 'Felirat letöltve',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Felirat letöltve',
'videoControls.subtitleDownloadedNotApplied' => 'Felirat letöltve, de nem sikerült kiválasztani',
'videoControls.subtitleDownloadFailed' => 'Nem sikerült a felirat letöltése',
'videoControls.searchLanguages' => 'Nyelvek keresése...',
@@ -2869,8 +2858,6 @@ extension on TranslationsHu {
'connections.sessionExpiredOne' => ({required Object name}) => 'A(z) ${name} munkamenete lejárt',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} szerver munkamenete lejárt',
'connections.signInAgain' => 'Bejelentkezés újra',
- 'connections.editJellyfinTitle' => 'Jellyfin kapcsolat szerkesztése',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'URL-ek hozzáadása vagy eltávolítása ehhez: ${serverName}. A Plezy a legalacsonyabb késleltetésű, elérhető URL-t fogja használni.',
'discover.title' => 'Felfedezés',
'discover.noContentAvailable' => 'Nincs elérhető tartalom',
'discover.addMediaToLibraries' => 'Adj hozzá médiát a könyvtáraidhoz',
@@ -3225,11 +3212,11 @@ extension on TranslationsHu {
'watchTogether.failedToCreate' => 'Nem sikerült a munkamenet létrehozása',
'watchTogether.failedToJoin' => 'Nem sikerült csatlakozni a munkamenethez',
'watchTogether.sessionCodeCopied' => 'A munkamenetkód a vágólapra másolva',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3656,12 +3643,9 @@ extension on TranslationsHu {
'services.libraryFilter.modeHintWhitelist' => 'Csak az alább bejelölt könyvtárak szinkronizálása.',
'services.libraryFilter.libraries' => 'Könyvtárak',
'services.libraryFilter.noLibraries' => 'Nincsenek elérhető könyvtárak',
- 'addServer.addJellyfinTitle' => 'Jellyfin szerver hozzáadása',
'addServer.serverUrls' => 'Szerver URL-címei',
'addServer.serverUrlsHelper' => 'Több URL is megadható, vesszővel elválasztva.',
'addServer.findServer' => 'Szerver keresése',
- 'addServer.searchingLocalServers' => 'Helyi Jellyfin-szerverek keresése...',
- 'addServer.localServers' => 'Helyi Jellyfin-szerverek',
'addServer.username' => 'Felhasználónév',
'addServer.password' => 'Jelszó',
'addServer.signIn' => 'Bejelentkezés',
@@ -3673,15 +3657,11 @@ extension on TranslationsHu {
'addServer.addPlexTitle' => 'Bejelentkezés Plexszel',
'addServer.pinExpired' => 'A PIN-kód a bejelentkezés előtt lejárt. Próbáld újra.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Nem sikerült a fiók regisztrálása: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Add meg a Jellyfin szervered URL-jét',
'addServer.addConnectionTitle' => 'Kapcsolat hozzáadása',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Hozzáadás a következőhöz: ${name}',
'addServer.signInWithPlexCard' => 'Bejelentkezés Plexszel',
'addServer.signInWithPlexCardSubtitle' => 'Eszköz engedélyezése. A megosztott szerverek hozzáadásra kerülnek.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Plex-fiók engedélyezése. A Plex Home-felhasználókból profilok lesznek.',
- 'addServer.connectToJellyfinCard' => 'Csatlakozás Jellyfinhez',
- 'addServer.connectToJellyfinCardSubtitle' => 'Add meg a szerver URL-jét, felhasználónevedet és jelszavadat.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Bejelentkezés egy Jellyfin-szerverre. Hozzárendelés ehhez: ${name}.',
'addServer.borrowFromAnotherProfile' => 'Kapcsolat használata másik profilból',
'addServer.borrowFromAnotherProfileSubtitle' => 'Egy másik profil kapcsolatának használata. A PIN-kóddal védett profilokhoz PIN-kód szükséges.',
_ => null,
diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart
index cb4ed4b7..9b28f29b 100644
--- a/lib/i18n/strings_it.g.dart
+++ b/lib/i18n/strings_it.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$it extends Translations$auth$en {
@override String get waitingForAuth => 'In attesa di autenticazione...\nAccedi dal browser.';
@override String get useBrowser => 'Usa il browser';
@override String get or => 'o';
- @override String get connectToJellyfin => 'Connettiti a Jellyfin';
@override String get useQuickConnect => 'Usa Quick Connect';
@override String get quickConnectInstructions => 'Apri Quick Connect in Jellyfin e inserisci questo codice.';
@override String get quickConnectWaiting => 'In attesa di approvazione…';
@@ -918,8 +917,6 @@ class _Translations$connections$it extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sessione scaduta per ${name}';
@override String sessionExpiredMany({required Object count}) => 'Sessione scaduta per ${count} server';
@override String get signInAgain => 'Accedi di nuovo';
- @override String get editJellyfinTitle => 'Modifica connessione Jellyfin';
- @override String editJellyfinIntro({required Object serverName}) => 'Aggiungi o rimuovi URL per ${serverName}. Plezy userà l\'URL raggiungibile con la latenza più bassa.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$it extends Translations$addServer$en {
final TranslationsIt _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Aggiungi server Jellyfin';
@override String get serverUrls => 'URL del server';
@override String get serverUrlsHelper => 'Sono consentiti più URL, separati da virgole.';
@override String get findServer => 'Trova il server';
- @override String get searchingLocalServers => 'Ricerca dei server Jellyfin locali...';
- @override String get localServers => 'Server Jellyfin locali';
@override String get username => 'Nome utente';
@override String get password => 'Password';
@override String get signIn => 'Accedi';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$it extends Translations$addServer$en {
@override String get addPlexTitle => 'Accedi con Plex';
@override String get pinExpired => 'PIN scaduto prima dell\'accesso. Riprova.';
@override String failedToRegisterAccount({required Object error}) => 'Registrazione account non riuscita: ${error}';
- @override String get enterJellyfinUrlError => 'Inserisci l\'URL del tuo server Jellyfin';
@override String get addConnectionTitle => 'Aggiungi connessione';
@override String addConnectionTitleScoped({required Object name}) => 'Aggiungi a ${name}';
@override String get signInWithPlexCard => 'Accedi con Plex';
@override String get signInWithPlexCardSubtitle => 'Autorizza questo dispositivo. I server condivisi vengono aggiunti.';
@override String get signInWithPlexCardSubtitleScoped => 'Autorizza un account Plex. Gli utenti Home diventano profili.';
- @override String get connectToJellyfinCard => 'Connettiti a Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Inserisci l\'URL del server, il nome utente e la password.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Accedi a un server Jellyfin. Verrà associato a ${name}.';
@override String get borrowFromAnotherProfile => 'Prendi in prestito da un altro profilo';
@override String get borrowFromAnotherProfileSubtitle => 'Riutilizza la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsIt {
'auth.waitingForAuth' => 'In attesa di autenticazione...\nAccedi dal browser.',
'auth.useBrowser' => 'Usa il browser',
'auth.or' => 'o',
- 'auth.connectToJellyfin' => 'Connettiti a Jellyfin',
'auth.useQuickConnect' => 'Usa Quick Connect',
'auth.quickConnectInstructions' => 'Apri Quick Connect in Jellyfin e inserisci questo codice.',
'auth.quickConnectWaiting' => 'In attesa di approvazione…',
@@ -2711,9 +2700,9 @@ extension on TranslationsIt {
'videoControls.searchSubtitles' => 'Cerca sottotitoli',
'videoControls.language' => 'Lingua',
'videoControls.noSubtitlesFound' => 'Nessun sottotitolo trovato',
+ 'videoControls.subtitleDownloaded' => 'Sottotitolo scaricato',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Sottotitolo scaricato',
'videoControls.subtitleDownloadedNotApplied' => 'Il sottotitolo è stato scaricato, ma non è stato possibile selezionarlo',
'videoControls.subtitleDownloadFailed' => 'Impossibile scaricare il sottotitolo',
'videoControls.searchLanguages' => 'Cerca lingue...',
@@ -2869,8 +2858,6 @@ extension on TranslationsIt {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sessione scaduta per ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sessione scaduta per ${count} server',
'connections.signInAgain' => 'Accedi di nuovo',
- 'connections.editJellyfinTitle' => 'Modifica connessione Jellyfin',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Aggiungi o rimuovi URL per ${serverName}. Plezy userà l\'URL raggiungibile con la latenza più bassa.',
'discover.title' => 'Esplora',
'discover.noContentAvailable' => 'Nessun contenuto disponibile',
'discover.addMediaToLibraries' => 'Aggiungi contenuti multimediali alle tue librerie',
@@ -3225,11 +3212,11 @@ extension on TranslationsIt {
'watchTogether.failedToCreate' => 'Impossibile creare la sessione',
'watchTogether.failedToJoin' => 'Impossibile unirsi alla sessione',
'watchTogether.sessionCodeCopied' => 'Codice della sessione copiato negli appunti',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3656,12 +3643,9 @@ extension on TranslationsIt {
'services.libraryFilter.modeHintWhitelist' => 'Sincronizza solo le librerie selezionate qui sotto.',
'services.libraryFilter.libraries' => 'Librerie',
'services.libraryFilter.noLibraries' => 'Nessuna libreria disponibile',
- 'addServer.addJellyfinTitle' => 'Aggiungi server Jellyfin',
'addServer.serverUrls' => 'URL del server',
'addServer.serverUrlsHelper' => 'Sono consentiti più URL, separati da virgole.',
'addServer.findServer' => 'Trova il server',
- 'addServer.searchingLocalServers' => 'Ricerca dei server Jellyfin locali...',
- 'addServer.localServers' => 'Server Jellyfin locali',
'addServer.username' => 'Nome utente',
'addServer.password' => 'Password',
'addServer.signIn' => 'Accedi',
@@ -3673,15 +3657,11 @@ extension on TranslationsIt {
'addServer.addPlexTitle' => 'Accedi con Plex',
'addServer.pinExpired' => 'PIN scaduto prima dell\'accesso. Riprova.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Registrazione account non riuscita: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Inserisci l\'URL del tuo server Jellyfin',
'addServer.addConnectionTitle' => 'Aggiungi connessione',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Aggiungi a ${name}',
'addServer.signInWithPlexCard' => 'Accedi con Plex',
'addServer.signInWithPlexCardSubtitle' => 'Autorizza questo dispositivo. I server condivisi vengono aggiunti.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Autorizza un account Plex. Gli utenti Home diventano profili.',
- 'addServer.connectToJellyfinCard' => 'Connettiti a Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Inserisci l\'URL del server, il nome utente e la password.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Accedi a un server Jellyfin. Verrà associato a ${name}.',
'addServer.borrowFromAnotherProfile' => 'Prendi in prestito da un altro profilo',
'addServer.borrowFromAnotherProfileSubtitle' => 'Riutilizza la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN.',
_ => null,
diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart
index 8adc8b1b..9edf58d2 100644
--- a/lib/i18n/strings_ja.g.dart
+++ b/lib/i18n/strings_ja.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$ja extends Translations$auth$en {
@override String get waitingForAuth => '認証を待っています…\nブラウザでサインインしてください。';
@override String get useBrowser => 'ブラウザを使用';
@override String get or => 'または';
- @override String get connectToJellyfin => 'Jellyfinに接続';
@override String get useQuickConnect => 'Quick Connect を使う';
@override String get quickConnectInstructions => 'JellyfinでQuick Connectを開き、このコードを入力してください。';
@override String get quickConnectWaiting => '承認を待っています…';
@@ -917,8 +916,6 @@ class _Translations$connections$ja extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => '${name} のセッションの有効期限が切れました';
@override String sessionExpiredMany({required Object count}) => '${count} 台のサーバーのセッションの有効期限が切れました';
@override String get signInAgain => '再度サインイン';
- @override String get editJellyfinTitle => 'Jellyfin接続を編集';
- @override String editJellyfinIntro({required Object serverName}) => '${serverName}のURLを追加または削除します。Plezyは接続可能なURLのうち遅延が最も少ないものを使用します。';
}
// Path: discover
@@ -1800,12 +1797,9 @@ class _Translations$addServer$ja extends Translations$addServer$en {
final TranslationsJa _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfinサーバーを追加';
@override String get serverUrls => 'サーバーURL';
@override String get serverUrlsHelper => '複数のURLをカンマ区切りで入力できます。';
@override String get findServer => 'サーバーを検索';
- @override String get searchingLocalServers => 'ローカルのJellyfinサーバーを検索中…';
- @override String get localServers => 'ローカルのJellyfinサーバー';
@override String get username => 'ユーザー名';
@override String get password => 'パスワード';
@override String get signIn => 'サインイン';
@@ -1817,15 +1811,11 @@ class _Translations$addServer$ja extends Translations$addServer$en {
@override String get addPlexTitle => 'Plexでサインイン';
@override String get pinExpired => 'サインイン前にPINの有効期限が切れました。もう一度お試しください。';
@override String failedToRegisterAccount({required Object error}) => 'アカウントの登録に失敗しました: ${error}';
- @override String get enterJellyfinUrlError => 'JellyfinサーバーのURLを入力してください';
@override String get addConnectionTitle => '接続を追加';
@override String addConnectionTitleScoped({required Object name}) => '${name}に追加';
@override String get signInWithPlexCard => 'Plexでサインイン';
@override String get signInWithPlexCardSubtitle => 'このデバイスを承認します。共有サーバーが追加されます。';
@override String get signInWithPlexCardSubtitleScoped => 'Plexアカウントを承認します。Homeユーザーはプロフィールになります。';
- @override String get connectToJellyfinCard => 'Jellyfinに接続';
- @override String get connectToJellyfinCardSubtitle => 'サーバーURL、ユーザー名、パスワードを入力してください。';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Jellyfinサーバーにサインインします。${name}にひも付けられます。';
@override String get borrowFromAnotherProfile => '別のプロフィールの接続を利用';
@override String get borrowFromAnotherProfileSubtitle => '別のプロフィールの接続を再利用します。PINで保護されたプロフィールにはPINが必要です。';
}
@@ -2205,7 +2195,6 @@ extension on TranslationsJa {
'auth.waitingForAuth' => '認証を待っています…\nブラウザでサインインしてください。',
'auth.useBrowser' => 'ブラウザを使用',
'auth.or' => 'または',
- 'auth.connectToJellyfin' => 'Jellyfinに接続',
'auth.useQuickConnect' => 'Quick Connect を使う',
'auth.quickConnectInstructions' => 'JellyfinでQuick Connectを開き、このコードを入力してください。',
'auth.quickConnectWaiting' => '承認を待っています…',
@@ -2708,9 +2697,9 @@ extension on TranslationsJa {
'videoControls.searchSubtitles' => '字幕を検索',
'videoControls.language' => '言語',
'videoControls.noSubtitlesFound' => '字幕が見つかりません',
+ 'videoControls.subtitleDownloaded' => '字幕をダウンロードしました',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => '字幕をダウンロードしました',
'videoControls.subtitleDownloadedNotApplied' => '字幕はダウンロードされましたが、選択できませんでした',
'videoControls.subtitleDownloadFailed' => '字幕のダウンロードに失敗しました',
'videoControls.searchLanguages' => '言語を検索…',
@@ -2866,8 +2855,6 @@ extension on TranslationsJa {
'connections.sessionExpiredOne' => ({required Object name}) => '${name} のセッションの有効期限が切れました',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} 台のサーバーのセッションの有効期限が切れました',
'connections.signInAgain' => '再度サインイン',
- 'connections.editJellyfinTitle' => 'Jellyfin接続を編集',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName}のURLを追加または削除します。Plezyは接続可能なURLのうち遅延が最も少ないものを使用します。',
'discover.title' => '探す',
'discover.noContentAvailable' => 'コンテンツがありません',
'discover.addMediaToLibraries' => 'ライブラリにメディアを追加してください',
@@ -3222,11 +3209,11 @@ extension on TranslationsJa {
'watchTogether.failedToCreate' => 'セッションの作成に失敗しました',
'watchTogether.failedToJoin' => 'セッションへの参加に失敗しました',
'watchTogether.sessionCodeCopied' => 'セッションコードをクリップボードにコピーしました',
- _ => null,
- } ?? switch (path) {
'watchTogether.relayUnreachable' => 'リレーサーバーに接続できません。ISPによるブロックのため「一緒に見る」を利用できない可能性があります。',
'watchTogether.reconnectingToHost' => 'ホストに再接続中…',
'watchTogether.currentPlayback' => '現在の再生',
+ _ => null,
+ } ?? switch (path) {
'watchTogether.joinCurrentPlayback' => '現在の再生に参加',
'watchTogether.joinCurrentPlaybackDescription' => 'ホストが現在視聴中のコンテンツに戻る',
'watchTogether.failedToOpenCurrentPlayback' => '現在の再生を開けませんでした',
@@ -3653,12 +3640,9 @@ extension on TranslationsJa {
'services.libraryFilter.modeHintWhitelist' => '下でチェックしたライブラリのみ同期します。',
'services.libraryFilter.libraries' => 'ライブラリ',
'services.libraryFilter.noLibraries' => '利用できるライブラリがありません',
- 'addServer.addJellyfinTitle' => 'Jellyfinサーバーを追加',
'addServer.serverUrls' => 'サーバーURL',
'addServer.serverUrlsHelper' => '複数のURLをカンマ区切りで入力できます。',
'addServer.findServer' => 'サーバーを検索',
- 'addServer.searchingLocalServers' => 'ローカルのJellyfinサーバーを検索中…',
- 'addServer.localServers' => 'ローカルのJellyfinサーバー',
'addServer.username' => 'ユーザー名',
'addServer.password' => 'パスワード',
'addServer.signIn' => 'サインイン',
@@ -3670,15 +3654,11 @@ extension on TranslationsJa {
'addServer.addPlexTitle' => 'Plexでサインイン',
'addServer.pinExpired' => 'サインイン前にPINの有効期限が切れました。もう一度お試しください。',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'アカウントの登録に失敗しました: ${error}',
- 'addServer.enterJellyfinUrlError' => 'JellyfinサーバーのURLを入力してください',
'addServer.addConnectionTitle' => '接続を追加',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name}に追加',
'addServer.signInWithPlexCard' => 'Plexでサインイン',
'addServer.signInWithPlexCardSubtitle' => 'このデバイスを承認します。共有サーバーが追加されます。',
'addServer.signInWithPlexCardSubtitleScoped' => 'Plexアカウントを承認します。Homeユーザーはプロフィールになります。',
- 'addServer.connectToJellyfinCard' => 'Jellyfinに接続',
- 'addServer.connectToJellyfinCardSubtitle' => 'サーバーURL、ユーザー名、パスワードを入力してください。',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Jellyfinサーバーにサインインします。${name}にひも付けられます。',
'addServer.borrowFromAnotherProfile' => '別のプロフィールの接続を利用',
'addServer.borrowFromAnotherProfileSubtitle' => '別のプロフィールの接続を再利用します。PINで保護されたプロフィールにはPINが必要です。',
_ => null,
diff --git a/lib/i18n/strings_kk.g.dart b/lib/i18n/strings_kk.g.dart
index d7596d53..72460908 100644
--- a/lib/i18n/strings_kk.g.dart
+++ b/lib/i18n/strings_kk.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$kk extends Translations$auth$en {
@override String get waitingForAuth => 'Растау күтілуде...\nБраузеріңізден кіріңіз.';
@override String get useBrowser => 'Браузерді пайдалану';
@override String get or => 'немесе';
- @override String get connectToJellyfin => 'Jellyfin-ге қосылу';
@override String get useQuickConnect => 'Жылдам қосылуды пайдалану';
@override String get quickConnectInstructions => 'Jellyfin-де Жылдам қосылуды ашып, осы кодты енгізіңіз.';
@override String get quickConnectWaiting => 'Растау күтілуде…';
@@ -922,8 +921,6 @@ class _Translations$connections$kk extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => '${name} үшін сеанс мерзімі өтті';
@override String sessionExpiredMany({required Object count}) => '${count} сервер үшін сеанс мерзімі өтті';
@override String get signInAgain => 'Қайтадан кіру';
- @override String get editJellyfinTitle => 'Jellyfin қосылымын өңдеу';
- @override String editJellyfinIntro({required Object serverName}) => '${serverName} үшін URL мекенжайын қосыңыз немесе өшіріңіз.';
}
// Path: discover
@@ -1814,12 +1811,9 @@ class _Translations$addServer$kk extends Translations$addServer$en {
final TranslationsKk _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin серверін қосу';
@override String get serverUrls => 'Сервер URL-дері';
@override String get serverUrlsHelper => 'Үтірмен бөлінген бірнеше URL мекенжайына рұқсат етіледі.';
@override String get findServer => 'Серверді табу';
- @override String get searchingLocalServers => 'Жергілікті Jellyfin серверлері ізделуде...';
- @override String get localServers => 'Жергілікті Jellyfin серверлері';
@override String get username => 'Пайдаланушы аты';
@override String get password => 'Құпия сөз';
@override String get signIn => 'Кіру';
@@ -1831,15 +1825,11 @@ class _Translations$addServer$kk extends Translations$addServer$en {
@override String get addPlexTitle => 'Plex арқылы кіру';
@override String get pinExpired => 'PIN код мерзімі өтті.';
@override String failedToRegisterAccount({required Object error}) => 'Тіркелгіні тіркеу қатесі: ${error}';
- @override String get enterJellyfinUrlError => 'Jellyfin сервер URL-ін енгізіңіз';
@override String get addConnectionTitle => 'Қосылым қосу';
@override String addConnectionTitleScoped({required Object name}) => '${name} профиліне қосу';
@override String get signInWithPlexCard => 'Plex арқылы кіру';
@override String get signInWithPlexCardSubtitle => 'Осы құрылғыны авторизациялау.';
@override String get signInWithPlexCardSubtitleScoped => 'Plex тіркелгісін авторизациялау.';
- @override String get connectToJellyfinCard => 'Jellyfin-ге қосылу';
- @override String get connectToJellyfinCardSubtitle => 'Сервер URL-ін, пайдаланушы атын енгізіңіз.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Jellyfin серверіне кіру. ${name} профиліне жалғануда.';
@override String get borrowFromAnotherProfile => 'Басқа профильден алу';
@override String get borrowFromAnotherProfileSubtitle => 'Басқа профильдің қосылымын қайта пайдалану.';
}
@@ -2219,7 +2209,6 @@ extension on TranslationsKk {
'auth.waitingForAuth' => 'Растау күтілуде...\nБраузеріңізден кіріңіз.',
'auth.useBrowser' => 'Браузерді пайдалану',
'auth.or' => 'немесе',
- 'auth.connectToJellyfin' => 'Jellyfin-ге қосылу',
'auth.useQuickConnect' => 'Жылдам қосылуды пайдалану',
'auth.quickConnectInstructions' => 'Jellyfin-де Жылдам қосылуды ашып, осы кодты енгізіңіз.',
'auth.quickConnectWaiting' => 'Растау күтілуде…',
@@ -2722,9 +2711,9 @@ extension on TranslationsKk {
'videoControls.noChaptersAvailable' => 'Бөлімдер қолжетімсіз',
'videoControls.queue' => 'Кезек',
'videoControls.noQueueItems' => 'Кезекте элементтер жоқ',
+ 'videoControls.searchSubtitles' => 'Субтитр іздеу',
_ => null,
} ?? switch (path) {
- 'videoControls.searchSubtitles' => 'Субтитр іздеу',
'videoControls.language' => 'Тіл',
'videoControls.noSubtitlesFound' => 'Субтитр табылмады',
'videoControls.subtitleDownloaded' => 'Субтитр жүктелді',
@@ -2884,8 +2873,6 @@ extension on TranslationsKk {
'connections.sessionExpiredOne' => ({required Object name}) => '${name} үшін сеанс мерзімі өтті',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} сервер үшін сеанс мерзімі өтті',
'connections.signInAgain' => 'Қайтадан кіру',
- 'connections.editJellyfinTitle' => 'Jellyfin қосылымын өңдеу',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName} үшін URL мекенжайын қосыңыз немесе өшіріңіз.',
'discover.title' => 'Шолу',
'discover.noContentAvailable' => 'Мазмұн қолжетімсіз',
'discover.addMediaToLibraries' => 'Кітапханаларыңызға медиа қосыңыз',
@@ -3236,11 +3223,11 @@ extension on TranslationsKk {
'watchTogether.enterCodeHint' => '5 таңбалы кодты енгізіңіз',
'watchTogether.pasteFromClipboard' => 'Алмасу буферінен қою',
'watchTogether.pleaseEnterCode' => 'Сеанс кодын енгізіңіз',
- _ => null,
- } ?? switch (path) {
'watchTogether.codeMustBe5Chars' => 'Сеанс коды 5 таңбадан тұруы керек',
'watchTogether.joinInstructions' => 'Ұйымдастырушының сеанс кодын енгізіңіз.',
'watchTogether.failedToCreate' => 'Сеансты жасау мүмкін болмады',
+ _ => null,
+ } ?? switch (path) {
'watchTogether.failedToJoin' => 'Сеансқа қосылу мүмкін болмады',
'watchTogether.sessionCodeCopied' => 'Сеанс коды көшірілді',
'watchTogether.relayUnreachable' => 'Реле сервері қолжетімсіз.',
@@ -3678,12 +3665,9 @@ extension on TranslationsKk {
'services.libraryFilter.modeHintWhitelist' => 'Тек төменде таңдалған кітапханаларды синхрондау.',
'services.libraryFilter.libraries' => 'Кітапханалар',
'services.libraryFilter.noLibraries' => 'Кітапханалар жоқ',
- 'addServer.addJellyfinTitle' => 'Jellyfin серверін қосу',
'addServer.serverUrls' => 'Сервер URL-дері',
'addServer.serverUrlsHelper' => 'Үтірмен бөлінген бірнеше URL мекенжайына рұқсат етіледі.',
'addServer.findServer' => 'Серверді табу',
- 'addServer.searchingLocalServers' => 'Жергілікті Jellyfin серверлері ізделуде...',
- 'addServer.localServers' => 'Жергілікті Jellyfin серверлері',
'addServer.username' => 'Пайдаланушы аты',
'addServer.password' => 'Құпия сөз',
'addServer.signIn' => 'Кіру',
@@ -3695,15 +3679,11 @@ extension on TranslationsKk {
'addServer.addPlexTitle' => 'Plex арқылы кіру',
'addServer.pinExpired' => 'PIN код мерзімі өтті.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Тіркелгіні тіркеу қатесі: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Jellyfin сервер URL-ін енгізіңіз',
'addServer.addConnectionTitle' => 'Қосылым қосу',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} профиліне қосу',
'addServer.signInWithPlexCard' => 'Plex арқылы кіру',
'addServer.signInWithPlexCardSubtitle' => 'Осы құрылғыны авторизациялау.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Plex тіркелгісін авторизациялау.',
- 'addServer.connectToJellyfinCard' => 'Jellyfin-ге қосылу',
- 'addServer.connectToJellyfinCardSubtitle' => 'Сервер URL-ін, пайдаланушы атын енгізіңіз.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Jellyfin серверіне кіру. ${name} профиліне жалғануда.',
'addServer.borrowFromAnotherProfile' => 'Басқа профильден алу',
'addServer.borrowFromAnotherProfileSubtitle' => 'Басқа профильдің қосылымын қайта пайдалану.',
_ => null,
diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart
index 0086c47c..2b7666b5 100644
--- a/lib/i18n/strings_ko.g.dart
+++ b/lib/i18n/strings_ko.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$ko extends Translations$auth$en {
@override String get waitingForAuth => '인증 대기 중...\n브라우저에서 로그인하세요.';
@override String get useBrowser => '브라우저 사용';
@override String get or => '또는';
- @override String get connectToJellyfin => 'Jellyfin에 연결';
@override String get useQuickConnect => 'Quick Connect 사용';
@override String get quickConnectInstructions => 'Jellyfin에서 Quick Connect를 열고 이 코드를 입력하세요.';
@override String get quickConnectWaiting => '승인 대기 중…';
@@ -917,8 +916,6 @@ class _Translations$connections$ko extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => '${name}의 세션이 만료되었습니다';
@override String sessionExpiredMany({required Object count}) => '${count}개 서버의 세션이 만료되었습니다';
@override String get signInAgain => '다시 로그인';
- @override String get editJellyfinTitle => 'Jellyfin 연결 편집';
- @override String editJellyfinIntro({required Object serverName}) => '${serverName}의 URL을 추가하거나 제거하세요. Plezy는 연결 가능한 URL 중 지연 시간이 가장 낮은 URL을 사용합니다.';
}
// Path: discover
@@ -1800,12 +1797,9 @@ class _Translations$addServer$ko extends Translations$addServer$en {
final TranslationsKo _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin 서버 추가';
@override String get serverUrls => '서버 URL';
@override String get serverUrlsHelper => '쉼표로 구분하여 여러 URL을 입력할 수 있습니다.';
@override String get findServer => '서버 찾기';
- @override String get searchingLocalServers => '로컬 Jellyfin 서버 검색 중...';
- @override String get localServers => '로컬 Jellyfin 서버';
@override String get username => '사용자 이름';
@override String get password => '비밀번호';
@override String get signIn => '로그인';
@@ -1817,15 +1811,11 @@ class _Translations$addServer$ko extends Translations$addServer$en {
@override String get addPlexTitle => 'Plex로 로그인';
@override String get pinExpired => '로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.';
@override String failedToRegisterAccount({required Object error}) => '계정 등록 실패: ${error}';
- @override String get enterJellyfinUrlError => 'Jellyfin 서버 URL을 입력하세요';
@override String get addConnectionTitle => '연결 추가';
@override String addConnectionTitleScoped({required Object name}) => '${name}에 추가';
@override String get signInWithPlexCard => 'Plex로 로그인';
@override String get signInWithPlexCardSubtitle => '이 기기를 승인합니다. 공유 서버가 추가됩니다.';
@override String get signInWithPlexCardSubtitleScoped => 'Plex 계정을 승인합니다. Home 사용자는 프로필이 됩니다.';
- @override String get connectToJellyfinCard => 'Jellyfin에 연결';
- @override String get connectToJellyfinCardSubtitle => '서버 URL, 사용자 이름, 비밀번호를 입력하세요.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Jellyfin 서버에 로그인합니다. ${name}에 연결됩니다.';
@override String get borrowFromAnotherProfile => '다른 프로필에서 빌리기';
@override String get borrowFromAnotherProfileSubtitle => '다른 프로필의 연결을 재사용합니다. PIN으로 보호된 프로필에는 PIN이 필요합니다.';
}
@@ -2205,7 +2195,6 @@ extension on TranslationsKo {
'auth.waitingForAuth' => '인증 대기 중...\n브라우저에서 로그인하세요.',
'auth.useBrowser' => '브라우저 사용',
'auth.or' => '또는',
- 'auth.connectToJellyfin' => 'Jellyfin에 연결',
'auth.useQuickConnect' => 'Quick Connect 사용',
'auth.quickConnectInstructions' => 'Jellyfin에서 Quick Connect를 열고 이 코드를 입력하세요.',
'auth.quickConnectWaiting' => '승인 대기 중…',
@@ -2708,9 +2697,9 @@ extension on TranslationsKo {
'videoControls.searchSubtitles' => '자막 검색',
'videoControls.language' => '언어',
'videoControls.noSubtitlesFound' => '자막을 찾을 수 없습니다',
+ 'videoControls.subtitleDownloaded' => '자막이 다운로드되었습니다',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => '자막이 다운로드되었습니다',
'videoControls.subtitleDownloadedNotApplied' => '자막을 다운로드했지만 선택할 수 없습니다',
'videoControls.subtitleDownloadFailed' => '자막 다운로드에 실패했습니다',
'videoControls.searchLanguages' => '언어 검색...',
@@ -2866,8 +2855,6 @@ extension on TranslationsKo {
'connections.sessionExpiredOne' => ({required Object name}) => '${name}의 세션이 만료되었습니다',
'connections.sessionExpiredMany' => ({required Object count}) => '${count}개 서버의 세션이 만료되었습니다',
'connections.signInAgain' => '다시 로그인',
- 'connections.editJellyfinTitle' => 'Jellyfin 연결 편집',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName}의 URL을 추가하거나 제거하세요. Plezy는 연결 가능한 URL 중 지연 시간이 가장 낮은 URL을 사용합니다.',
'discover.title' => '둘러보기',
'discover.noContentAvailable' => '사용 가능한 콘텐츠가 없습니다',
'discover.addMediaToLibraries' => '미디어 라이브러리에 미디어를 추가해 주세요',
@@ -3222,11 +3209,11 @@ extension on TranslationsKo {
'watchTogether.failedToCreate' => '세션 생성 실패',
'watchTogether.failedToJoin' => '세션 참여 실패',
'watchTogether.sessionCodeCopied' => '세션 코드가 클립보드에 복사되었습니다',
- _ => null,
- } ?? switch (path) {
'watchTogether.relayUnreachable' => '릴레이 서버에 연결할 수 없습니다. ISP 차단으로 함께 보기를 사용하지 못할 수 있습니다.',
'watchTogether.reconnectingToHost' => '호스트에 재연결 중...',
'watchTogether.currentPlayback' => '현재 재생',
+ _ => null,
+ } ?? switch (path) {
'watchTogether.joinCurrentPlayback' => '현재 재생 참여',
'watchTogether.joinCurrentPlaybackDescription' => '호스트가 현재 시청 중인 콘텐츠로 이동합니다',
'watchTogether.failedToOpenCurrentPlayback' => '현재 재생을 열 수 없습니다',
@@ -3653,12 +3640,9 @@ extension on TranslationsKo {
'services.libraryFilter.modeHintWhitelist' => '아래에 선택한 라이브러리만 동기화합니다.',
'services.libraryFilter.libraries' => '라이브러리',
'services.libraryFilter.noLibraries' => '사용 가능한 라이브러리가 없습니다',
- 'addServer.addJellyfinTitle' => 'Jellyfin 서버 추가',
'addServer.serverUrls' => '서버 URL',
'addServer.serverUrlsHelper' => '쉼표로 구분하여 여러 URL을 입력할 수 있습니다.',
'addServer.findServer' => '서버 찾기',
- 'addServer.searchingLocalServers' => '로컬 Jellyfin 서버 검색 중...',
- 'addServer.localServers' => '로컬 Jellyfin 서버',
'addServer.username' => '사용자 이름',
'addServer.password' => '비밀번호',
'addServer.signIn' => '로그인',
@@ -3670,15 +3654,11 @@ extension on TranslationsKo {
'addServer.addPlexTitle' => 'Plex로 로그인',
'addServer.pinExpired' => '로그인 전에 PIN이 만료되었습니다. 다시 시도하세요.',
'addServer.failedToRegisterAccount' => ({required Object error}) => '계정 등록 실패: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Jellyfin 서버 URL을 입력하세요',
'addServer.addConnectionTitle' => '연결 추가',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name}에 추가',
'addServer.signInWithPlexCard' => 'Plex로 로그인',
'addServer.signInWithPlexCardSubtitle' => '이 기기를 승인합니다. 공유 서버가 추가됩니다.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Plex 계정을 승인합니다. Home 사용자는 프로필이 됩니다.',
- 'addServer.connectToJellyfinCard' => 'Jellyfin에 연결',
- 'addServer.connectToJellyfinCardSubtitle' => '서버 URL, 사용자 이름, 비밀번호를 입력하세요.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Jellyfin 서버에 로그인합니다. ${name}에 연결됩니다.',
'addServer.borrowFromAnotherProfile' => '다른 프로필에서 빌리기',
'addServer.borrowFromAnotherProfileSubtitle' => '다른 프로필의 연결을 재사용합니다. PIN으로 보호된 프로필에는 PIN이 필요합니다.',
_ => null,
diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart
index faa8907e..20847307 100644
--- a/lib/i18n/strings_nb.g.dart
+++ b/lib/i18n/strings_nb.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$nb extends Translations$auth$en {
@override String get waitingForAuth => 'Venter på autentisering...\nLogg inn fra nettleseren.';
@override String get useBrowser => 'Bruk nettleser';
@override String get or => 'eller';
- @override String get connectToJellyfin => 'Koble til Jellyfin';
@override String get useQuickConnect => 'Bruk Quick Connect';
@override String get quickConnectInstructions => 'Åpne Quick Connect i Jellyfin og skriv inn denne koden.';
@override String get quickConnectWaiting => 'Venter på godkjenning…';
@@ -918,8 +917,6 @@ class _Translations$connections$nb extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Økten er utløpt for ${name}';
@override String sessionExpiredMany({required Object count}) => 'Økten er utløpt for ${count} servere';
@override String get signInAgain => 'Logg inn igjen';
- @override String get editJellyfinTitle => 'Rediger Jellyfin-tilkobling';
- @override String editJellyfinIntro({required Object serverName}) => 'Legg til eller fjern URL-er for ${serverName}. Plezy bruker den tilgjengelige URL-en med lavest forsinkelse.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$nb extends Translations$addServer$en {
final TranslationsNb _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Legg til Jellyfin-server';
@override String get serverUrls => 'Server-URL-er';
@override String get serverUrlsHelper => 'Flere URL-er er tillatt, atskilt med komma.';
@override String get findServer => 'Finn server';
- @override String get searchingLocalServers => 'Søker etter lokale Jellyfin-servere...';
- @override String get localServers => 'Lokale Jellyfin-servere';
@override String get username => 'Brukernavn';
@override String get password => 'Passord';
@override String get signIn => 'Logg inn';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$nb extends Translations$addServer$en {
@override String get addPlexTitle => 'Logg inn med Plex';
@override String get pinExpired => 'PIN-koden utløp før innloggingen var fullført. Prøv igjen.';
@override String failedToRegisterAccount({required Object error}) => 'Kunne ikke registrere kontoen: ${error}';
- @override String get enterJellyfinUrlError => 'Oppgi URL-en til Jellyfin-serveren din';
@override String get addConnectionTitle => 'Legg til tilkobling';
@override String addConnectionTitleScoped({required Object name}) => 'Legg til for ${name}';
@override String get signInWithPlexCard => 'Logg inn med Plex';
@override String get signInWithPlexCardSubtitle => 'Autoriser denne enheten. Delte servere legges til.';
@override String get signInWithPlexCardSubtitleScoped => 'Autoriser en Plex-konto. Home-brukere blir profiler.';
- @override String get connectToJellyfinCard => 'Koble til Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Skriv inn server-URL, brukernavn og passord.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Logg på en Jellyfin-server. Knyttes til ${name}.';
@override String get borrowFromAnotherProfile => 'Lån fra en annen profil';
@override String get borrowFromAnotherProfileSubtitle => 'Gjenbruk en annen profils tilkobling. PIN-beskyttede profiler krever PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsNb {
'auth.waitingForAuth' => 'Venter på autentisering...\nLogg inn fra nettleseren.',
'auth.useBrowser' => 'Bruk nettleser',
'auth.or' => 'eller',
- 'auth.connectToJellyfin' => 'Koble til Jellyfin',
'auth.useQuickConnect' => 'Bruk Quick Connect',
'auth.quickConnectInstructions' => 'Åpne Quick Connect i Jellyfin og skriv inn denne koden.',
'auth.quickConnectWaiting' => 'Venter på godkjenning…',
@@ -2711,9 +2700,9 @@ extension on TranslationsNb {
'videoControls.searchSubtitles' => 'Søk etter undertekster',
'videoControls.language' => 'Språk',
'videoControls.noSubtitlesFound' => 'Ingen undertekster funnet',
+ 'videoControls.subtitleDownloaded' => 'Undertekst lastet ned',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Undertekst lastet ned',
'videoControls.subtitleDownloadedNotApplied' => 'Underteksten ble lastet ned, men kunne ikke velges',
'videoControls.subtitleDownloadFailed' => 'Kunne ikke laste ned undertekst',
'videoControls.searchLanguages' => 'Søk etter språk...',
@@ -2869,8 +2858,6 @@ extension on TranslationsNb {
'connections.sessionExpiredOne' => ({required Object name}) => 'Økten er utløpt for ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Økten er utløpt for ${count} servere',
'connections.signInAgain' => 'Logg inn igjen',
- 'connections.editJellyfinTitle' => 'Rediger Jellyfin-tilkobling',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Legg til eller fjern URL-er for ${serverName}. Plezy bruker den tilgjengelige URL-en med lavest forsinkelse.',
'discover.title' => 'Oppdag',
'discover.noContentAvailable' => 'Ikke noe innhold tilgjengelig',
'discover.addMediaToLibraries' => 'Legg til medier i bibliotekene dine',
@@ -3225,11 +3212,11 @@ extension on TranslationsNb {
'watchTogether.failedToCreate' => 'Kunne ikke opprette økt',
'watchTogether.failedToJoin' => 'Kunne ikke bli med i økt',
'watchTogether.sessionCodeCopied' => 'Øktkode kopiert til utklippstavle',
- _ => null,
- } ?? switch (path) {
'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.joinCurrentPlayback' => 'Bli med i gjeldende avspilling',
'watchTogether.joinCurrentPlaybackDescription' => 'Hopp tilbake til det verten ser på nå',
'watchTogether.failedToOpenCurrentPlayback' => 'Kunne ikke åpne gjeldende avspilling',
@@ -3656,12 +3643,9 @@ extension on TranslationsNb {
'services.libraryFilter.modeHintWhitelist' => 'Synkroniser kun bibliotekene du markerer nedenfor.',
'services.libraryFilter.libraries' => 'Biblioteker',
'services.libraryFilter.noLibraries' => 'Ingen biblioteker tilgjengelige',
- 'addServer.addJellyfinTitle' => 'Legg til Jellyfin-server',
'addServer.serverUrls' => 'Server-URL-er',
'addServer.serverUrlsHelper' => 'Flere URL-er er tillatt, atskilt med komma.',
'addServer.findServer' => 'Finn server',
- 'addServer.searchingLocalServers' => 'Søker etter lokale Jellyfin-servere...',
- 'addServer.localServers' => 'Lokale Jellyfin-servere',
'addServer.username' => 'Brukernavn',
'addServer.password' => 'Passord',
'addServer.signIn' => 'Logg inn',
@@ -3673,15 +3657,11 @@ extension on TranslationsNb {
'addServer.addPlexTitle' => 'Logg inn med Plex',
'addServer.pinExpired' => 'PIN-koden utløp før innloggingen var fullført. Prøv igjen.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunne ikke registrere kontoen: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Oppgi URL-en til Jellyfin-serveren din',
'addServer.addConnectionTitle' => 'Legg til tilkobling',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Legg til for ${name}',
'addServer.signInWithPlexCard' => 'Logg inn med Plex',
'addServer.signInWithPlexCardSubtitle' => 'Autoriser denne enheten. Delte servere legges til.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Autoriser en Plex-konto. Home-brukere blir profiler.',
- 'addServer.connectToJellyfinCard' => 'Koble til Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Skriv inn server-URL, brukernavn og passord.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Logg på en Jellyfin-server. Knyttes til ${name}.',
'addServer.borrowFromAnotherProfile' => 'Lån fra en annen profil',
'addServer.borrowFromAnotherProfileSubtitle' => 'Gjenbruk en annen profils tilkobling. PIN-beskyttede profiler krever PIN.',
_ => null,
diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart
index 2809c2d7..4df32332 100644
--- a/lib/i18n/strings_nl.g.dart
+++ b/lib/i18n/strings_nl.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$nl extends Translations$auth$en {
@override String get waitingForAuth => 'Wachten op authenticatie...\nMeld je aan via je browser.';
@override String get useBrowser => 'Gebruik browser';
@override String get or => 'of';
- @override String get connectToJellyfin => 'Verbinden met Jellyfin';
@override String get useQuickConnect => 'Quick Connect gebruiken';
@override String get quickConnectInstructions => 'Open Quick Connect in Jellyfin en voer deze code in.';
@override String get quickConnectWaiting => 'Wachten op goedkeuring…';
@@ -918,8 +917,6 @@ class _Translations$connections$nl extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sessie verlopen voor ${name}';
@override String sessionExpiredMany({required Object count}) => 'Sessie verlopen voor ${count} servers';
@override String get signInAgain => 'Opnieuw aanmelden';
- @override String get editJellyfinTitle => 'Jellyfin-verbinding bewerken';
- @override String editJellyfinIntro({required Object serverName}) => 'Voeg URL\'s voor ${serverName} toe of verwijder ze. Plezy gebruikt de bereikbare URL met de laagste latentie.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$nl extends Translations$addServer$en {
final TranslationsNl _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin-server toevoegen';
@override String get serverUrls => 'Server-URL\'s';
@override String get serverUrlsHelper => 'Meerdere URL\'s toegestaan, gescheiden door komma\'s.';
@override String get findServer => 'Server zoeken';
- @override String get searchingLocalServers => 'Lokale Jellyfin-servers zoeken...';
- @override String get localServers => 'Lokale Jellyfin-servers';
@override String get username => 'Gebruikersnaam';
@override String get password => 'Wachtwoord';
@override String get signIn => 'Inloggen';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$nl extends Translations$addServer$en {
@override String get addPlexTitle => 'Inloggen met Plex';
@override String get pinExpired => 'De pincode verliep voordat je kon inloggen. Probeer het opnieuw.';
@override String failedToRegisterAccount({required Object error}) => 'Account registreren mislukt: ${error}';
- @override String get enterJellyfinUrlError => 'Voer de URL van je Jellyfin-server in';
@override String get addConnectionTitle => 'Verbinding toevoegen';
@override String addConnectionTitleScoped({required Object name}) => 'Toevoegen aan ${name}';
@override String get signInWithPlexCard => 'Inloggen met Plex';
@override String get signInWithPlexCardSubtitle => 'Autoriseer dit apparaat. Gedeelde servers worden toegevoegd.';
@override String get signInWithPlexCardSubtitleScoped => 'Autoriseer een Plex-account. Home-gebruikers worden profielen.';
- @override String get connectToJellyfinCard => 'Verbinden met Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Voer je server-URL, gebruikersnaam en wachtwoord in.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Log in op een Jellyfin-server. Wordt gekoppeld aan ${name}.';
@override String get borrowFromAnotherProfile => 'Van een ander profiel lenen';
@override String get borrowFromAnotherProfileSubtitle => 'Hergebruik de verbinding van een ander profiel. Voor profielen met pincodebeveiliging is een pincode vereist.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsNl {
'auth.waitingForAuth' => 'Wachten op authenticatie...\nMeld je aan via je browser.',
'auth.useBrowser' => 'Gebruik browser',
'auth.or' => 'of',
- 'auth.connectToJellyfin' => 'Verbinden met Jellyfin',
'auth.useQuickConnect' => 'Quick Connect gebruiken',
'auth.quickConnectInstructions' => 'Open Quick Connect in Jellyfin en voer deze code in.',
'auth.quickConnectWaiting' => 'Wachten op goedkeuring…',
@@ -2711,9 +2700,9 @@ extension on TranslationsNl {
'videoControls.searchSubtitles' => 'Ondertitels zoeken',
'videoControls.language' => 'Taal',
'videoControls.noSubtitlesFound' => 'Geen ondertitels gevonden',
+ 'videoControls.subtitleDownloaded' => 'Ondertitel gedownload',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Ondertitel gedownload',
'videoControls.subtitleDownloadedNotApplied' => 'De ondertiteling is gedownload, maar kon niet worden geselecteerd',
'videoControls.subtitleDownloadFailed' => 'Ondertitel downloaden mislukt',
'videoControls.searchLanguages' => 'Talen zoeken...',
@@ -2869,8 +2858,6 @@ extension on TranslationsNl {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sessie verlopen voor ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sessie verlopen voor ${count} servers',
'connections.signInAgain' => 'Opnieuw aanmelden',
- 'connections.editJellyfinTitle' => 'Jellyfin-verbinding bewerken',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Voeg URL\'s voor ${serverName} toe of verwijder ze. Plezy gebruikt de bereikbare URL met de laagste latentie.',
'discover.title' => 'Ontdekken',
'discover.noContentAvailable' => 'Geen inhoud beschikbaar',
'discover.addMediaToLibraries' => 'Voeg wat media toe aan je bibliotheken',
@@ -3225,11 +3212,11 @@ extension on TranslationsNl {
'watchTogether.failedToCreate' => 'Sessie maken mislukt',
'watchTogether.failedToJoin' => 'Deelnemen aan sessie mislukt',
'watchTogether.sessionCodeCopied' => 'Sessiecode naar het klembord gekopieerd',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3656,12 +3643,9 @@ extension on TranslationsNl {
'services.libraryFilter.modeHintWhitelist' => 'Synchroniseer alleen de hieronder aangevinkte bibliotheken.',
'services.libraryFilter.libraries' => 'Bibliotheken',
'services.libraryFilter.noLibraries' => 'Geen bibliotheken beschikbaar',
- 'addServer.addJellyfinTitle' => 'Jellyfin-server toevoegen',
'addServer.serverUrls' => 'Server-URL\'s',
'addServer.serverUrlsHelper' => 'Meerdere URL\'s toegestaan, gescheiden door komma\'s.',
'addServer.findServer' => 'Server zoeken',
- 'addServer.searchingLocalServers' => 'Lokale Jellyfin-servers zoeken...',
- 'addServer.localServers' => 'Lokale Jellyfin-servers',
'addServer.username' => 'Gebruikersnaam',
'addServer.password' => 'Wachtwoord',
'addServer.signIn' => 'Inloggen',
@@ -3673,15 +3657,11 @@ extension on TranslationsNl {
'addServer.addPlexTitle' => 'Inloggen met Plex',
'addServer.pinExpired' => 'De pincode verliep voordat je kon inloggen. Probeer het opnieuw.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Account registreren mislukt: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Voer de URL van je Jellyfin-server in',
'addServer.addConnectionTitle' => 'Verbinding toevoegen',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Toevoegen aan ${name}',
'addServer.signInWithPlexCard' => 'Inloggen met Plex',
'addServer.signInWithPlexCardSubtitle' => 'Autoriseer dit apparaat. Gedeelde servers worden toegevoegd.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Autoriseer een Plex-account. Home-gebruikers worden profielen.',
- 'addServer.connectToJellyfinCard' => 'Verbinden met Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Voer je server-URL, gebruikersnaam en wachtwoord in.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Log in op een Jellyfin-server. Wordt gekoppeld aan ${name}.',
'addServer.borrowFromAnotherProfile' => 'Van een ander profiel lenen',
'addServer.borrowFromAnotherProfileSubtitle' => 'Hergebruik de verbinding van een ander profiel. Voor profielen met pincodebeveiliging is een pincode vereist.',
_ => null,
diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart
index a3768ca9..4c65cc2d 100644
--- a/lib/i18n/strings_pl.g.dart
+++ b/lib/i18n/strings_pl.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$pl extends Translations$auth$en {
@override String get waitingForAuth => 'Oczekiwanie na uwierzytelnienie...\nZaloguj się w przeglądarce.';
@override String get useBrowser => 'Użyj przeglądarki';
@override String get or => 'lub';
- @override String get connectToJellyfin => 'Połącz z Jellyfin';
@override String get useQuickConnect => 'Użyj Quick Connect';
@override String get quickConnectInstructions => 'Otwórz Quick Connect w Jellyfin i wpisz ten kod.';
@override String get quickConnectWaiting => 'Oczekiwanie na zatwierdzenie…';
@@ -920,8 +919,6 @@ class _Translations$connections$pl extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sesja wygasła dla ${name}';
@override String sessionExpiredMany({required Object count}) => 'Sesja wygasła dla ${count} serwerów';
@override String get signInAgain => 'Zaloguj się ponownie';
- @override String get editJellyfinTitle => 'Edytuj połączenie Jellyfin';
- @override String editJellyfinIntro({required Object serverName}) => 'Dodaj lub usuń adresy URL dla ${serverName}. Plezy użyje osiągalnego URL-a o najniższym opóźnieniu.';
}
// Path: discover
@@ -1809,12 +1806,9 @@ class _Translations$addServer$pl extends Translations$addServer$en {
final TranslationsPl _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Dodaj serwer Jellyfin';
@override String get serverUrls => 'Adresy URL serwera';
@override String get serverUrlsHelper => 'Można podać wiele adresów URL rozdzielonych przecinkami.';
@override String get findServer => 'Znajdź serwer';
- @override String get searchingLocalServers => 'Szukanie lokalnych serwerów Jellyfin...';
- @override String get localServers => 'Lokalne serwery Jellyfin';
@override String get username => 'Nazwa użytkownika';
@override String get password => 'Hasło';
@override String get signIn => 'Zaloguj się';
@@ -1826,15 +1820,11 @@ class _Translations$addServer$pl extends Translations$addServer$en {
@override String get addPlexTitle => 'Zaloguj się przez Plex';
@override String get pinExpired => 'PIN wygasł przed zalogowaniem. Spróbuj ponownie.';
@override String failedToRegisterAccount({required Object error}) => 'Nie udało się zarejestrować konta: ${error}';
- @override String get enterJellyfinUrlError => 'Podaj URL serwera Jellyfin';
@override String get addConnectionTitle => 'Dodaj połączenie';
@override String addConnectionTitleScoped({required Object name}) => 'Dodaj do ${name}';
@override String get signInWithPlexCard => 'Zaloguj się przez Plex';
@override String get signInWithPlexCardSubtitle => 'Autoryzuj to urządzenie. Serwery udostępnione zostaną dodane.';
@override String get signInWithPlexCardSubtitleScoped => 'Autoryzuj konto Plex. Użytkownicy Home staną się profilami.';
- @override String get connectToJellyfinCard => 'Połącz z Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Wpisz URL serwera, nazwę użytkownika i hasło.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Zaloguj się do serwera Jellyfin. Powiązane z ${name}.';
@override String get borrowFromAnotherProfile => 'Pożycz z innego profilu';
@override String get borrowFromAnotherProfileSubtitle => 'Użyj połączenia innego profilu. Profile chronione PIN-em wymagają podania PIN-u.';
}
@@ -2214,7 +2204,6 @@ extension on TranslationsPl {
'auth.waitingForAuth' => 'Oczekiwanie na uwierzytelnienie...\nZaloguj się w przeglądarce.',
'auth.useBrowser' => 'Użyj przeglądarki',
'auth.or' => 'lub',
- 'auth.connectToJellyfin' => 'Połącz z Jellyfin',
'auth.useQuickConnect' => 'Użyj Quick Connect',
'auth.quickConnectInstructions' => 'Otwórz Quick Connect w Jellyfin i wpisz ten kod.',
'auth.quickConnectWaiting' => 'Oczekiwanie na zatwierdzenie…',
@@ -2717,9 +2706,9 @@ extension on TranslationsPl {
'videoControls.searchSubtitles' => 'Szukaj napisów',
'videoControls.language' => 'Język',
'videoControls.noSubtitlesFound' => 'Nie znaleziono napisów',
+ 'videoControls.subtitleDownloaded' => 'Napisy pobrane',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Napisy pobrane',
'videoControls.subtitleDownloadedNotApplied' => 'Napisy zostały pobrane, ale nie można ich było wybrać',
'videoControls.subtitleDownloadFailed' => 'Nie udało się pobrać napisów',
'videoControls.searchLanguages' => 'Szukaj języków...',
@@ -2875,8 +2864,6 @@ extension on TranslationsPl {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sesja wygasła dla ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sesja wygasła dla ${count} serwerów',
'connections.signInAgain' => 'Zaloguj się ponownie',
- 'connections.editJellyfinTitle' => 'Edytuj połączenie Jellyfin',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Dodaj lub usuń adresy URL dla ${serverName}. Plezy użyje osiągalnego URL-a o najniższym opóźnieniu.',
'discover.title' => 'Odkryj',
'discover.noContentAvailable' => 'Brak dostępnych treści',
'discover.addMediaToLibraries' => 'Dodaj multimedia do swoich bibliotek',
@@ -3231,11 +3218,11 @@ extension on TranslationsPl {
'watchTogether.failedToCreate' => 'Nie udało się utworzyć sesji',
'watchTogether.failedToJoin' => 'Nie udało się dołączyć do sesji',
'watchTogether.sessionCodeCopied' => 'Kod sesji skopiowany do schowka',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3662,12 +3649,9 @@ extension on TranslationsPl {
'services.libraryFilter.modeHintWhitelist' => 'Synchronizuj tylko biblioteki zaznaczone poniżej.',
'services.libraryFilter.libraries' => 'Biblioteki',
'services.libraryFilter.noLibraries' => 'Brak dostępnych bibliotek',
- 'addServer.addJellyfinTitle' => 'Dodaj serwer Jellyfin',
'addServer.serverUrls' => 'Adresy URL serwera',
'addServer.serverUrlsHelper' => 'Można podać wiele adresów URL rozdzielonych przecinkami.',
'addServer.findServer' => 'Znajdź serwer',
- 'addServer.searchingLocalServers' => 'Szukanie lokalnych serwerów Jellyfin...',
- 'addServer.localServers' => 'Lokalne serwery Jellyfin',
'addServer.username' => 'Nazwa użytkownika',
'addServer.password' => 'Hasło',
'addServer.signIn' => 'Zaloguj się',
@@ -3679,15 +3663,11 @@ extension on TranslationsPl {
'addServer.addPlexTitle' => 'Zaloguj się przez Plex',
'addServer.pinExpired' => 'PIN wygasł przed zalogowaniem. Spróbuj ponownie.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Nie udało się zarejestrować konta: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Podaj URL serwera Jellyfin',
'addServer.addConnectionTitle' => 'Dodaj połączenie',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Dodaj do ${name}',
'addServer.signInWithPlexCard' => 'Zaloguj się przez Plex',
'addServer.signInWithPlexCardSubtitle' => 'Autoryzuj to urządzenie. Serwery udostępnione zostaną dodane.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Autoryzuj konto Plex. Użytkownicy Home staną się profilami.',
- 'addServer.connectToJellyfinCard' => 'Połącz z Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Wpisz URL serwera, nazwę użytkownika i hasło.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Zaloguj się do serwera Jellyfin. Powiązane z ${name}.',
'addServer.borrowFromAnotherProfile' => 'Pożycz z innego profilu',
'addServer.borrowFromAnotherProfileSubtitle' => 'Użyj połączenia innego profilu. Profile chronione PIN-em wymagają podania PIN-u.',
_ => null,
diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart
index 19cca20c..99042fc5 100644
--- a/lib/i18n/strings_pt.g.dart
+++ b/lib/i18n/strings_pt.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$pt extends Translations$auth$en {
@override String get waitingForAuth => 'Aguardando autenticação...\nEntre pelo navegador.';
@override String get useBrowser => 'Usar navegador';
@override String get or => 'ou';
- @override String get connectToJellyfin => 'Conectar ao Jellyfin';
@override String get useQuickConnect => 'Usar Quick Connect';
@override String get quickConnectInstructions => 'Abra o Quick Connect no Jellyfin e insira este código.';
@override String get quickConnectWaiting => 'Aguardando aprovação…';
@@ -918,8 +917,6 @@ class _Translations$connections$pt extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sessão de ${name} expirada';
@override String sessionExpiredMany({required Object count}) => 'Sessões expiradas em ${count} servidores';
@override String get signInAgain => 'Entrar novamente';
- @override String get editJellyfinTitle => 'Editar conexão Jellyfin';
- @override String editJellyfinIntro({required Object serverName}) => 'Adicione ou remova URLs de ${serverName}. O Plezy usará a URL acessível com a menor latência.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$pt extends Translations$addServer$en {
final TranslationsPt _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Adicionar servidor Jellyfin';
@override String get serverUrls => 'URLs do servidor';
@override String get serverUrlsHelper => 'Várias URLs são permitidas, separadas por vírgulas.';
@override String get findServer => 'Encontrar servidor';
- @override String get searchingLocalServers => 'Procurando servidores Jellyfin locais...';
- @override String get localServers => 'Servidores Jellyfin locais';
@override String get username => 'Usuário';
@override String get password => 'Senha';
@override String get signIn => 'Entrar';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$pt extends Translations$addServer$en {
@override String get addPlexTitle => 'Entrar com Plex';
@override String get pinExpired => 'O PIN expirou antes de entrar. Tente novamente.';
@override String failedToRegisterAccount({required Object error}) => 'Falha ao registrar a conta: ${error}';
- @override String get enterJellyfinUrlError => 'Insira a URL do seu servidor Jellyfin';
@override String get addConnectionTitle => 'Adicionar conexão';
@override String addConnectionTitleScoped({required Object name}) => 'Adicionar a ${name}';
@override String get signInWithPlexCard => 'Entrar com Plex';
@override String get signInWithPlexCardSubtitle => 'Autorize este dispositivo. Servidores compartilhados são adicionados.';
@override String get signInWithPlexCardSubtitleScoped => 'Autorize uma conta Plex. Os usuários do Plex Home se tornam perfis.';
- @override String get connectToJellyfinCard => 'Conectar ao Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Insira URL do servidor, usuário e senha.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Entre em um servidor Jellyfin. A conexão será vinculada a ${name}.';
@override String get borrowFromAnotherProfile => 'Pegar emprestado de outro perfil';
@override String get borrowFromAnotherProfileSubtitle => 'Reutilize a conexão de outro perfil. Perfis protegidos por PIN exigem PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsPt {
'auth.waitingForAuth' => 'Aguardando autenticação...\nEntre pelo navegador.',
'auth.useBrowser' => 'Usar navegador',
'auth.or' => 'ou',
- 'auth.connectToJellyfin' => 'Conectar ao Jellyfin',
'auth.useQuickConnect' => 'Usar Quick Connect',
'auth.quickConnectInstructions' => 'Abra o Quick Connect no Jellyfin e insira este código.',
'auth.quickConnectWaiting' => 'Aguardando aprovação…',
@@ -2711,9 +2700,9 @@ extension on TranslationsPt {
'videoControls.searchSubtitles' => 'Pesquisar legendas',
'videoControls.language' => 'Idioma',
'videoControls.noSubtitlesFound' => 'Nenhuma legenda encontrada',
+ 'videoControls.subtitleDownloaded' => 'Legenda baixada',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Legenda baixada',
'videoControls.subtitleDownloadedNotApplied' => 'A legenda foi baixada, mas não foi possível selecioná-la',
'videoControls.subtitleDownloadFailed' => 'Falha ao baixar legenda',
'videoControls.searchLanguages' => 'Pesquisar idiomas...',
@@ -2869,8 +2858,6 @@ extension on TranslationsPt {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sessão de ${name} expirada',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sessões expiradas em ${count} servidores',
'connections.signInAgain' => 'Entrar novamente',
- 'connections.editJellyfinTitle' => 'Editar conexão Jellyfin',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Adicione ou remova URLs de ${serverName}. O Plezy usará a URL acessível com a menor latência.',
'discover.title' => 'Descobrir',
'discover.noContentAvailable' => 'Nenhum conteúdo disponível',
'discover.addMediaToLibraries' => 'Adicione mídias às suas bibliotecas',
@@ -3225,11 +3212,11 @@ extension on TranslationsPt {
'watchTogether.failedToCreate' => 'Falha ao criar sessão',
'watchTogether.failedToJoin' => 'Falha ao entrar na sessão',
'watchTogether.sessionCodeCopied' => 'Código da sessão copiado para a área de transferência',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3656,12 +3643,9 @@ extension on TranslationsPt {
'services.libraryFilter.modeHintWhitelist' => 'Sincronizar apenas as bibliotecas marcadas abaixo.',
'services.libraryFilter.libraries' => 'Bibliotecas',
'services.libraryFilter.noLibraries' => 'Nenhuma biblioteca disponível',
- 'addServer.addJellyfinTitle' => 'Adicionar servidor Jellyfin',
'addServer.serverUrls' => 'URLs do servidor',
'addServer.serverUrlsHelper' => 'Várias URLs são permitidas, separadas por vírgulas.',
'addServer.findServer' => 'Encontrar servidor',
- 'addServer.searchingLocalServers' => 'Procurando servidores Jellyfin locais...',
- 'addServer.localServers' => 'Servidores Jellyfin locais',
'addServer.username' => 'Usuário',
'addServer.password' => 'Senha',
'addServer.signIn' => 'Entrar',
@@ -3673,15 +3657,11 @@ extension on TranslationsPt {
'addServer.addPlexTitle' => 'Entrar com Plex',
'addServer.pinExpired' => 'O PIN expirou antes de entrar. Tente novamente.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Falha ao registrar a conta: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Insira a URL do seu servidor Jellyfin',
'addServer.addConnectionTitle' => 'Adicionar conexão',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Adicionar a ${name}',
'addServer.signInWithPlexCard' => 'Entrar com Plex',
'addServer.signInWithPlexCardSubtitle' => 'Autorize este dispositivo. Servidores compartilhados são adicionados.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Autorize uma conta Plex. Os usuários do Plex Home se tornam perfis.',
- 'addServer.connectToJellyfinCard' => 'Conectar ao Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Insira URL do servidor, usuário e senha.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Entre em um servidor Jellyfin. A conexão será vinculada a ${name}.',
'addServer.borrowFromAnotherProfile' => 'Pegar emprestado de outro perfil',
'addServer.borrowFromAnotherProfileSubtitle' => 'Reutilize a conexão de outro perfil. Perfis protegidos por PIN exigem PIN.',
_ => null,
diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart
index f3975558..e7207693 100644
--- a/lib/i18n/strings_ru.g.dart
+++ b/lib/i18n/strings_ru.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$ru extends Translations$auth$en {
@override String get waitingForAuth => 'Ожидание аутентификации...\nВыполните вход в браузере.';
@override String get useBrowser => 'Использовать браузер';
@override String get or => 'или';
- @override String get connectToJellyfin => 'Подключиться к Jellyfin';
@override String get useQuickConnect => 'Использовать Quick Connect';
@override String get quickConnectInstructions => 'Откройте Quick Connect в Jellyfin и введите этот код.';
@override String get quickConnectWaiting => 'Ожидание подтверждения…';
@@ -920,8 +919,6 @@ class _Translations$connections$ru extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Сессия истекла для ${name}';
@override String sessionExpiredMany({required Object count}) => 'Сессия истекла для ${count} серверов';
@override String get signInAgain => 'Войти снова';
- @override String get editJellyfinTitle => 'Изменить подключение Jellyfin';
- @override String editJellyfinIntro({required Object serverName}) => 'Добавьте или удалите URL для ${serverName}. Plezy будет использовать доступный URL с минимальной задержкой.';
}
// Path: discover
@@ -1809,12 +1806,9 @@ class _Translations$addServer$ru extends Translations$addServer$en {
final TranslationsRu _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Добавить сервер Jellyfin';
@override String get serverUrls => 'URL-адреса сервера';
@override String get serverUrlsHelper => 'Можно указать несколько URL через запятую.';
@override String get findServer => 'Найти сервер';
- @override String get searchingLocalServers => 'Поиск локальных серверов Jellyfin...';
- @override String get localServers => 'Локальные серверы Jellyfin';
@override String get username => 'Имя пользователя';
@override String get password => 'Пароль';
@override String get signIn => 'Войти';
@@ -1826,15 +1820,11 @@ class _Translations$addServer$ru extends Translations$addServer$en {
@override String get addPlexTitle => 'Войти через Plex';
@override String get pinExpired => 'Срок действия PIN истёк до входа. Попробуйте снова.';
@override String failedToRegisterAccount({required Object error}) => 'Не удалось зарегистрировать учётную запись: ${error}';
- @override String get enterJellyfinUrlError => 'Введите URL вашего сервера Jellyfin';
@override String get addConnectionTitle => 'Добавить подключение';
@override String addConnectionTitleScoped({required Object name}) => 'Добавить в ${name}';
@override String get signInWithPlexCard => 'Войти через Plex';
@override String get signInWithPlexCardSubtitle => 'Авторизуйте это устройство. Общие серверы будут добавлены.';
@override String get signInWithPlexCardSubtitleScoped => 'Авторизуйте аккаунт Plex. Пользователи Home станут профилями.';
- @override String get connectToJellyfinCard => 'Подключиться к Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Введите URL сервера, имя пользователя и пароль.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Войдите на сервер Jellyfin. Привязывается к ${name}.';
@override String get borrowFromAnotherProfile => 'Использовать подключение другого профиля';
@override String get borrowFromAnotherProfileSubtitle => 'Повторно используйте подключение другого профиля. Для защищённых профилей потребуется PIN.';
}
@@ -2214,7 +2204,6 @@ extension on TranslationsRu {
'auth.waitingForAuth' => 'Ожидание аутентификации...\nВыполните вход в браузере.',
'auth.useBrowser' => 'Использовать браузер',
'auth.or' => 'или',
- 'auth.connectToJellyfin' => 'Подключиться к Jellyfin',
'auth.useQuickConnect' => 'Использовать Quick Connect',
'auth.quickConnectInstructions' => 'Откройте Quick Connect в Jellyfin и введите этот код.',
'auth.quickConnectWaiting' => 'Ожидание подтверждения…',
@@ -2717,9 +2706,9 @@ extension on TranslationsRu {
'videoControls.searchSubtitles' => 'Поиск субтитров',
'videoControls.language' => 'Язык',
'videoControls.noSubtitlesFound' => 'Субтитры не найдены',
+ 'videoControls.subtitleDownloaded' => 'Субтитры загружены',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Субтитры загружены',
'videoControls.subtitleDownloadedNotApplied' => 'Субтитры загружены, но их не удалось выбрать',
'videoControls.subtitleDownloadFailed' => 'Не удалось загрузить субтитры',
'videoControls.searchLanguages' => 'Поиск языков...',
@@ -2875,8 +2864,6 @@ extension on TranslationsRu {
'connections.sessionExpiredOne' => ({required Object name}) => 'Сессия истекла для ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Сессия истекла для ${count} серверов',
'connections.signInAgain' => 'Войти снова',
- 'connections.editJellyfinTitle' => 'Изменить подключение Jellyfin',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Добавьте или удалите URL для ${serverName}. Plezy будет использовать доступный URL с минимальной задержкой.',
'discover.title' => 'Обзор',
'discover.noContentAvailable' => 'Контент недоступен',
'discover.addMediaToLibraries' => 'Добавьте медиафайлы в ваши библиотеки',
@@ -3231,11 +3218,11 @@ extension on TranslationsRu {
'watchTogether.failedToCreate' => 'Не удалось создать сессию',
'watchTogether.failedToJoin' => 'Не удалось присоединиться к сессии',
'watchTogether.sessionCodeCopied' => 'Код сессии скопирован в буфер обмена',
- _ => null,
- } ?? switch (path) {
'watchTogether.relayUnreachable' => 'Сервер ретрансляции недоступен. Блокировка интернет-провайдером может помешать совместному просмотру.',
'watchTogether.reconnectingToHost' => 'Повторное подключение к организатору...',
'watchTogether.currentPlayback' => 'Текущее воспроизведение',
+ _ => null,
+ } ?? switch (path) {
'watchTogether.joinCurrentPlayback' => 'Присоединиться к текущему воспроизведению',
'watchTogether.joinCurrentPlaybackDescription' => 'Вернуться к материалу, который сейчас смотрит организатор',
'watchTogether.failedToOpenCurrentPlayback' => 'Не удалось открыть текущее воспроизведение',
@@ -3662,12 +3649,9 @@ extension on TranslationsRu {
'services.libraryFilter.modeHintWhitelist' => 'Синхронизировать только библиотеки, отмеченные ниже.',
'services.libraryFilter.libraries' => 'Библиотеки',
'services.libraryFilter.noLibraries' => 'Библиотеки недоступны',
- 'addServer.addJellyfinTitle' => 'Добавить сервер Jellyfin',
'addServer.serverUrls' => 'URL-адреса сервера',
'addServer.serverUrlsHelper' => 'Можно указать несколько URL через запятую.',
'addServer.findServer' => 'Найти сервер',
- 'addServer.searchingLocalServers' => 'Поиск локальных серверов Jellyfin...',
- 'addServer.localServers' => 'Локальные серверы Jellyfin',
'addServer.username' => 'Имя пользователя',
'addServer.password' => 'Пароль',
'addServer.signIn' => 'Войти',
@@ -3679,15 +3663,11 @@ extension on TranslationsRu {
'addServer.addPlexTitle' => 'Войти через Plex',
'addServer.pinExpired' => 'Срок действия PIN истёк до входа. Попробуйте снова.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Не удалось зарегистрировать учётную запись: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Введите URL вашего сервера Jellyfin',
'addServer.addConnectionTitle' => 'Добавить подключение',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Добавить в ${name}',
'addServer.signInWithPlexCard' => 'Войти через Plex',
'addServer.signInWithPlexCardSubtitle' => 'Авторизуйте это устройство. Общие серверы будут добавлены.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Авторизуйте аккаунт Plex. Пользователи Home станут профилями.',
- 'addServer.connectToJellyfinCard' => 'Подключиться к Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Введите URL сервера, имя пользователя и пароль.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Войдите на сервер Jellyfin. Привязывается к ${name}.',
'addServer.borrowFromAnotherProfile' => 'Использовать подключение другого профиля',
'addServer.borrowFromAnotherProfileSubtitle' => 'Повторно используйте подключение другого профиля. Для защищённых профилей потребуется PIN.',
_ => null,
diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart
index 712e63c9..934c11a5 100644
--- a/lib/i18n/strings_sv.g.dart
+++ b/lib/i18n/strings_sv.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$sv extends Translations$auth$en {
@override String get waitingForAuth => 'Väntar på autentisering...\nLogga in från din webbläsare.';
@override String get useBrowser => 'Använd webbläsare';
@override String get or => 'eller';
- @override String get connectToJellyfin => 'Anslut till Jellyfin';
@override String get useQuickConnect => 'Använd Quick Connect';
@override String get quickConnectInstructions => 'Öppna Quick Connect i Jellyfin och ange den här koden.';
@override String get quickConnectWaiting => 'Väntar på godkännande…';
@@ -918,8 +917,6 @@ class _Translations$connections$sv extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => 'Sessionen har gått ut för ${name}';
@override String sessionExpiredMany({required Object count}) => 'Sessionen har gått ut för ${count} servrar';
@override String get signInAgain => 'Logga in igen';
- @override String get editJellyfinTitle => 'Redigera Jellyfin-anslutning';
- @override String editJellyfinIntro({required Object serverName}) => 'Lägg till eller ta bort URL:er för ${serverName}. Plezy använder den nåbara URL som har lägst latens.';
}
// Path: discover
@@ -1803,12 +1800,9 @@ class _Translations$addServer$sv extends Translations$addServer$en {
final TranslationsSv _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Lägg till Jellyfin-server';
@override String get serverUrls => 'Server-URL:er';
@override String get serverUrlsHelper => 'Du kan ange flera URL:er avgränsade med kommatecken.';
@override String get findServer => 'Hitta server';
- @override String get searchingLocalServers => 'Söker efter lokala Jellyfin-servrar...';
- @override String get localServers => 'Lokala Jellyfin-servrar';
@override String get username => 'Användarnamn';
@override String get password => 'Lösenord';
@override String get signIn => 'Logga in';
@@ -1820,15 +1814,11 @@ class _Translations$addServer$sv extends Translations$addServer$en {
@override String get addPlexTitle => 'Logga in med Plex';
@override String get pinExpired => 'PIN-koden gick ut innan inloggning. Försök igen.';
@override String failedToRegisterAccount({required Object error}) => 'Kunde inte registrera kontot: ${error}';
- @override String get enterJellyfinUrlError => 'Ange URL till din Jellyfin-server';
@override String get addConnectionTitle => 'Lägg till anslutning';
@override String addConnectionTitleScoped({required Object name}) => 'Lägg till i ${name}';
@override String get signInWithPlexCard => 'Logga in med Plex';
@override String get signInWithPlexCardSubtitle => 'Auktorisera den här enheten. Delade servrar läggs till.';
@override String get signInWithPlexCardSubtitleScoped => 'Auktorisera ett Plex-konto. Home-användare blir profiler.';
- @override String get connectToJellyfinCard => 'Anslut till Jellyfin';
- @override String get connectToJellyfinCardSubtitle => 'Ange server-URL, användarnamn och lösenord.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Logga in på en Jellyfin-server. Kopplas till ${name}.';
@override String get borrowFromAnotherProfile => 'Låna från en annan profil';
@override String get borrowFromAnotherProfileSubtitle => 'Återanvänd en annan profils anslutning. PIN-skyddade profiler kräver en PIN.';
}
@@ -2208,7 +2198,6 @@ extension on TranslationsSv {
'auth.waitingForAuth' => 'Väntar på autentisering...\nLogga in från din webbläsare.',
'auth.useBrowser' => 'Använd webbläsare',
'auth.or' => 'eller',
- 'auth.connectToJellyfin' => 'Anslut till Jellyfin',
'auth.useQuickConnect' => 'Använd Quick Connect',
'auth.quickConnectInstructions' => 'Öppna Quick Connect i Jellyfin och ange den här koden.',
'auth.quickConnectWaiting' => 'Väntar på godkännande…',
@@ -2711,9 +2700,9 @@ extension on TranslationsSv {
'videoControls.searchSubtitles' => 'Sök undertexter',
'videoControls.language' => 'Språk',
'videoControls.noSubtitlesFound' => 'Inga undertexter hittades',
+ 'videoControls.subtitleDownloaded' => 'Undertexten har laddats ned',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => 'Undertexten har laddats ned',
'videoControls.subtitleDownloadedNotApplied' => 'Undertexten laddades ned men kunde inte väljas',
'videoControls.subtitleDownloadFailed' => 'Det gick inte att ladda ned undertexten',
'videoControls.searchLanguages' => 'Sök språk...',
@@ -2869,8 +2858,6 @@ extension on TranslationsSv {
'connections.sessionExpiredOne' => ({required Object name}) => 'Sessionen har gått ut för ${name}',
'connections.sessionExpiredMany' => ({required Object count}) => 'Sessionen har gått ut för ${count} servrar',
'connections.signInAgain' => 'Logga in igen',
- 'connections.editJellyfinTitle' => 'Redigera Jellyfin-anslutning',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => 'Lägg till eller ta bort URL:er för ${serverName}. Plezy använder den nåbara URL som har lägst latens.',
'discover.title' => 'Upptäck',
'discover.noContentAvailable' => 'Inget innehåll tillgängligt',
'discover.addMediaToLibraries' => 'Lägg till medieinnehåll i dina bibliotek',
@@ -3225,11 +3212,11 @@ extension on TranslationsSv {
'watchTogether.failedToCreate' => 'Det gick inte att skapa sessionen',
'watchTogether.failedToJoin' => 'Det gick inte att gå med i sessionen',
'watchTogether.sessionCodeCopied' => 'Sessionskoden har kopierats till urklipp',
- _ => null,
- } ?? switch (path) {
'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.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',
@@ -3656,12 +3643,9 @@ extension on TranslationsSv {
'services.libraryFilter.modeHintWhitelist' => 'Synkronisera endast de bibliotek som markeras nedan.',
'services.libraryFilter.libraries' => 'Bibliotek',
'services.libraryFilter.noLibraries' => 'Inga bibliotek tillgängliga',
- 'addServer.addJellyfinTitle' => 'Lägg till Jellyfin-server',
'addServer.serverUrls' => 'Server-URL:er',
'addServer.serverUrlsHelper' => 'Du kan ange flera URL:er avgränsade med kommatecken.',
'addServer.findServer' => 'Hitta server',
- 'addServer.searchingLocalServers' => 'Söker efter lokala Jellyfin-servrar...',
- 'addServer.localServers' => 'Lokala Jellyfin-servrar',
'addServer.username' => 'Användarnamn',
'addServer.password' => 'Lösenord',
'addServer.signIn' => 'Logga in',
@@ -3673,15 +3657,11 @@ extension on TranslationsSv {
'addServer.addPlexTitle' => 'Logga in med Plex',
'addServer.pinExpired' => 'PIN-koden gick ut innan inloggning. Försök igen.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Kunde inte registrera kontot: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Ange URL till din Jellyfin-server',
'addServer.addConnectionTitle' => 'Lägg till anslutning',
'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Lägg till i ${name}',
'addServer.signInWithPlexCard' => 'Logga in med Plex',
'addServer.signInWithPlexCardSubtitle' => 'Auktorisera den här enheten. Delade servrar läggs till.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Auktorisera ett Plex-konto. Home-användare blir profiler.',
- 'addServer.connectToJellyfinCard' => 'Anslut till Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => 'Ange server-URL, användarnamn och lösenord.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Logga in på en Jellyfin-server. Kopplas till ${name}.',
'addServer.borrowFromAnotherProfile' => 'Låna från en annan profil',
'addServer.borrowFromAnotherProfileSubtitle' => 'Återanvänd en annan profils anslutning. PIN-skyddade profiler kräver en PIN.',
_ => null,
diff --git a/lib/i18n/strings_tr.g.dart b/lib/i18n/strings_tr.g.dart
index 0bf8e92f..260f10f9 100644
--- a/lib/i18n/strings_tr.g.dart
+++ b/lib/i18n/strings_tr.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$tr extends Translations$auth$en {
@override String get waitingForAuth => 'Doğrulama bekleniyor...\nTarayıcınızdan giriş yapın.';
@override String get useBrowser => 'Tarayıcı kullan';
@override String get or => 'veya';
- @override String get connectToJellyfin => 'Jellyfin\'e Bağlan';
@override String get useQuickConnect => 'Hızlı Bağlantıyı Kullan';
@override String get quickConnectInstructions => 'Jellyfin\'de Hızlı Bağlantı\'yı açın ve bu kodu girin.';
@override String get quickConnectWaiting => 'Onay bekleniyor…';
@@ -922,8 +921,6 @@ class _Translations$connections$tr extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => '${name} için oturum süresi doldu';
@override String sessionExpiredMany({required Object count}) => '${count} sunucu için oturum süresi doldu';
@override String get signInAgain => 'Tekrar giriş yap';
- @override String get editJellyfinTitle => 'Jellyfin bağlantısını düzenle';
- @override String editJellyfinIntro({required Object serverName}) => '${serverName} için URL\'ler ekleyin veya kaldırın. Plezy, en düşük gecikmeye sahip ulaşılabilir URL\'yi kullanacaktır.';
}
// Path: discover
@@ -1814,12 +1811,9 @@ class _Translations$addServer$tr extends Translations$addServer$en {
final TranslationsTr _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin sunucusu ekle';
@override String get serverUrls => 'Sunucu URL\'leri';
@override String get serverUrlsHelper => 'Virgülle ayrılmış birden fazla URL\'ye izin verilir.';
@override String get findServer => 'Sunucu bul';
- @override String get searchingLocalServers => 'Yerel Jellyfin sunucuları aranıyor...';
- @override String get localServers => 'Yerel Jellyfin sunucuları';
@override String get username => 'Kullanıcı adı';
@override String get password => 'Şifre';
@override String get signIn => 'Giriş Yap';
@@ -1831,15 +1825,11 @@ class _Translations$addServer$tr extends Translations$addServer$en {
@override String get addPlexTitle => 'Plex ile Giriş Yap';
@override String get pinExpired => 'Giriş yapmadan önce PIN süresi doldu. Lütfen tekrar deneyin.';
@override String failedToRegisterAccount({required Object error}) => 'Hesap kaydı başarısız oldu: ${error}';
- @override String get enterJellyfinUrlError => 'Jellyfin sunucu URL\'nizi girin';
@override String get addConnectionTitle => 'Bağlantı ekle';
@override String addConnectionTitleScoped({required Object name}) => '${name} profiline ekle';
@override String get signInWithPlexCard => 'Plex ile Giriş Yap';
@override String get signInWithPlexCardSubtitle => 'Bu cihazı yetkilendirin. Paylaşılan sunucular eklenir.';
@override String get signInWithPlexCardSubtitleScoped => 'Bir Plex hesabını yetkilendirin. Ev kullanıcıları profile dönüşür.';
- @override String get connectToJellyfinCard => 'Jellyfin\'e Bağlan';
- @override String get connectToJellyfinCardSubtitle => 'Sunucu URL\'nizi, kullanıcı adınızı ve şifrenizi girin.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Bir Jellyfin sunucusuna giriş yapın. ${name} profiline bağlanır.';
@override String get borrowFromAnotherProfile => 'Başka bir profilden ödünç al';
@override String get borrowFromAnotherProfileSubtitle => 'Başka bir profilin bağlantısını yeniden kullanın. PIN korumalı profiller bir PIN gerektirir.';
}
@@ -2219,7 +2209,6 @@ extension on TranslationsTr {
'auth.waitingForAuth' => 'Doğrulama bekleniyor...\nTarayıcınızdan giriş yapın.',
'auth.useBrowser' => 'Tarayıcı kullan',
'auth.or' => 'veya',
- 'auth.connectToJellyfin' => 'Jellyfin\'e Bağlan',
'auth.useQuickConnect' => 'Hızlı Bağlantıyı Kullan',
'auth.quickConnectInstructions' => 'Jellyfin\'de Hızlı Bağlantı\'yı açın ve bu kodu girin.',
'auth.quickConnectWaiting' => 'Onay bekleniyor…',
@@ -2722,9 +2711,9 @@ extension on TranslationsTr {
'videoControls.noChaptersAvailable' => 'Kısım bulunmuyor',
'videoControls.queue' => 'Kuyruk',
'videoControls.noQueueItems' => 'Kuyrukta öge yok',
+ 'videoControls.searchSubtitles' => 'Altyazı Ara',
_ => null,
} ?? switch (path) {
- 'videoControls.searchSubtitles' => 'Altyazı Ara',
'videoControls.language' => 'Dil',
'videoControls.noSubtitlesFound' => 'Altyazı bulunamadı',
'videoControls.subtitleDownloaded' => 'Altyazı indirildi',
@@ -2884,8 +2873,6 @@ extension on TranslationsTr {
'connections.sessionExpiredOne' => ({required Object name}) => '${name} için oturum süresi doldu',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} sunucu için oturum süresi doldu',
'connections.signInAgain' => 'Tekrar giriş yap',
- 'connections.editJellyfinTitle' => 'Jellyfin bağlantısını düzenle',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName} için URL\'ler ekleyin veya kaldırın. Plezy, en düşük gecikmeye sahip ulaşılabilir URL\'yi kullanacaktır.',
'discover.title' => 'Keşfet',
'discover.noContentAvailable' => 'İçerik bulunmuyor',
'discover.addMediaToLibraries' => 'Kitaplıklarınıza biraz medya ekleyin',
@@ -3236,11 +3223,11 @@ extension on TranslationsTr {
'watchTogether.enterCodeHint' => '5 karakterlik kodu girin',
'watchTogether.pasteFromClipboard' => 'Panodan yapıştır',
'watchTogether.pleaseEnterCode' => 'Lütfen bir oturum kodu girin',
- _ => null,
- } ?? switch (path) {
'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.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.',
@@ -3678,12 +3665,9 @@ extension on TranslationsTr {
'services.libraryFilter.modeHintWhitelist' => 'Yalnızca aşağıda işaretlenen kitaplıkları eşitle.',
'services.libraryFilter.libraries' => 'Kitaplıklar',
'services.libraryFilter.noLibraries' => 'Kitaplık bulunmuyor',
- 'addServer.addJellyfinTitle' => 'Jellyfin sunucusu ekle',
'addServer.serverUrls' => 'Sunucu URL\'leri',
'addServer.serverUrlsHelper' => 'Virgülle ayrılmış birden fazla URL\'ye izin verilir.',
'addServer.findServer' => 'Sunucu bul',
- 'addServer.searchingLocalServers' => 'Yerel Jellyfin sunucuları aranıyor...',
- 'addServer.localServers' => 'Yerel Jellyfin sunucuları',
'addServer.username' => 'Kullanıcı adı',
'addServer.password' => 'Şifre',
'addServer.signIn' => 'Giriş Yap',
@@ -3695,15 +3679,11 @@ extension on TranslationsTr {
'addServer.addPlexTitle' => 'Plex ile Giriş Yap',
'addServer.pinExpired' => 'Giriş yapmadan önce PIN süresi doldu. Lütfen tekrar deneyin.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Hesap kaydı başarısız oldu: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Jellyfin sunucu URL\'nizi girin',
'addServer.addConnectionTitle' => 'Bağlantı ekle',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} profiline ekle',
'addServer.signInWithPlexCard' => 'Plex ile Giriş Yap',
'addServer.signInWithPlexCardSubtitle' => 'Bu cihazı yetkilendirin. Paylaşılan sunucular eklenir.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Bir Plex hesabını yetkilendirin. Ev kullanıcıları profile dönüşür.',
- 'addServer.connectToJellyfinCard' => 'Jellyfin\'e Bağlan',
- 'addServer.connectToJellyfinCardSubtitle' => 'Sunucu URL\'nizi, kullanıcı adınızı ve şifrenizi girin.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Bir Jellyfin sunucusuna giriş yapın. ${name} profiline bağlanır.',
'addServer.borrowFromAnotherProfile' => 'Başka bir profilden ödünç al',
'addServer.borrowFromAnotherProfileSubtitle' => 'Başka bir profilin bağlantısını yeniden kullanın. PIN korumalı profiller bir PIN gerektirir.',
_ => null,
diff --git a/lib/i18n/strings_uz.g.dart b/lib/i18n/strings_uz.g.dart
index 66c1cb09..6cc42650 100644
--- a/lib/i18n/strings_uz.g.dart
+++ b/lib/i18n/strings_uz.g.dart
@@ -115,7 +115,6 @@ class _Translations$auth$uz extends Translations$auth$en {
@override String get waitingForAuth => 'Tasdiqlanish kutilmoqda...\nBrauzeringizdan kiring.';
@override String get useBrowser => 'Brauzerdan foydalanish';
@override String get or => 'yoki';
- @override String get connectToJellyfin => 'Jellyfin-ga ulanish';
@override String get useQuickConnect => 'Tezkor ulanishdan foydalanish';
@override String get quickConnectInstructions => 'Jellyfin-da Tezkor ulanishni oching va ushbu kodni kiriting.';
@override String get quickConnectWaiting => 'Tasdiq kutilmoqda…';
@@ -922,8 +921,6 @@ class _Translations$connections$uz extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => '${name} uchun seans vaqti tugadi';
@override String sessionExpiredMany({required Object count}) => '${count} server uchun seans vaqti tugadi';
@override String get signInAgain => 'Qaytadan kirish';
- @override String get editJellyfinTitle => 'Jellyfin ulanishini tahrirlash';
- @override String editJellyfinIntro({required Object serverName}) => '${serverName} uchun URL manzilini qoʻshing yoki oʻchiring.';
}
// Path: discover
@@ -1814,12 +1811,9 @@ class _Translations$addServer$uz extends Translations$addServer$en {
final TranslationsUz _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => 'Jellyfin serverini qoʻshish';
@override String get serverUrls => 'Server URL-lari';
@override String get serverUrlsHelper => 'Vergul bilan ajratilgan bir nechta URL manziliga ruxsat beriladi.';
@override String get findServer => 'Serverni topish';
- @override String get searchingLocalServers => 'Mahalliy Jellyfin serverlari qidirilmoqda...';
- @override String get localServers => 'Mahalliy Jellyfin serverlari';
@override String get username => 'Foydalanuvchi nomi';
@override String get password => 'Parol';
@override String get signIn => 'Kirish';
@@ -1831,15 +1825,11 @@ class _Translations$addServer$uz extends Translations$addServer$en {
@override String get addPlexTitle => 'Plex orqali kirish';
@override String get pinExpired => 'PIN kod vaqti tugadi.';
@override String failedToRegisterAccount({required Object error}) => 'Hisobni roʻyxatdan oʻtkazishda xatolik: ${error}';
- @override String get enterJellyfinUrlError => 'Jellyfin server URL-ini kiriting';
@override String get addConnectionTitle => 'Ulanish qoʻshish';
@override String addConnectionTitleScoped({required Object name}) => '${name} profiliga qoʻshish';
@override String get signInWithPlexCard => 'Plex orqali kirish';
@override String get signInWithPlexCardSubtitle => 'Ushbu qurilmani avtorizatsiya qiling.';
@override String get signInWithPlexCardSubtitleScoped => 'Plex hisobini avtorizatsiya qiling.';
- @override String get connectToJellyfinCard => 'Jellyfin-ga ulanish';
- @override String get connectToJellyfinCardSubtitle => 'Server URL, foydalanuvchi nomi va parolingizni kiriting.';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Jellyfin serveriga kiring. ${name} profiliga ulanmoqda.';
@override String get borrowFromAnotherProfile => 'Boshqa profildan olish';
@override String get borrowFromAnotherProfileSubtitle => 'Boshqa profilning ulanishidan qayta foydalaning.';
}
@@ -2219,7 +2209,6 @@ extension on TranslationsUz {
'auth.waitingForAuth' => 'Tasdiqlanish kutilmoqda...\nBrauzeringizdan kiring.',
'auth.useBrowser' => 'Brauzerdan foydalanish',
'auth.or' => 'yoki',
- 'auth.connectToJellyfin' => 'Jellyfin-ga ulanish',
'auth.useQuickConnect' => 'Tezkor ulanishdan foydalanish',
'auth.quickConnectInstructions' => 'Jellyfin-da Tezkor ulanishni oching va ushbu kodni kiriting.',
'auth.quickConnectWaiting' => 'Tasdiq kutilmoqda…',
@@ -2722,9 +2711,9 @@ extension on TranslationsUz {
'videoControls.noChaptersAvailable' => 'Boʻlimlar mavjud emas',
'videoControls.queue' => 'Navbat',
'videoControls.noQueueItems' => 'Navbatda elementlar yoʻq',
+ 'videoControls.searchSubtitles' => 'Subtitr qidirish',
_ => null,
} ?? switch (path) {
- 'videoControls.searchSubtitles' => 'Subtitr qidirish',
'videoControls.language' => 'Til',
'videoControls.noSubtitlesFound' => 'Subtitr topilmadi',
'videoControls.subtitleDownloaded' => 'Subtitr yuklab olindi',
@@ -2884,8 +2873,6 @@ extension on TranslationsUz {
'connections.sessionExpiredOne' => ({required Object name}) => '${name} uchun seans vaqti tugadi',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} server uchun seans vaqti tugadi',
'connections.signInAgain' => 'Qaytadan kirish',
- 'connections.editJellyfinTitle' => 'Jellyfin ulanishini tahrirlash',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '${serverName} uchun URL manzilini qoʻshing yoki oʻchiring.',
'discover.title' => 'Kashf qilish',
'discover.noContentAvailable' => 'Kontent mavjud emas',
'discover.addMediaToLibraries' => 'Kutubxonalaringizga media qoʻshing',
@@ -3236,11 +3223,11 @@ extension on TranslationsUz {
'watchTogether.enterCodeHint' => '5 xonali kodni kiriting',
'watchTogether.pasteFromClipboard' => 'Xotiradan joylash',
'watchTogether.pleaseEnterCode' => 'Seans kodini kiriting',
- _ => null,
- } ?? switch (path) {
'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.failedToJoin' => 'Seansga qoʻshilib boʻlmadi',
'watchTogether.sessionCodeCopied' => 'Seans kodi nusxalandi',
'watchTogether.relayUnreachable' => 'Rele serveriga ulanib boʻlmadi.',
@@ -3678,12 +3665,9 @@ extension on TranslationsUz {
'services.libraryFilter.modeHintWhitelist' => 'Faqat quyida tanlangan kutubxonalarni sinxronlash.',
'services.libraryFilter.libraries' => 'Kutubxonalar',
'services.libraryFilter.noLibraries' => 'Kutubxonalar yoʻq',
- 'addServer.addJellyfinTitle' => 'Jellyfin serverini qoʻshish',
'addServer.serverUrls' => 'Server URL-lari',
'addServer.serverUrlsHelper' => 'Vergul bilan ajratilgan bir nechta URL manziliga ruxsat beriladi.',
'addServer.findServer' => 'Serverni topish',
- 'addServer.searchingLocalServers' => 'Mahalliy Jellyfin serverlari qidirilmoqda...',
- 'addServer.localServers' => 'Mahalliy Jellyfin serverlari',
'addServer.username' => 'Foydalanuvchi nomi',
'addServer.password' => 'Parol',
'addServer.signIn' => 'Kirish',
@@ -3695,15 +3679,11 @@ extension on TranslationsUz {
'addServer.addPlexTitle' => 'Plex orqali kirish',
'addServer.pinExpired' => 'PIN kod vaqti tugadi.',
'addServer.failedToRegisterAccount' => ({required Object error}) => 'Hisobni roʻyxatdan oʻtkazishda xatolik: ${error}',
- 'addServer.enterJellyfinUrlError' => 'Jellyfin server URL-ini kiriting',
'addServer.addConnectionTitle' => 'Ulanish qoʻshish',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '${name} profiliga qoʻshish',
'addServer.signInWithPlexCard' => 'Plex orqali kirish',
'addServer.signInWithPlexCardSubtitle' => 'Ushbu qurilmani avtorizatsiya qiling.',
'addServer.signInWithPlexCardSubtitleScoped' => 'Plex hisobini avtorizatsiya qiling.',
- 'addServer.connectToJellyfinCard' => 'Jellyfin-ga ulanish',
- 'addServer.connectToJellyfinCardSubtitle' => 'Server URL, foydalanuvchi nomi va parolingizni kiriting.',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Jellyfin serveriga kiring. ${name} profiliga ulanmoqda.',
'addServer.borrowFromAnotherProfile' => 'Boshqa profildan olish',
'addServer.borrowFromAnotherProfileSubtitle' => 'Boshqa profilning ulanishidan qayta foydalaning.',
_ => null,
diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart
index 3db5702b..907da77b 100644
--- a/lib/i18n/strings_zh.g.dart
+++ b/lib/i18n/strings_zh.g.dart
@@ -115,7 +115,6 @@ class Translations$auth$zh extends Translations$auth$en {
@override String get waitingForAuth => '正在等待身份验证…\n请在浏览器中登录。';
@override String get useBrowser => '使用浏览器';
@override String get or => '或';
- @override String get connectToJellyfin => '连接到 Jellyfin';
@override String get useQuickConnect => '使用 Quick Connect';
@override String get quickConnectInstructions => '在 Jellyfin 中打开 Quick Connect 并输入此代码。';
@override String get quickConnectWaiting => '等待批准…';
@@ -917,8 +916,6 @@ class Translations$connections$zh extends Translations$connections$en {
@override String sessionExpiredOne({required Object name}) => '${name} 的会话已过期';
@override String sessionExpiredMany({required Object count}) => '${count} 个服务器的会话已过期';
@override String get signInAgain => '重新登录';
- @override String get editJellyfinTitle => '编辑 Jellyfin 连接';
- @override String editJellyfinIntro({required Object serverName}) => '添加或移除 ${serverName} 的 URL。Plezy 会使用可访问且延迟最低的地址。';
}
// Path: discover
@@ -1800,12 +1797,9 @@ class Translations$addServer$zh extends Translations$addServer$en {
final TranslationsZh _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => '添加 Jellyfin 服务器';
@override String get serverUrls => '服务器 URL';
@override String get serverUrlsHelper => '可输入多个 URL,并用逗号分隔。';
@override String get findServer => '查找服务器';
- @override String get searchingLocalServers => '正在查找本地 Jellyfin 服务器…';
- @override String get localServers => '本地 Jellyfin 服务器';
@override String get username => '用户名';
@override String get password => '密码';
@override String get signIn => '登录';
@@ -1817,15 +1811,11 @@ class Translations$addServer$zh extends Translations$addServer$en {
@override String get addPlexTitle => '使用 Plex 登录';
@override String get pinExpired => 'PIN 在登录前已过期。请重试。';
@override String failedToRegisterAccount({required Object error}) => '注册账户失败:${error}';
- @override String get enterJellyfinUrlError => '请输入 Jellyfin 服务器 URL';
@override String get addConnectionTitle => '添加连接';
@override String addConnectionTitleScoped({required Object name}) => '添加到 ${name}';
@override String get signInWithPlexCard => '使用 Plex 登录';
@override String get signInWithPlexCardSubtitle => '授权此设备。共享服务器会被添加。';
@override String get signInWithPlexCardSubtitleScoped => '授权一个 Plex 账户。Plex Home 用户将成为 Plezy 用户资料。';
- @override String get connectToJellyfinCard => '连接到 Jellyfin';
- @override String get connectToJellyfinCardSubtitle => '输入服务器 URL、用户名和密码。';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => '登录到 Jellyfin 服务器。绑定到 ${name}。';
@override String get borrowFromAnotherProfile => '使用其他用户资料的连接';
@override String get borrowFromAnotherProfileSubtitle => '复用另一个用户资料的连接。受 PIN 保护的用户资料需要输入 PIN。';
}
@@ -2205,7 +2195,6 @@ extension on TranslationsZh {
'auth.waitingForAuth' => '正在等待身份验证…\n请在浏览器中登录。',
'auth.useBrowser' => '使用浏览器',
'auth.or' => '或',
- 'auth.connectToJellyfin' => '连接到 Jellyfin',
'auth.useQuickConnect' => '使用 Quick Connect',
'auth.quickConnectInstructions' => '在 Jellyfin 中打开 Quick Connect 并输入此代码。',
'auth.quickConnectWaiting' => '等待批准…',
@@ -2708,9 +2697,9 @@ extension on TranslationsZh {
'videoControls.searchSubtitles' => '搜索字幕',
'videoControls.language' => '语言',
'videoControls.noSubtitlesFound' => '未找到字幕',
+ 'videoControls.subtitleDownloaded' => '字幕已下载',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => '字幕已下载',
'videoControls.subtitleDownloadedNotApplied' => '字幕已下载,但无法选择',
'videoControls.subtitleDownloadFailed' => '字幕下载失败',
'videoControls.searchLanguages' => '搜索语言…',
@@ -2866,8 +2855,6 @@ extension on TranslationsZh {
'connections.sessionExpiredOne' => ({required Object name}) => '${name} 的会话已过期',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} 个服务器的会话已过期',
'connections.signInAgain' => '重新登录',
- 'connections.editJellyfinTitle' => '编辑 Jellyfin 连接',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '添加或移除 ${serverName} 的 URL。Plezy 会使用可访问且延迟最低的地址。',
'discover.title' => '发现',
'discover.noContentAvailable' => '没有可用内容',
'discover.addMediaToLibraries' => '请向你的媒体库添加一些媒体',
@@ -3222,11 +3209,11 @@ extension on TranslationsZh {
'watchTogether.failedToCreate' => '创建会话失败',
'watchTogether.failedToJoin' => '加入会话失败',
'watchTogether.sessionCodeCopied' => '会话代码已复制到剪贴板',
- _ => null,
- } ?? switch (path) {
'watchTogether.relayUnreachable' => '无法访问中继服务器。网络运营商的屏蔽可能导致“一起看”不可用。',
'watchTogether.reconnectingToHost' => '正在重新连接到主持人…',
'watchTogether.currentPlayback' => '当前播放',
+ _ => null,
+ } ?? switch (path) {
'watchTogether.joinCurrentPlayback' => '加入当前播放',
'watchTogether.joinCurrentPlaybackDescription' => '加入主持人当前正在观看的内容',
'watchTogether.failedToOpenCurrentPlayback' => '无法打开当前播放',
@@ -3653,12 +3640,9 @@ extension on TranslationsZh {
'services.libraryFilter.modeHintWhitelist' => '仅同步下方勾选的媒体库。',
'services.libraryFilter.libraries' => '媒体库',
'services.libraryFilter.noLibraries' => '没有可用的媒体库',
- 'addServer.addJellyfinTitle' => '添加 Jellyfin 服务器',
'addServer.serverUrls' => '服务器 URL',
'addServer.serverUrlsHelper' => '可输入多个 URL,并用逗号分隔。',
'addServer.findServer' => '查找服务器',
- 'addServer.searchingLocalServers' => '正在查找本地 Jellyfin 服务器…',
- 'addServer.localServers' => '本地 Jellyfin 服务器',
'addServer.username' => '用户名',
'addServer.password' => '密码',
'addServer.signIn' => '登录',
@@ -3670,15 +3654,11 @@ extension on TranslationsZh {
'addServer.addPlexTitle' => '使用 Plex 登录',
'addServer.pinExpired' => 'PIN 在登录前已过期。请重试。',
'addServer.failedToRegisterAccount' => ({required Object error}) => '注册账户失败:${error}',
- 'addServer.enterJellyfinUrlError' => '请输入 Jellyfin 服务器 URL',
'addServer.addConnectionTitle' => '添加连接',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '添加到 ${name}',
'addServer.signInWithPlexCard' => '使用 Plex 登录',
'addServer.signInWithPlexCardSubtitle' => '授权此设备。共享服务器会被添加。',
'addServer.signInWithPlexCardSubtitleScoped' => '授权一个 Plex 账户。Plex Home 用户将成为 Plezy 用户资料。',
- 'addServer.connectToJellyfinCard' => '连接到 Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => '输入服务器 URL、用户名和密码。',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => '登录到 Jellyfin 服务器。绑定到 ${name}。',
'addServer.borrowFromAnotherProfile' => '使用其他用户资料的连接',
'addServer.borrowFromAnotherProfileSubtitle' => '复用另一个用户资料的连接。受 PIN 保护的用户资料需要输入 PIN。',
_ => null,
diff --git a/lib/i18n/strings_zh_Hant.g.dart b/lib/i18n/strings_zh_Hant.g.dart
index 17b8735c..9c695774 100644
--- a/lib/i18n/strings_zh_Hant.g.dart
+++ b/lib/i18n/strings_zh_Hant.g.dart
@@ -116,7 +116,6 @@ class _Translations$auth$zh_Hant extends Translations$auth$zh {
@override String get waitingForAuth => '正在等待驗證…\n請在瀏覽器中登入。';
@override String get useBrowser => '使用瀏覽器';
@override String get or => '或';
- @override String get connectToJellyfin => '連線至 Jellyfin';
@override String get useQuickConnect => '使用快速連線(Quick Connect)';
@override String get quickConnectInstructions => '在 Jellyfin 中開啟快速連線並輸入此代碼。';
@override String get quickConnectWaiting => '等待核准…';
@@ -918,8 +917,6 @@ class _Translations$connections$zh_Hant extends Translations$connections$zh {
@override String sessionExpiredOne({required Object name}) => '${name} 的工作階段已過期';
@override String sessionExpiredMany({required Object count}) => '${count} 個伺服器的工作階段已過期';
@override String get signInAgain => '重新登入';
- @override String get editJellyfinTitle => '編輯 Jellyfin 連線';
- @override String editJellyfinIntro({required Object serverName}) => '新增或移除 ${serverName} 的 URL。Plezy 會自動選擇可連線且延遲最低的網址。';
}
// Path: discover
@@ -1801,12 +1798,9 @@ class _Translations$addServer$zh_Hant extends Translations$addServer$zh {
final TranslationsZhHant _root; // ignore: unused_field
// Translations
- @override String get addJellyfinTitle => '新增 Jellyfin 伺服器';
@override String get serverUrls => '伺服器 URL';
@override String get serverUrlsHelper => '可輸入多個連線網址,以逗號區隔。';
@override String get findServer => '尋找伺服器';
- @override String get searchingLocalServers => '正在尋找本地 Jellyfin 伺服器…';
- @override String get localServers => '本地 Jellyfin 伺服器';
@override String get username => '使用者名稱';
@override String get password => '密碼';
@override String get signIn => '登入';
@@ -1818,15 +1812,11 @@ class _Translations$addServer$zh_Hant extends Translations$addServer$zh {
@override String get addPlexTitle => '使用 Plex 登入';
@override String get pinExpired => 'PIN 碼在登入前已過期。請重試。';
@override String failedToRegisterAccount({required Object error}) => '註冊帳戶失敗:${error}';
- @override String get enterJellyfinUrlError => '請輸入您的 Jellyfin 伺服器 URL';
@override String get addConnectionTitle => '新增連線';
@override String addConnectionTitleScoped({required Object name}) => '新增連線至 ${name}';
@override String get signInWithPlexCard => '使用 Plex 登入';
@override String get signInWithPlexCardSubtitle => '授權此裝置。將會新增共享的伺服器連線。';
@override String get signInWithPlexCardSubtitleScoped => '授權 Plex 帳戶。Home 使用者會建立為個別的使用者設定檔。';
- @override String get connectToJellyfinCard => '連線至 Jellyfin';
- @override String get connectToJellyfinCardSubtitle => '輸入伺服器 URL、使用者名稱與密碼。';
- @override String connectToJellyfinCardSubtitleScoped({required Object name}) => '登入 Jellyfin 伺服器,並綁定至 ${name} 使用者設定檔。';
@override String get borrowFromAnotherProfile => '從另一個使用者設定檔共用';
@override String get borrowFromAnotherProfileSubtitle => '重複使用另一個使用者設定檔的連線資訊。受 PIN 碼保護的使用者設定檔需輸入 PIN 碼。';
}
@@ -2206,7 +2196,6 @@ extension on TranslationsZhHant {
'auth.waitingForAuth' => '正在等待驗證…\n請在瀏覽器中登入。',
'auth.useBrowser' => '使用瀏覽器',
'auth.or' => '或',
- 'auth.connectToJellyfin' => '連線至 Jellyfin',
'auth.useQuickConnect' => '使用快速連線(Quick Connect)',
'auth.quickConnectInstructions' => '在 Jellyfin 中開啟快速連線並輸入此代碼。',
'auth.quickConnectWaiting' => '等待核准…',
@@ -2709,9 +2698,9 @@ extension on TranslationsZhHant {
'videoControls.searchSubtitles' => '搜尋字幕',
'videoControls.language' => '語言',
'videoControls.noSubtitlesFound' => '找不到字幕',
+ 'videoControls.subtitleDownloaded' => '字幕下載成功',
_ => null,
} ?? switch (path) {
- 'videoControls.subtitleDownloaded' => '字幕下載成功',
'videoControls.subtitleDownloadedNotApplied' => '字幕已下載,但無法套用',
'videoControls.subtitleDownloadFailed' => '字幕下載失敗',
'videoControls.searchLanguages' => '搜尋語言…',
@@ -2867,8 +2856,6 @@ extension on TranslationsZhHant {
'connections.sessionExpiredOne' => ({required Object name}) => '${name} 的工作階段已過期',
'connections.sessionExpiredMany' => ({required Object count}) => '${count} 個伺服器的工作階段已過期',
'connections.signInAgain' => '重新登入',
- 'connections.editJellyfinTitle' => '編輯 Jellyfin 連線',
- 'connections.editJellyfinIntro' => ({required Object serverName}) => '新增或移除 ${serverName} 的 URL。Plezy 會自動選擇可連線且延遲最低的網址。',
'discover.title' => '發現',
'discover.noContentAvailable' => '沒有可用內容',
'discover.addMediaToLibraries' => '請向您的媒體庫新增一些媒體內容',
@@ -3223,11 +3210,11 @@ extension on TranslationsZhHant {
'watchTogether.failedToCreate' => '建立工作階段失敗',
'watchTogether.failedToJoin' => '加入工作階段失敗',
'watchTogether.sessionCodeCopied' => '工作階段代碼已複製到剪貼簿',
- _ => null,
- } ?? switch (path) {
'watchTogether.relayUnreachable' => '無法連線至中繼伺服器。ISP 封鎖可能會導致「一起看」無法使用。',
'watchTogether.reconnectingToHost' => '正在重新連線至主持人…',
'watchTogether.currentPlayback' => '目前播放內容',
+ _ => null,
+ } ?? switch (path) {
'watchTogether.joinCurrentPlayback' => '加入目前播放點',
'watchTogether.joinCurrentPlaybackDescription' => '同步至主持人目前的觀看進度',
'watchTogether.failedToOpenCurrentPlayback' => '無法開啟目前播放點',
@@ -3654,12 +3641,9 @@ extension on TranslationsZhHant {
'services.libraryFilter.modeHintWhitelist' => '僅同步下方已勾選的媒體庫。',
'services.libraryFilter.libraries' => '媒體庫',
'services.libraryFilter.noLibraries' => '沒有可用的媒體庫',
- 'addServer.addJellyfinTitle' => '新增 Jellyfin 伺服器',
'addServer.serverUrls' => '伺服器 URL',
'addServer.serverUrlsHelper' => '可輸入多個連線網址,以逗號區隔。',
'addServer.findServer' => '尋找伺服器',
- 'addServer.searchingLocalServers' => '正在尋找本地 Jellyfin 伺服器…',
- 'addServer.localServers' => '本地 Jellyfin 伺服器',
'addServer.username' => '使用者名稱',
'addServer.password' => '密碼',
'addServer.signIn' => '登入',
@@ -3671,15 +3655,11 @@ extension on TranslationsZhHant {
'addServer.addPlexTitle' => '使用 Plex 登入',
'addServer.pinExpired' => 'PIN 碼在登入前已過期。請重試。',
'addServer.failedToRegisterAccount' => ({required Object error}) => '註冊帳戶失敗:${error}',
- 'addServer.enterJellyfinUrlError' => '請輸入您的 Jellyfin 伺服器 URL',
'addServer.addConnectionTitle' => '新增連線',
'addServer.addConnectionTitleScoped' => ({required Object name}) => '新增連線至 ${name}',
'addServer.signInWithPlexCard' => '使用 Plex 登入',
'addServer.signInWithPlexCardSubtitle' => '授權此裝置。將會新增共享的伺服器連線。',
'addServer.signInWithPlexCardSubtitleScoped' => '授權 Plex 帳戶。Home 使用者會建立為個別的使用者設定檔。',
- 'addServer.connectToJellyfinCard' => '連線至 Jellyfin',
- 'addServer.connectToJellyfinCardSubtitle' => '輸入伺服器 URL、使用者名稱與密碼。',
- 'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => '登入 Jellyfin 伺服器,並綁定至 ${name} 使用者設定檔。',
'addServer.borrowFromAnotherProfile' => '從另一個使用者設定檔共用',
'addServer.borrowFromAnotherProfileSubtitle' => '重複使用另一個使用者設定檔的連線資訊。受 PIN 碼保護的使用者設定檔需輸入 PIN 碼。',
_ => null,
diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json
index d2785cac..e22ab0dc 100644
--- a/lib/i18n/sv.i18n.json
+++ b/lib/i18n/sv.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Väntar på autentisering...\nLogga in från din webbläsare.",
"useBrowser": "Använd webbläsare",
"or": "eller",
- "connectToJellyfin": "Anslut till Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Använd Quick Connect",
"quickConnectInstructions": "Öppna Quick Connect i Jellyfin och ange den här koden.",
"quickConnectWaiting": "Väntar på godkännande…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "Sessionen har gått ut för ${name}",
"sessionExpiredMany": "Sessionen har gått ut för ${count} servrar",
"signInAgain": "Logga in igen",
- "editJellyfinTitle": "Redigera Jellyfin-anslutning",
- "editJellyfinIntro": "Lägg till eller ta bort URL:er för ${serverName}. Plezy använder den nåbara URL som har lägst latens."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Upptäck",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Lägg till Jellyfin-server",
+ "addMediaBrowserTitle": "",
"serverUrls": "Server-URL:er",
"serverUrlsHelper": "Du kan ange flera URL:er avgränsade med kommatecken.",
"findServer": "Hitta server",
- "searchingLocalServers": "Söker efter lokala Jellyfin-servrar...",
- "localServers": "Lokala Jellyfin-servrar",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Användarnamn",
"password": "Lösenord",
"signIn": "Logga in",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Logga in med Plex",
"pinExpired": "PIN-koden gick ut innan inloggning. Försök igen.",
"failedToRegisterAccount": "Kunde inte registrera kontot: ${error}",
- "enterJellyfinUrlError": "Ange URL till din Jellyfin-server",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Lägg till anslutning",
"addConnectionTitleScoped": "Lägg till i ${name}",
"signInWithPlexCard": "Logga in med Plex",
"signInWithPlexCardSubtitle": "Auktorisera den här enheten. Delade servrar läggs till.",
"signInWithPlexCardSubtitleScoped": "Auktorisera ett Plex-konto. Home-användare blir profiler.",
- "connectToJellyfinCard": "Anslut till Jellyfin",
- "connectToJellyfinCardSubtitle": "Ange server-URL, användarnamn och lösenord.",
- "connectToJellyfinCardSubtitleScoped": "Logga in på en Jellyfin-server. Kopplas till ${name}.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Låna från en annan profil",
"borrowFromAnotherProfileSubtitle": "Återanvänd en annan profils anslutning. PIN-skyddade profiler kräver en PIN."
}
diff --git a/lib/i18n/tr.i18n.json b/lib/i18n/tr.i18n.json
index 9cdffbbe..5ecdc84e 100644
--- a/lib/i18n/tr.i18n.json
+++ b/lib/i18n/tr.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Doğrulama bekleniyor...\nTarayıcınızdan giriş yapın.",
"useBrowser": "Tarayıcı kullan",
"or": "veya",
- "connectToJellyfin": "Jellyfin'e Bağlan",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Hızlı Bağlantıyı Kullan",
"quickConnectInstructions": "Jellyfin'de Hızlı Bağlantı'yı açın ve bu kodu girin.",
"quickConnectWaiting": "Onay bekleniyor…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "${name} için oturum süresi doldu",
"sessionExpiredMany": "${count} sunucu için oturum süresi doldu",
"signInAgain": "Tekrar giriş yap",
- "editJellyfinTitle": "Jellyfin bağlantısını düzenle",
- "editJellyfinIntro": "${serverName} için URL'ler ekleyin veya kaldırın. Plezy, en düşük gecikmeye sahip ulaşılabilir URL'yi kullanacaktır."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Keşfet",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin sunucusu ekle",
+ "addMediaBrowserTitle": "",
"serverUrls": "Sunucu URL'leri",
"serverUrlsHelper": "Virgülle ayrılmış birden fazla URL'ye izin verilir.",
"findServer": "Sunucu bul",
- "searchingLocalServers": "Yerel Jellyfin sunucuları aranıyor...",
- "localServers": "Yerel Jellyfin sunucuları",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Kullanıcı adı",
"password": "Şifre",
"signIn": "Giriş Yap",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Plex ile Giriş Yap",
"pinExpired": "Giriş yapmadan önce PIN süresi doldu. Lütfen tekrar deneyin.",
"failedToRegisterAccount": "Hesap kaydı başarısız oldu: ${error}",
- "enterJellyfinUrlError": "Jellyfin sunucu URL'nizi girin",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Bağlantı ekle",
"addConnectionTitleScoped": "${name} profiline ekle",
"signInWithPlexCard": "Plex ile Giriş Yap",
"signInWithPlexCardSubtitle": "Bu cihazı yetkilendirin. Paylaşılan sunucular eklenir.",
"signInWithPlexCardSubtitleScoped": "Bir Plex hesabını yetkilendirin. Ev kullanıcıları profile dönüşür.",
- "connectToJellyfinCard": "Jellyfin'e Bağlan",
- "connectToJellyfinCardSubtitle": "Sunucu URL'nizi, kullanıcı adınızı ve şifrenizi girin.",
- "connectToJellyfinCardSubtitleScoped": "Bir Jellyfin sunucusuna giriş yapın. ${name} profiline bağlanır.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Başka bir profilden ödünç al",
"borrowFromAnotherProfileSubtitle": "Başka bir profilin bağlantısını yeniden kullanın. PIN korumalı profiller bir PIN gerektirir."
}
diff --git a/lib/i18n/uz.i18n.json b/lib/i18n/uz.i18n.json
index 6ed3c89f..12e27649 100644
--- a/lib/i18n/uz.i18n.json
+++ b/lib/i18n/uz.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "Tasdiqlanish kutilmoqda...\nBrauzeringizdan kiring.",
"useBrowser": "Brauzerdan foydalanish",
"or": "yoki",
- "connectToJellyfin": "Jellyfin-ga ulanish",
+ "connectToMediaBrowser": "",
"useQuickConnect": "Tezkor ulanishdan foydalanish",
"quickConnectInstructions": "Jellyfin-da Tezkor ulanishni oching va ushbu kodni kiriting.",
"quickConnectWaiting": "Tasdiq kutilmoqda…",
@@ -827,8 +827,8 @@
"sessionExpiredOne": "${name} uchun seans vaqti tugadi",
"sessionExpiredMany": "${count} server uchun seans vaqti tugadi",
"signInAgain": "Qaytadan kirish",
- "editJellyfinTitle": "Jellyfin ulanishini tahrirlash",
- "editJellyfinIntro": "${serverName} uchun URL manzilini qoʻshing yoki oʻchiring."
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "Kashf qilish",
@@ -1873,12 +1873,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "Jellyfin serverini qoʻshish",
+ "addMediaBrowserTitle": "",
"serverUrls": "Server URL-lari",
"serverUrlsHelper": "Vergul bilan ajratilgan bir nechta URL manziliga ruxsat beriladi.",
"findServer": "Serverni topish",
- "searchingLocalServers": "Mahalliy Jellyfin serverlari qidirilmoqda...",
- "localServers": "Mahalliy Jellyfin serverlari",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "Foydalanuvchi nomi",
"password": "Parol",
"signIn": "Kirish",
@@ -1890,15 +1890,15 @@
"addPlexTitle": "Plex orqali kirish",
"pinExpired": "PIN kod vaqti tugadi.",
"failedToRegisterAccount": "Hisobni roʻyxatdan oʻtkazishda xatolik: ${error}",
- "enterJellyfinUrlError": "Jellyfin server URL-ini kiriting",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "Ulanish qoʻshish",
"addConnectionTitleScoped": "${name} profiliga qoʻshish",
"signInWithPlexCard": "Plex orqali kirish",
"signInWithPlexCardSubtitle": "Ushbu qurilmani avtorizatsiya qiling.",
"signInWithPlexCardSubtitleScoped": "Plex hisobini avtorizatsiya qiling.",
- "connectToJellyfinCard": "Jellyfin-ga ulanish",
- "connectToJellyfinCardSubtitle": "Server URL, foydalanuvchi nomi va parolingizni kiriting.",
- "connectToJellyfinCardSubtitleScoped": "Jellyfin serveriga kiring. ${name} profiliga ulanmoqda.",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "Boshqa profildan olish",
"borrowFromAnotherProfileSubtitle": "Boshqa profilning ulanishidan qayta foydalaning."
}
diff --git a/lib/i18n/zh-Hant.i18n.json b/lib/i18n/zh-Hant.i18n.json
index 8070e582..37a36730 100644
--- a/lib/i18n/zh-Hant.i18n.json
+++ b/lib/i18n/zh-Hant.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "正在等待驗證…\n請在瀏覽器中登入。",
"useBrowser": "使用瀏覽器",
"or": "或",
- "connectToJellyfin": "連線至 Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "使用快速連線(Quick Connect)",
"quickConnectInstructions": "在 Jellyfin 中開啟快速連線並輸入此代碼。",
"quickConnectWaiting": "等待核准…",
@@ -826,8 +826,8 @@
"sessionExpiredOne": "${name} 的工作階段已過期",
"sessionExpiredMany": "${count} 個伺服器的工作階段已過期",
"signInAgain": "重新登入",
- "editJellyfinTitle": "編輯 Jellyfin 連線",
- "editJellyfinIntro": "新增或移除 ${serverName} 的 URL。Plezy 會自動選擇可連線且延遲最低的網址。"
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "發現",
@@ -1867,12 +1867,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "新增 Jellyfin 伺服器",
+ "addMediaBrowserTitle": "",
"serverUrls": "伺服器 URL",
"serverUrlsHelper": "可輸入多個連線網址,以逗號區隔。",
"findServer": "尋找伺服器",
- "searchingLocalServers": "正在尋找本地 Jellyfin 伺服器…",
- "localServers": "本地 Jellyfin 伺服器",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "使用者名稱",
"password": "密碼",
"signIn": "登入",
@@ -1884,15 +1884,15 @@
"addPlexTitle": "使用 Plex 登入",
"pinExpired": "PIN 碼在登入前已過期。請重試。",
"failedToRegisterAccount": "註冊帳戶失敗:${error}",
- "enterJellyfinUrlError": "請輸入您的 Jellyfin 伺服器 URL",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "新增連線",
"addConnectionTitleScoped": "新增連線至 ${name}",
"signInWithPlexCard": "使用 Plex 登入",
"signInWithPlexCardSubtitle": "授權此裝置。將會新增共享的伺服器連線。",
"signInWithPlexCardSubtitleScoped": "授權 Plex 帳戶。Home 使用者會建立為個別的使用者設定檔。",
- "connectToJellyfinCard": "連線至 Jellyfin",
- "connectToJellyfinCardSubtitle": "輸入伺服器 URL、使用者名稱與密碼。",
- "connectToJellyfinCardSubtitleScoped": "登入 Jellyfin 伺服器,並綁定至 ${name} 使用者設定檔。",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "從另一個使用者設定檔共用",
"borrowFromAnotherProfileSubtitle": "重複使用另一個使用者設定檔的連線資訊。受 PIN 碼保護的使用者設定檔需輸入 PIN 碼。"
}
diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json
index 4a6e7917..6d791645 100644
--- a/lib/i18n/zh.i18n.json
+++ b/lib/i18n/zh.i18n.json
@@ -11,7 +11,7 @@
"waitingForAuth": "正在等待身份验证…\n请在浏览器中登录。",
"useBrowser": "使用浏览器",
"or": "或",
- "connectToJellyfin": "连接到 Jellyfin",
+ "connectToMediaBrowser": "",
"useQuickConnect": "使用 Quick Connect",
"quickConnectInstructions": "在 Jellyfin 中打开 Quick Connect 并输入此代码。",
"quickConnectWaiting": "等待批准…",
@@ -826,8 +826,8 @@
"sessionExpiredOne": "${name} 的会话已过期",
"sessionExpiredMany": "${count} 个服务器的会话已过期",
"signInAgain": "重新登录",
- "editJellyfinTitle": "编辑 Jellyfin 连接",
- "editJellyfinIntro": "添加或移除 ${serverName} 的 URL。Plezy 会使用可访问且延迟最低的地址。"
+ "editMediaBrowserTitle": "",
+ "editMediaBrowserIntro": ""
},
"discover": {
"title": "发现",
@@ -1867,12 +1867,12 @@
}
},
"addServer": {
- "addJellyfinTitle": "添加 Jellyfin 服务器",
+ "addMediaBrowserTitle": "",
"serverUrls": "服务器 URL",
"serverUrlsHelper": "可输入多个 URL,并用逗号分隔。",
"findServer": "查找服务器",
- "searchingLocalServers": "正在查找本地 Jellyfin 服务器…",
- "localServers": "本地 Jellyfin 服务器",
+ "searchingLocalMediaBrowserServers": "",
+ "localMediaBrowserServers": "",
"username": "用户名",
"password": "密码",
"signIn": "登录",
@@ -1884,15 +1884,15 @@
"addPlexTitle": "使用 Plex 登录",
"pinExpired": "PIN 在登录前已过期。请重试。",
"failedToRegisterAccount": "注册账户失败:${error}",
- "enterJellyfinUrlError": "请输入 Jellyfin 服务器 URL",
+ "enterMediaBrowserUrlError": "",
"addConnectionTitle": "添加连接",
"addConnectionTitleScoped": "添加到 ${name}",
"signInWithPlexCard": "使用 Plex 登录",
"signInWithPlexCardSubtitle": "授权此设备。共享服务器会被添加。",
"signInWithPlexCardSubtitleScoped": "授权一个 Plex 账户。Plex Home 用户将成为 Plezy 用户资料。",
- "connectToJellyfinCard": "连接到 Jellyfin",
- "connectToJellyfinCardSubtitle": "输入服务器 URL、用户名和密码。",
- "connectToJellyfinCardSubtitleScoped": "登录到 Jellyfin 服务器。绑定到 ${name}。",
+ "connectToMediaBrowserCard": "",
+ "connectToMediaBrowserCardSubtitle": "",
+ "connectToMediaBrowserCardSubtitleScoped": "",
"borrowFromAnotherProfile": "使用其他用户资料的连接",
"borrowFromAnotherProfileSubtitle": "复用另一个用户资料的连接。受 PIN 保护的用户资料需要输入 PIN。"
}
diff --git a/lib/main.dart b/lib/main.dart
index a71e6c7b..5d0fbaff 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1857,7 +1857,7 @@ class _SetupScreenState extends State with MountedSetStateMixin {
serverManager: serverManager,
).pruneUnreferencedJellyfinConnections();
if (pruned > 0) {
- appLogger.i('Setup: pruned $pruned unreferenced Jellyfin connection${pruned == 1 ? '' : 's'}');
+ appLogger.i('Setup: pruned $pruned unreferenced MediaBrowser connection${pruned == 1 ? '' : 's'}');
}
// Provider initialization starts before this screen runs the legacy
// migration. Reload after bootstrap so copied Plex Home users and the
@@ -1943,11 +1943,11 @@ class _SetupScreenState extends State with MountedSetStateMixin {
}
final plexCount = allConnections.whereType().fold(0, (n, c) => n + c.servers.length);
- final jellyfinCount = allConnections.whereType().length;
+ final mediaBrowserCount = allConnections.whereType().length;
unawaited(
Sentry.addBreadcrumb(
Breadcrumb(
- message: 'Handing off to MainScreen with $plexCount Plex server(s) + $jellyfinCount Jellyfin',
+ message: 'Handing off to MainScreen with $plexCount Plex + $mediaBrowserCount MediaBrowser server(s)',
category: 'setup',
),
),
@@ -2003,7 +2003,7 @@ class _SetupScreenState extends State with MountedSetStateMixin {
if (!mounted) return;
bindingSucceeded = activeProfile.active != null && activeProfile.lastBindingSucceeded;
} else {
- // Now wait for the binder to settle. This is the Plex/Jellyfin server
+ // Now wait for the binder to settle. This is the media-server client
// race: per-server status flips on the splash list as each client comes
// online, and we don't push MainScreen until they're all done (success
// or fail). Eliminates the "Failed to load discover content: No servers
@@ -2023,7 +2023,7 @@ class _SetupScreenState extends State with MountedSetStateMixin {
}
// Repopulate metadata for downloaded items now that per-backend caches
- // are resolvable (the Connections row + live JellyfinClient are in
+ // are resolvable (the Connections row + live MediaBrowser client are in
// place). Without this the downloads list and sync-rule titles render
// empty until something forces a later refresh.
await downloadProvider.refreshMetadataFromCache();
diff --git a/lib/media/media_backend.dart b/lib/media/media_backend.dart
index 98aa325f..d26c42aa 100644
--- a/lib/media/media_backend.dart
+++ b/lib/media/media_backend.dart
@@ -1,4 +1,5 @@
import '../utils/app_logger.dart';
+import 'media_browser_dialect.dart';
/// Backend identifier for a media item, library, or server.
///
@@ -7,16 +8,19 @@ import '../utils/app_logger.dart';
/// in v1) and so persisted records can round-trip the source of an item.
enum MediaBackend {
plex,
- jellyfin;
+ jellyfin,
+ emby;
String get id => switch (this) {
MediaBackend.plex => 'plex',
MediaBackend.jellyfin => 'jellyfin',
+ MediaBackend.emby => 'emby',
};
static MediaBackend fromId(String id) => switch (id) {
'plex' => MediaBackend.plex,
'jellyfin' => MediaBackend.jellyfin,
+ 'emby' => MediaBackend.emby,
_ => throw ArgumentError('Unknown MediaBackend id: $id'),
};
@@ -27,12 +31,26 @@ enum MediaBackend {
/// surfaces corrupted cache rows or schema drift instead of silently
/// misclassifying Jellyfin items as Plex.
static MediaBackend fromString(String? id) {
- if (id != null && id != 'plex' && id != 'jellyfin') {
+ if (id != null && id != 'plex' && id != 'jellyfin' && id != 'emby') {
appLogger.w('Unknown MediaBackend id "$id"; defaulting to plex');
}
return switch (id) {
'jellyfin' => MediaBackend.jellyfin,
+ 'emby' => MediaBackend.emby,
_ => MediaBackend.plex,
};
}
+
+ /// True for backends served by the MediaBrowser HTTP API — Jellyfin and its
+ /// Emby ancestor. They share one client stack, one query grammar and one set
+ /// of DTO shapes, so behaviour keyed to "not Plex" should test this instead
+ /// of comparing against [MediaBackend.jellyfin].
+ bool get usesMediaBrowserApi => dialect != null;
+
+ /// The MediaBrowser dialect this backend speaks, or `null` for Plex.
+ MediaBrowserDialect? get dialect => switch (this) {
+ MediaBackend.plex => null,
+ MediaBackend.jellyfin => MediaBrowserDialect.jellyfin,
+ MediaBackend.emby => MediaBrowserDialect.emby,
+ };
}
diff --git a/lib/media/media_browser_dialect.dart b/lib/media/media_browser_dialect.dart
new file mode 100644
index 00000000..341b1580
--- /dev/null
+++ b/lib/media/media_browser_dialect.dart
@@ -0,0 +1,189 @@
+import 'media_backend.dart';
+
+/// Which flavour of the MediaBrowser HTTP API a server speaks.
+///
+/// Jellyfin forked from Emby 3.5.2, so the two still share almost their entire
+/// wire contract: identical `BaseItemDto` shapes, the same `/Items` query
+/// grammar, the `MediaBrowser` Authorization scheme, the `X-Emby-Token` header
+/// and `api_key=` query fallback. Plezy therefore drives both through one
+/// client stack ([JellyfinClient]) and keeps every delta in this one type.
+///
+/// Verified against Jellyfin 10.10.7/10.11 and Emby 4.9.5:
+/// - Jellyfin 10.9 renamed a batch of user-scoped write routes to unprefixed
+/// forms and added `/Users/Me`. Emby only has the original user-scoped
+/// spellings — see [MediaBrowserPaths].
+/// - Trickplay, `/MediaSegments`, `/Audio/{id}/Lyrics`, `/Items/Filters` and
+/// Quick Connect do not exist on Emby. `/Audio/{id}/Lyrics` is actively
+/// harmful there: Emby parses `Lyrics` as a container name and starts an
+/// ffmpeg transcode.
+/// - Emby tolerates unknown `Fields`/`SortBy` values, so the shared field sets
+/// need no per-dialect pruning.
+enum MediaBrowserDialect {
+ jellyfin,
+ emby;
+
+ /// Stable wire/persistence id. Matches the [MediaBackend] and
+ /// `ConnectionKind` ids for the same server kind.
+ String get id => switch (this) {
+ MediaBrowserDialect.jellyfin => 'jellyfin',
+ MediaBrowserDialect.emby => 'emby',
+ };
+
+ static MediaBrowserDialect fromId(String id) => switch (id) {
+ 'jellyfin' => MediaBrowserDialect.jellyfin,
+ 'emby' => MediaBrowserDialect.emby,
+ _ => throw ArgumentError('Unknown MediaBrowserDialect id: $id'),
+ };
+
+ /// Like [fromId] but tolerates legacy/missing values by defaulting to
+ /// Jellyfin. Persisted connection rows written before Emby support carry no
+ /// `dialect` key at all, and those are Jellyfin by construction.
+ static MediaBrowserDialect fromIdOrJellyfin(Object? id) => switch (id) {
+ 'emby' => MediaBrowserDialect.emby,
+ _ => MediaBrowserDialect.jellyfin,
+ };
+
+ MediaBackend get backend => switch (this) {
+ MediaBrowserDialect.jellyfin => MediaBackend.jellyfin,
+ MediaBrowserDialect.emby => MediaBackend.emby,
+ };
+
+ /// Product name, used verbatim in UI that names the backend. These are
+ /// trademarks, so they are not localized.
+ String get productName => switch (this) {
+ MediaBrowserDialect.jellyfin => 'Jellyfin',
+ MediaBrowserDialect.emby => 'Emby',
+ };
+
+ /// Placeholder host shown in the "server URL" field.
+ String get exampleBaseUrl => switch (this) {
+ MediaBrowserDialect.jellyfin => 'https://jellyfin.example.com',
+ MediaBrowserDialect.emby => 'https://emby.example.com',
+ };
+
+ /// UDP payload the server answers on port 7359. Emby ignores Jellyfin's
+ /// string and vice versa, which makes the datagram itself a reliable
+ /// dialect discriminator during LAN discovery.
+ String get lanDiscoveryMessage => switch (this) {
+ MediaBrowserDialect.jellyfin => 'who is JellyfinServer?',
+ MediaBrowserDialect.emby => 'who is EmbyServer?',
+ };
+
+ /// Ports appended when the user types a bare host, most-likely first.
+ /// Both ship 8096 for HTTP; Emby's default HTTPS port is 8920.
+ List get httpsPortGuesses => switch (this) {
+ MediaBrowserDialect.jellyfin => const [8096],
+ MediaBrowserDialect.emby => const [8920, 8096],
+ };
+
+ /// `/QuickConnect/*` plus `POST /Users/AuthenticateWithQuickConnect`.
+ bool get supportsQuickConnect => this == MediaBrowserDialect.jellyfin;
+
+ /// `/Videos/{id}/Trickplay/{width}/{n}.jpg` sprite sheets and the
+ /// `Trickplay` item field (Jellyfin 10.9+). Emby 404s on the route and never
+ /// fills the field; its own preview transports are unwired — see
+ /// [ServerCapabilities.emby].
+ bool get supportsTrickplay => this == MediaBrowserDialect.jellyfin;
+
+ /// `/MediaSegments/{itemId}` intro/outro/credit markers (Jellyfin 10.10+).
+ /// Emby 404s; chapter-name fallback still applies.
+ bool get supportsMediaSegments => this == MediaBrowserDialect.jellyfin;
+
+ /// `GET /Audio/{id}/Lyrics` (Jellyfin 10.9+). Never call this on Emby: the
+ /// route resolves to audio streaming with `Lyrics` as the container and
+ /// spawns an ffmpeg process that fails with a 500.
+ bool get supportsLyrics => this == MediaBrowserDialect.jellyfin;
+
+ /// `GET /Items/Filters`, the single call that returns a library's distinct
+ /// genres, official ratings, tags and years. Emby has no aggregate route; the
+ /// client reassembles the same payload from `/Genres`, `/OfficialRatings`,
+ /// `/Tags` and `/Years`.
+ bool get supportsAggregateItemFilters => this == MediaBrowserDialect.jellyfin;
+
+ /// `POST /Users/{uid}/Items/{id}/HideFromResume` hides an item from Continue
+ /// Watching without clearing its resume position.
+ ///
+ /// Emby-only, and the one capability where Emby is ahead of Jellyfin:
+ /// measured 200 on Emby 4.9.5 (the row leaves `/Users/{uid}/Items/Resume`
+ /// while `UserData.PlaybackPositionTicks` survives), and 404 on Jellyfin
+ /// 10.11 for both that spelling and `/UserItems/{id}/HideFromResume`.
+ bool get supportsContinueWatchingRemoval => this == MediaBrowserDialect.emby;
+
+ /// `POST /Items/{id}` persists genre and tag edits from the `GenreItems` /
+ /// `TagItems` name-pair arrays rather than the plain `Genres` / `Tags` string
+ /// lists.
+ ///
+ /// Measured on Emby 4.9.5: sending `Genres: ['Action']` alone round-trips as
+ /// an empty list and the `/Genres` facet stays empty, while
+ /// `GenreItems: [{'Name': 'Action'}]` sticks and is immediately indexed. The
+ /// sibling fields (`Studios`, `People`, `ProductionLocations`, `Taglines`,
+ /// `Overview`, `OriginalTitle`) all persist from their ordinary shapes on
+ /// both dialects.
+ bool get metadataWritesUseNamePairLists => this == MediaBrowserDialect.emby;
+
+ /// `GET /Shows/NextUp` answers an unscoped, library-wide query.
+ ///
+ /// Jellyfin-only. Measured on Emby 4.9.5 with one played episode: the
+ /// unscoped query returns `TotalRecordCount: 0` under every parameter
+ /// combination tried (`ParentId` on the view or the series, `SeriesId=`,
+ /// `Recursive`, `GroupItems`, `EnableResumable`, `SortBy`), while the same
+ /// query with `SeriesId=` returns the series' 23 remaining episodes.
+ /// Emby therefore only computes Next Up per series, and the library-wide
+ /// shelf has to be reconstructed client-side from recently played episodes.
+ bool get supportsGlobalNextUp => this == MediaBrowserDialect.jellyfin;
+
+ /// The resume route returns only items with a saved playback position.
+ ///
+ /// Jellyfin-only. Measured with one in-progress movie and 30 started series:
+ /// Jellyfin's `/UserItems/Resume` returned exactly the movie, while Emby's
+ /// `/Users/{uid}/Items/Resume` returned 30 rows — the movie plus 29
+ /// zero-position *next* episodes — and `Filters=IsResumable` did not remove
+ /// them. Emby's own UI merges both into one shelf; Plezy models Continue
+ /// Watching and Next Up as separate rows, so the Emby resume leg is filtered
+ /// to genuine progress and the next-up rows come from the Next Up path
+ /// instead. Without the filter a started series occupies both rows and can
+ /// push the real in-progress item out of a limited one.
+ bool get resumeReturnsOnlyStartedItems => this == MediaBrowserDialect.jellyfin;
+
+ /// `/Sessions/Playing` and `/Sessions/Playing/Progress` reject a body with no
+ /// `PlaySessionId`.
+ ///
+ /// Measured on Emby 4.9.5: both return HTTP 400 `Value cannot be null.
+ /// (Parameter 'key')` when the field is absent, while
+ /// `/Sessions/Playing/Stopped` tolerates it. Jellyfin accepts all three
+ /// without one. Callers that never negotiated a PlaybackInfo session — the
+ /// offline watch-progress sync is the live example — therefore need a
+ /// synthesized id on Emby or their progress is silently dropped.
+ bool get requiresPlaySessionId => this == MediaBrowserDialect.emby;
+
+ /// `/Items?IncludeItemTypes=Playlist` honours a `MediaTypes` filter.
+ ///
+ /// Measured on Emby 4.9.5: passing *any* `MediaTypes` value makes the server
+ /// discard `IncludeItemTypes` and return the whole index — 14554 rows of
+ /// `Genre`/`Person`/`Studio`/`Movie` instead of the one playlist. Emby also
+ /// never populates `MediaType` on a playlist DTO, not even for a playlist
+ /// created with `MediaType=Audio`, so there is nothing to filter on either
+ /// side and every playlist is returned regardless of the requested type.
+ bool get playlistsFilterByMediaType => this == MediaBrowserDialect.jellyfin;
+
+ /// True when the dialect only accepts the pre-10.9 `/Users/{userId}/…`
+ /// spelling of the user-scoped item routes.
+ bool get requiresUserScopedItemRoutes => this == MediaBrowserDialect.emby;
+
+ /// Best-effort dialect detection from a `/System/Info/Public` body.
+ ///
+ /// Jellyfin reports `ProductName: "Jellyfin Server"`. Emby 4.9 omits
+ /// `ProductName` entirely but is the only one of the two that returns the
+ /// `RemoteAddresses` array. Returns `null` when neither signal is present so
+ /// callers keep whichever dialect the user picked.
+ static MediaBrowserDialect? detectFromPublicSystemInfo(Map json) {
+ final productName = json['ProductName'];
+ if (productName is String && productName.isNotEmpty) {
+ final normalized = productName.toLowerCase();
+ if (normalized.contains('jellyfin')) return MediaBrowserDialect.jellyfin;
+ if (normalized.contains('emby')) return MediaBrowserDialect.emby;
+ }
+ if (json.containsKey('RemoteAddresses')) return MediaBrowserDialect.emby;
+ return null;
+ }
+}
diff --git a/lib/media/media_item.dart b/lib/media/media_item.dart
index bf876f8f..23a61e53 100644
--- a/lib/media/media_item.dart
+++ b/lib/media/media_item.dart
@@ -7,6 +7,7 @@ import '../services/settings_service.dart' show EpisodePosterMode;
import '../utils/global_key_utils.dart';
import '../utils/json_utils.dart';
import 'media_backend.dart';
+import 'media_browser_dialect.dart';
import 'media_kind.dart';
import 'media_role.dart';
import 'media_version.dart';
@@ -23,6 +24,10 @@ const double _squareHeroAspectRatio = 1.39;
/// Backend-neutral media item shape used by UI, providers, persistence, and
/// playback. Concrete variants retain backend-only fields without forcing the
/// rest of the app to traffic in Plex/Jellyfin DTOs.
+///
+/// [JellyfinMediaItem] backs both MediaBrowser-family backends: Jellyfin and
+/// Emby return field-identical `BaseItemDto`s, so they share one variant and
+/// carry [JellyfinMediaItem.dialect] to tell them apart.
@Freezed(unionKey: 'backend', unionValueCase: FreezedUnionCase.none, equal: false, makeCollectionsUnmodifiable: false)
sealed class MediaItem with _$MediaItem {
const MediaItem._();
@@ -154,7 +159,8 @@ sealed class MediaItem with _$MediaItem {
backendFolderKey: backendFolderKey,
raw: raw,
),
- MediaBackend.jellyfin => JellyfinMediaItem(
+ MediaBackend.jellyfin || MediaBackend.emby => JellyfinMediaItem(
+ dialect: backend.dialect!,
id: id,
kind: kind,
guid: guid,
@@ -300,10 +306,20 @@ sealed class MediaItem with _$MediaItem {
@JsonKey(fromJson: _mediaItemRawFromJson) Map? raw,
}) = PlexMediaItem;
- /// Backend-tagged concrete subclass for items sourced from a Jellyfin server.
+ /// Backend-tagged concrete subclass for items sourced from a MediaBrowser
+ /// server — Jellyfin or Emby, discriminated by [JellyfinMediaItem.dialect].
@FreezedUnionValue('jellyfin')
@JsonSerializable(includeIfNull: false, explicitToJson: true)
const factory MediaItem.jellyfin({
+ /// Which MediaBrowser dialect produced this item.
+ ///
+ /// Not serialized on its own: [MediaItem.toJson] already writes the
+ /// resolved [backend] id under the union key, and [MediaItem.fromJson]
+ /// restores the dialect from it. Keeping one discriminator on the wire
+ /// avoids the two disagreeing on a stale cache row.
+ @JsonKey(includeToJson: false, includeFromJson: false)
+ @Default(MediaBrowserDialect.jellyfin)
+ MediaBrowserDialect dialect,
@JsonKey(readValue: readStringField, defaultValue: '') required String id,
@JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) required MediaKind kind,
String? guid,
@@ -375,7 +391,7 @@ sealed class MediaItem with _$MediaItem {
MediaBackend get backend => switch (this) {
PlexMediaItem() => MediaBackend.plex,
- JellyfinMediaItem() => MediaBackend.jellyfin,
+ JellyfinMediaItem(:final dialect) => dialect.backend,
};
/// Restore a [MediaItem] from a [toJson] payload. Missing/unknown backend
@@ -385,13 +401,14 @@ sealed class MediaItem with _$MediaItem {
return switch (MediaBackend.fromString(json['backend'] as String?)) {
MediaBackend.plex => _$PlexMediaItemFromJson(json),
MediaBackend.jellyfin => _$JellyfinMediaItemFromJson(json),
+ MediaBackend.emby => _$JellyfinMediaItemFromJson(json).copyWith(dialect: MediaBrowserDialect.emby),
};
}
Map toJson() {
return switch (this) {
final PlexMediaItem item => {'backend': MediaBackend.plex.id, ..._$PlexMediaItemToJson(item)},
- final JellyfinMediaItem item => {'backend': MediaBackend.jellyfin.id, ..._$JellyfinMediaItemToJson(item)},
+ final JellyfinMediaItem item => {'backend': item.dialect.backend.id, ..._$JellyfinMediaItemToJson(item)},
};
}
diff --git a/lib/media/media_item.freezed.dart b/lib/media/media_item.freezed.dart
index d6c15fcc..51f00eca 100644
--- a/lib/media/media_item.freezed.dart
+++ b/lib/media/media_item.freezed.dart
@@ -208,11 +208,11 @@ return jellyfin(_that);case _:
/// }
/// ```
-@optionalTypeArgs TResult maybeWhen({TResult Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? editionTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? subtitleLanguage, @JsonKey(fromJson: flexibleInt) int? subtitleMode, String? trailerKey, @JsonKey(fromJson: flexibleInt) int? playlistItemId, @JsonKey(fromJson: flexibleInt) int? playQueueItemId, String? subtype, @JsonKey(fromJson: flexibleInt) int? extraType, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? plex,TResult Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? jellyfin,required TResult orElse(),}) {final _that = this;
+@optionalTypeArgs TResult maybeWhen({TResult Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? editionTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? subtitleLanguage, @JsonKey(fromJson: flexibleInt) int? subtitleMode, String? trailerKey, @JsonKey(fromJson: flexibleInt) int? playlistItemId, @JsonKey(fromJson: flexibleInt) int? playQueueItemId, String? subtype, @JsonKey(fromJson: flexibleInt) int? extraType, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? plex,TResult Function(@JsonKey(includeToJson: false, includeFromJson: false) MediaBrowserDialect dialect, @JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? jellyfin,required TResult orElse(),}) {final _that = this;
switch (_that) {
case PlexMediaItem() when plex != null:
return plex(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.editionTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.subtitleLanguage,_that.subtitleMode,_that.trailerKey,_that.playlistItemId,_that.playQueueItemId,_that.subtype,_that.extraType,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);case JellyfinMediaItem() when jellyfin != null:
-return jellyfin(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.playlistItemId,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);case _:
+return jellyfin(_that.dialect,_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.playlistItemId,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);case _:
return orElse();
}
@@ -230,11 +230,11 @@ return jellyfin(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that
/// }
/// ```
-@optionalTypeArgs TResult when({required TResult Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? editionTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? subtitleLanguage, @JsonKey(fromJson: flexibleInt) int? subtitleMode, String? trailerKey, @JsonKey(fromJson: flexibleInt) int? playlistItemId, @JsonKey(fromJson: flexibleInt) int? playQueueItemId, String? subtype, @JsonKey(fromJson: flexibleInt) int? extraType, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw) plex,required TResult Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw) jellyfin,}) {final _that = this;
+@optionalTypeArgs TResult when({required TResult Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? editionTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? subtitleLanguage, @JsonKey(fromJson: flexibleInt) int? subtitleMode, String? trailerKey, @JsonKey(fromJson: flexibleInt) int? playlistItemId, @JsonKey(fromJson: flexibleInt) int? playQueueItemId, String? subtype, @JsonKey(fromJson: flexibleInt) int? extraType, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw) plex,required TResult Function(@JsonKey(includeToJson: false, includeFromJson: false) MediaBrowserDialect dialect, @JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw) jellyfin,}) {final _that = this;
switch (_that) {
case PlexMediaItem():
return plex(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.editionTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.subtitleLanguage,_that.subtitleMode,_that.trailerKey,_that.playlistItemId,_that.playQueueItemId,_that.subtype,_that.extraType,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);case JellyfinMediaItem():
-return jellyfin(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.playlistItemId,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);}
+return jellyfin(_that.dialect,_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.playlistItemId,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);}
}
/// A variant of `when` that fallback to returning `null`
///
@@ -248,11 +248,11 @@ return jellyfin(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that
/// }
/// ```
-@optionalTypeArgs TResult? whenOrNull({TResult? Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? editionTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? subtitleLanguage, @JsonKey(fromJson: flexibleInt) int? subtitleMode, String? trailerKey, @JsonKey(fromJson: flexibleInt) int? playlistItemId, @JsonKey(fromJson: flexibleInt) int? playQueueItemId, String? subtype, @JsonKey(fromJson: flexibleInt) int? extraType, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? plex,TResult? Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? jellyfin,}) {final _that = this;
+@optionalTypeArgs TResult? whenOrNull({TResult? Function(@JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? editionTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? subtitleLanguage, @JsonKey(fromJson: flexibleInt) int? subtitleMode, String? trailerKey, @JsonKey(fromJson: flexibleInt) int? playlistItemId, @JsonKey(fromJson: flexibleInt) int? playQueueItemId, String? subtype, @JsonKey(fromJson: flexibleInt) int? extraType, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? plex,TResult? Function(@JsonKey(includeToJson: false, includeFromJson: false) MediaBrowserDialect dialect, @JsonKey(readValue: readStringField, defaultValue: '') String id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio, @JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath, @JsonKey(fromJson: flexibleInt) int? parentIndex, @JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath, @JsonKey(fromJson: flexibleInt) int? durationMs, @JsonKey(fromJson: flexibleInt) int? viewOffsetMs, @JsonKey(fromJson: flexibleInt) int? viewCount, @JsonKey(fromJson: flexibleInt) int? lastViewedAt, @JsonKey(fromJson: flexibleInt) int? leafCount, @JsonKey(fromJson: flexibleInt) int? viewedLeafCount, @JsonKey(fromJson: flexibleInt) int? childCount, @JsonKey(fromJson: flexibleInt) int? addedAt, @JsonKey(fromJson: flexibleInt) int? updatedAt, @JsonKey(fromJson: flexibleDouble) double? rating, @JsonKey(fromJson: flexibleDouble) double? userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite, @JsonKey(fromJson: _mediaItemStringList) List? genres, @JsonKey(fromJson: _mediaItemStringList) List? directors, @JsonKey(fromJson: _mediaItemStringList) List? writers, @JsonKey(fromJson: _mediaItemStringList) List? producers, @JsonKey(fromJson: _mediaItemStringList) List? countries, @JsonKey(fromJson: _mediaItemStringList) List? collections, @JsonKey(fromJson: _mediaItemStringList) List? labels, @JsonKey(fromJson: _mediaItemStringList) List? styles, @JsonKey(fromJson: _mediaItemStringList) List? moods, @JsonKey(fromJson: _mediaItemRolesFromJson) List? roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) Map? raw)? jellyfin,}) {final _that = this;
switch (_that) {
case PlexMediaItem() when plex != null:
return plex(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.editionTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.subtitleLanguage,_that.subtitleMode,_that.trailerKey,_that.playlistItemId,_that.playQueueItemId,_that.subtype,_that.extraType,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);case JellyfinMediaItem() when jellyfin != null:
-return jellyfin(_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.playlistItemId,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);case _:
+return jellyfin(_that.dialect,_that.id,_that.kind,_that.guid,_that.title,_that.titleSort,_that.summary,_that.tagline,_that.originalTitle,_that.studio,_that.year,_that.originallyAvailableAt,_that.contentRating,_that.parentId,_that.parentTitle,_that.parentThumbPath,_that.parentIndex,_that.index,_that.grandparentId,_that.grandparentTitle,_that.grandparentThumbPath,_that.grandparentArtPath,_that.grandparentBackdropPaths,_that.thumbPath,_that.artPath,_that.backdropPaths,_that.clearLogoPath,_that.backgroundSquarePath,_that.durationMs,_that.viewOffsetMs,_that.viewCount,_that.lastViewedAt,_that.leafCount,_that.viewedLeafCount,_that.childCount,_that.addedAt,_that.updatedAt,_that.rating,_that.userRating,_that.ratings,_that.isFavorite,_that.genres,_that.directors,_that.writers,_that.producers,_that.countries,_that.collections,_that.labels,_that.styles,_that.moods,_that.roles,_that.mediaVersions,_that.libraryId,_that.libraryTitle,_that.audioLanguage,_that.playlistItemId,_that.serverId,_that.serverName,_that.backendFolderKey,_that.raw);case _:
return null;
}
@@ -461,9 +461,16 @@ as Map?,
@JsonSerializable(includeIfNull: false, explicitToJson: true)
class JellyfinMediaItem extends MediaItem {
- const JellyfinMediaItem({@JsonKey(readValue: readStringField, defaultValue: '') required this.id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) required this.kind, this.guid, this.title, this.titleSort, this.summary, this.tagline, this.originalTitle, this.studio, @JsonKey(fromJson: flexibleInt) this.year, this.originallyAvailableAt, this.contentRating, this.parentId, this.parentTitle, this.parentThumbPath, @JsonKey(fromJson: flexibleInt) this.parentIndex, @JsonKey(fromJson: flexibleInt) this.index, this.grandparentId, this.grandparentTitle, this.grandparentThumbPath, this.grandparentArtPath, this.grandparentBackdropPaths, this.thumbPath, this.artPath, this.backdropPaths, this.clearLogoPath, this.backgroundSquarePath, @JsonKey(fromJson: flexibleInt) this.durationMs, @JsonKey(fromJson: flexibleInt) this.viewOffsetMs, @JsonKey(fromJson: flexibleInt) this.viewCount, @JsonKey(fromJson: flexibleInt) this.lastViewedAt, @JsonKey(fromJson: flexibleInt) this.leafCount, @JsonKey(fromJson: flexibleInt) this.viewedLeafCount, @JsonKey(fromJson: flexibleInt) this.childCount, @JsonKey(fromJson: flexibleInt) this.addedAt, @JsonKey(fromJson: flexibleInt) this.updatedAt, @JsonKey(fromJson: flexibleDouble) this.rating, @JsonKey(fromJson: flexibleDouble) this.userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) this.ratings, this.isFavorite, @JsonKey(fromJson: _mediaItemStringList) this.genres, @JsonKey(fromJson: _mediaItemStringList) this.directors, @JsonKey(fromJson: _mediaItemStringList) this.writers, @JsonKey(fromJson: _mediaItemStringList) this.producers, @JsonKey(fromJson: _mediaItemStringList) this.countries, @JsonKey(fromJson: _mediaItemStringList) this.collections, @JsonKey(fromJson: _mediaItemStringList) this.labels, @JsonKey(fromJson: _mediaItemStringList) this.styles, @JsonKey(fromJson: _mediaItemStringList) this.moods, @JsonKey(fromJson: _mediaItemRolesFromJson) this.roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) this.mediaVersions, this.libraryId, this.libraryTitle, this.audioLanguage, this.playlistItemId, this.serverId, this.serverName, this.backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) this.raw}): super._();
+ const JellyfinMediaItem({@JsonKey(includeToJson: false, includeFromJson: false) this.dialect = MediaBrowserDialect.jellyfin, @JsonKey(readValue: readStringField, defaultValue: '') required this.id, @JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) required this.kind, this.guid, this.title, this.titleSort, this.summary, this.tagline, this.originalTitle, this.studio, @JsonKey(fromJson: flexibleInt) this.year, this.originallyAvailableAt, this.contentRating, this.parentId, this.parentTitle, this.parentThumbPath, @JsonKey(fromJson: flexibleInt) this.parentIndex, @JsonKey(fromJson: flexibleInt) this.index, this.grandparentId, this.grandparentTitle, this.grandparentThumbPath, this.grandparentArtPath, this.grandparentBackdropPaths, this.thumbPath, this.artPath, this.backdropPaths, this.clearLogoPath, this.backgroundSquarePath, @JsonKey(fromJson: flexibleInt) this.durationMs, @JsonKey(fromJson: flexibleInt) this.viewOffsetMs, @JsonKey(fromJson: flexibleInt) this.viewCount, @JsonKey(fromJson: flexibleInt) this.lastViewedAt, @JsonKey(fromJson: flexibleInt) this.leafCount, @JsonKey(fromJson: flexibleInt) this.viewedLeafCount, @JsonKey(fromJson: flexibleInt) this.childCount, @JsonKey(fromJson: flexibleInt) this.addedAt, @JsonKey(fromJson: flexibleInt) this.updatedAt, @JsonKey(fromJson: flexibleDouble) this.rating, @JsonKey(fromJson: flexibleDouble) this.userRating, @JsonKey(fromJson: _mediaItemRatingsFromJson) this.ratings, this.isFavorite, @JsonKey(fromJson: _mediaItemStringList) this.genres, @JsonKey(fromJson: _mediaItemStringList) this.directors, @JsonKey(fromJson: _mediaItemStringList) this.writers, @JsonKey(fromJson: _mediaItemStringList) this.producers, @JsonKey(fromJson: _mediaItemStringList) this.countries, @JsonKey(fromJson: _mediaItemStringList) this.collections, @JsonKey(fromJson: _mediaItemStringList) this.labels, @JsonKey(fromJson: _mediaItemStringList) this.styles, @JsonKey(fromJson: _mediaItemStringList) this.moods, @JsonKey(fromJson: _mediaItemRolesFromJson) this.roles, @JsonKey(fromJson: _mediaItemVersionsFromJson) this.mediaVersions, this.libraryId, this.libraryTitle, this.audioLanguage, this.playlistItemId, this.serverId, this.serverName, this.backendFolderKey, @JsonKey(fromJson: _mediaItemRawFromJson) this.raw}): super._();
+/// Which MediaBrowser dialect produced this item.
+///
+/// Not serialized on its own: [MediaItem.toJson] already writes the
+/// resolved [backend] id under the union key, and [MediaItem.fromJson]
+/// restores the dialect from it. Keeping one discriminator on the wire
+/// avoids the two disagreeing on a stale cache row.
+@JsonKey(includeToJson: false, includeFromJson: false) final MediaBrowserDialect dialect;
@override@JsonKey(readValue: readStringField, defaultValue: '') final String id;
@override@JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) final MediaKind kind;
@override final String? guid;
@@ -541,7 +548,7 @@ $JellyfinMediaItemCopyWith get copyWith => _$JellyfinMediaIte
@override
String toString() {
- return 'MediaItem.jellyfin(id: $id, kind: $kind, guid: $guid, title: $title, titleSort: $titleSort, summary: $summary, tagline: $tagline, originalTitle: $originalTitle, studio: $studio, year: $year, originallyAvailableAt: $originallyAvailableAt, contentRating: $contentRating, parentId: $parentId, parentTitle: $parentTitle, parentThumbPath: $parentThumbPath, parentIndex: $parentIndex, index: $index, grandparentId: $grandparentId, grandparentTitle: $grandparentTitle, grandparentThumbPath: $grandparentThumbPath, grandparentArtPath: $grandparentArtPath, grandparentBackdropPaths: $grandparentBackdropPaths, thumbPath: $thumbPath, artPath: $artPath, backdropPaths: $backdropPaths, clearLogoPath: $clearLogoPath, backgroundSquarePath: $backgroundSquarePath, durationMs: $durationMs, viewOffsetMs: $viewOffsetMs, viewCount: $viewCount, lastViewedAt: $lastViewedAt, leafCount: $leafCount, viewedLeafCount: $viewedLeafCount, childCount: $childCount, addedAt: $addedAt, updatedAt: $updatedAt, rating: $rating, userRating: $userRating, ratings: $ratings, isFavorite: $isFavorite, genres: $genres, directors: $directors, writers: $writers, producers: $producers, countries: $countries, collections: $collections, labels: $labels, styles: $styles, moods: $moods, roles: $roles, mediaVersions: $mediaVersions, libraryId: $libraryId, libraryTitle: $libraryTitle, audioLanguage: $audioLanguage, playlistItemId: $playlistItemId, serverId: $serverId, serverName: $serverName, backendFolderKey: $backendFolderKey, raw: $raw)';
+ return 'MediaItem.jellyfin(dialect: $dialect, id: $id, kind: $kind, guid: $guid, title: $title, titleSort: $titleSort, summary: $summary, tagline: $tagline, originalTitle: $originalTitle, studio: $studio, year: $year, originallyAvailableAt: $originallyAvailableAt, contentRating: $contentRating, parentId: $parentId, parentTitle: $parentTitle, parentThumbPath: $parentThumbPath, parentIndex: $parentIndex, index: $index, grandparentId: $grandparentId, grandparentTitle: $grandparentTitle, grandparentThumbPath: $grandparentThumbPath, grandparentArtPath: $grandparentArtPath, grandparentBackdropPaths: $grandparentBackdropPaths, thumbPath: $thumbPath, artPath: $artPath, backdropPaths: $backdropPaths, clearLogoPath: $clearLogoPath, backgroundSquarePath: $backgroundSquarePath, durationMs: $durationMs, viewOffsetMs: $viewOffsetMs, viewCount: $viewCount, lastViewedAt: $lastViewedAt, leafCount: $leafCount, viewedLeafCount: $viewedLeafCount, childCount: $childCount, addedAt: $addedAt, updatedAt: $updatedAt, rating: $rating, userRating: $userRating, ratings: $ratings, isFavorite: $isFavorite, genres: $genres, directors: $directors, writers: $writers, producers: $producers, countries: $countries, collections: $collections, labels: $labels, styles: $styles, moods: $moods, roles: $roles, mediaVersions: $mediaVersions, libraryId: $libraryId, libraryTitle: $libraryTitle, audioLanguage: $audioLanguage, playlistItemId: $playlistItemId, serverId: $serverId, serverName: $serverName, backendFolderKey: $backendFolderKey, raw: $raw)';
}
@@ -552,7 +559,7 @@ abstract mixin class $JellyfinMediaItemCopyWith<$Res> implements $MediaItemCopyW
factory $JellyfinMediaItemCopyWith(JellyfinMediaItem value, $Res Function(JellyfinMediaItem) _then) = _$JellyfinMediaItemCopyWithImpl;
@override @useResult
$Res call({
-@JsonKey(readValue: readStringField, defaultValue: '') String id,@JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio,@JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath,@JsonKey(fromJson: flexibleInt) int? parentIndex,@JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath,@JsonKey(fromJson: flexibleInt) int? durationMs,@JsonKey(fromJson: flexibleInt) int? viewOffsetMs,@JsonKey(fromJson: flexibleInt) int? viewCount,@JsonKey(fromJson: flexibleInt) int? lastViewedAt,@JsonKey(fromJson: flexibleInt) int? leafCount,@JsonKey(fromJson: flexibleInt) int? viewedLeafCount,@JsonKey(fromJson: flexibleInt) int? childCount,@JsonKey(fromJson: flexibleInt) int? addedAt,@JsonKey(fromJson: flexibleInt) int? updatedAt,@JsonKey(fromJson: flexibleDouble) double? rating,@JsonKey(fromJson: flexibleDouble) double? userRating,@JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite,@JsonKey(fromJson: _mediaItemStringList) List? genres,@JsonKey(fromJson: _mediaItemStringList) List? directors,@JsonKey(fromJson: _mediaItemStringList) List? writers,@JsonKey(fromJson: _mediaItemStringList) List? producers,@JsonKey(fromJson: _mediaItemStringList) List? countries,@JsonKey(fromJson: _mediaItemStringList) List? collections,@JsonKey(fromJson: _mediaItemStringList) List? labels,@JsonKey(fromJson: _mediaItemStringList) List? styles,@JsonKey(fromJson: _mediaItemStringList) List? moods,@JsonKey(fromJson: _mediaItemRolesFromJson) List? roles,@JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey,@JsonKey(fromJson: _mediaItemRawFromJson) Map? raw
+@JsonKey(includeToJson: false, includeFromJson: false) MediaBrowserDialect dialect,@JsonKey(readValue: readStringField, defaultValue: '') String id,@JsonKey(fromJson: _mediaKindFromJson, toJson: _mediaKindToJson) MediaKind kind, String? guid, String? title, String? titleSort, String? summary, String? tagline, String? originalTitle, String? studio,@JsonKey(fromJson: flexibleInt) int? year, String? originallyAvailableAt, String? contentRating, String? parentId, String? parentTitle, String? parentThumbPath,@JsonKey(fromJson: flexibleInt) int? parentIndex,@JsonKey(fromJson: flexibleInt) int? index, String? grandparentId, String? grandparentTitle, String? grandparentThumbPath, String? grandparentArtPath, List? grandparentBackdropPaths, String? thumbPath, String? artPath, List? backdropPaths, String? clearLogoPath, String? backgroundSquarePath,@JsonKey(fromJson: flexibleInt) int? durationMs,@JsonKey(fromJson: flexibleInt) int? viewOffsetMs,@JsonKey(fromJson: flexibleInt) int? viewCount,@JsonKey(fromJson: flexibleInt) int? lastViewedAt,@JsonKey(fromJson: flexibleInt) int? leafCount,@JsonKey(fromJson: flexibleInt) int? viewedLeafCount,@JsonKey(fromJson: flexibleInt) int? childCount,@JsonKey(fromJson: flexibleInt) int? addedAt,@JsonKey(fromJson: flexibleInt) int? updatedAt,@JsonKey(fromJson: flexibleDouble) double? rating,@JsonKey(fromJson: flexibleDouble) double? userRating,@JsonKey(fromJson: _mediaItemRatingsFromJson) List? ratings, bool? isFavorite,@JsonKey(fromJson: _mediaItemStringList) List? genres,@JsonKey(fromJson: _mediaItemStringList) List? directors,@JsonKey(fromJson: _mediaItemStringList) List? writers,@JsonKey(fromJson: _mediaItemStringList) List? producers,@JsonKey(fromJson: _mediaItemStringList) List? countries,@JsonKey(fromJson: _mediaItemStringList) List? collections,@JsonKey(fromJson: _mediaItemStringList) List? labels,@JsonKey(fromJson: _mediaItemStringList) List? styles,@JsonKey(fromJson: _mediaItemStringList) List? moods,@JsonKey(fromJson: _mediaItemRolesFromJson) List? roles,@JsonKey(fromJson: _mediaItemVersionsFromJson) List? mediaVersions, String? libraryId, String? libraryTitle, String? audioLanguage, String? playlistItemId, String? serverId, String? serverName, String? backendFolderKey,@JsonKey(fromJson: _mediaItemRawFromJson) Map? raw
});
@@ -569,9 +576,10 @@ class _$JellyfinMediaItemCopyWithImpl<$Res>
/// Create a copy of MediaItem
/// with the given fields replaced by the non-null parameter values.
-@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? kind = null,Object? guid = freezed,Object? title = freezed,Object? titleSort = freezed,Object? summary = freezed,Object? tagline = freezed,Object? originalTitle = freezed,Object? studio = freezed,Object? year = freezed,Object? originallyAvailableAt = freezed,Object? contentRating = freezed,Object? parentId = freezed,Object? parentTitle = freezed,Object? parentThumbPath = freezed,Object? parentIndex = freezed,Object? index = freezed,Object? grandparentId = freezed,Object? grandparentTitle = freezed,Object? grandparentThumbPath = freezed,Object? grandparentArtPath = freezed,Object? grandparentBackdropPaths = freezed,Object? thumbPath = freezed,Object? artPath = freezed,Object? backdropPaths = freezed,Object? clearLogoPath = freezed,Object? backgroundSquarePath = freezed,Object? durationMs = freezed,Object? viewOffsetMs = freezed,Object? viewCount = freezed,Object? lastViewedAt = freezed,Object? leafCount = freezed,Object? viewedLeafCount = freezed,Object? childCount = freezed,Object? addedAt = freezed,Object? updatedAt = freezed,Object? rating = freezed,Object? userRating = freezed,Object? ratings = freezed,Object? isFavorite = freezed,Object? genres = freezed,Object? directors = freezed,Object? writers = freezed,Object? producers = freezed,Object? countries = freezed,Object? collections = freezed,Object? labels = freezed,Object? styles = freezed,Object? moods = freezed,Object? roles = freezed,Object? mediaVersions = freezed,Object? libraryId = freezed,Object? libraryTitle = freezed,Object? audioLanguage = freezed,Object? playlistItemId = freezed,Object? serverId = freezed,Object? serverName = freezed,Object? backendFolderKey = freezed,Object? raw = freezed,}) {
+@override @pragma('vm:prefer-inline') $Res call({Object? dialect = null,Object? id = null,Object? kind = null,Object? guid = freezed,Object? title = freezed,Object? titleSort = freezed,Object? summary = freezed,Object? tagline = freezed,Object? originalTitle = freezed,Object? studio = freezed,Object? year = freezed,Object? originallyAvailableAt = freezed,Object? contentRating = freezed,Object? parentId = freezed,Object? parentTitle = freezed,Object? parentThumbPath = freezed,Object? parentIndex = freezed,Object? index = freezed,Object? grandparentId = freezed,Object? grandparentTitle = freezed,Object? grandparentThumbPath = freezed,Object? grandparentArtPath = freezed,Object? grandparentBackdropPaths = freezed,Object? thumbPath = freezed,Object? artPath = freezed,Object? backdropPaths = freezed,Object? clearLogoPath = freezed,Object? backgroundSquarePath = freezed,Object? durationMs = freezed,Object? viewOffsetMs = freezed,Object? viewCount = freezed,Object? lastViewedAt = freezed,Object? leafCount = freezed,Object? viewedLeafCount = freezed,Object? childCount = freezed,Object? addedAt = freezed,Object? updatedAt = freezed,Object? rating = freezed,Object? userRating = freezed,Object? ratings = freezed,Object? isFavorite = freezed,Object? genres = freezed,Object? directors = freezed,Object? writers = freezed,Object? producers = freezed,Object? countries = freezed,Object? collections = freezed,Object? labels = freezed,Object? styles = freezed,Object? moods = freezed,Object? roles = freezed,Object? mediaVersions = freezed,Object? libraryId = freezed,Object? libraryTitle = freezed,Object? audioLanguage = freezed,Object? playlistItemId = freezed,Object? serverId = freezed,Object? serverName = freezed,Object? backendFolderKey = freezed,Object? raw = freezed,}) {
return _then(JellyfinMediaItem(
-id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
+dialect: null == dialect ? _self.dialect : dialect // ignore: cast_nullable_to_non_nullable
+as MediaBrowserDialect,id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
as String,kind: null == kind ? _self.kind : kind // ignore: cast_nullable_to_non_nullable
as MediaKind,guid: freezed == guid ? _self.guid : guid // ignore: cast_nullable_to_non_nullable
as String?,title: freezed == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
diff --git a/lib/media/server_capabilities.dart b/lib/media/server_capabilities.dart
index 8dcafb82..a9fc3cf5 100644
--- a/lib/media/server_capabilities.dart
+++ b/lib/media/server_capabilities.dart
@@ -115,6 +115,43 @@ class ServerCapabilities {
instantMix: true,
);
+ /// Defaults for an Emby server.
+ ///
+ /// `continueWatchingRemoval` is the one flag where Emby is ahead of Jellyfin:
+ /// `POST /Users/{uid}/Items/{id}/HideFromResume` drops an item from Continue
+ /// Watching while keeping its resume position, and Jellyfin 10.11 has no
+ /// equivalent route.
+ ///
+ /// Otherwise identical to [jellyfin] except [scrubThumbnails]: seek-bar
+ /// previews come
+ /// from Jellyfin's `/Videos/{id}/Trickplay` sprite sheets, which Emby (the
+ /// pre-fork ancestor) never gained — it 404s and never populates the
+ /// `Trickplay` item field. With the flag off the player never attempts the
+ /// load; see [MediaBrowserDialect.supportsTrickplay].
+ ///
+ /// Emby does expose two *other* preview transports, `/Videos/{id}/index.bif`
+ /// (the same BIF format Plex uses, so [BifThumbnailService] could parse it)
+ /// and `/Items/{id}/ThumbnailSet`. Neither is wired: on Emby 4.9.5 both
+ /// answer 200 with an empty payload — a 72-byte header-only BIF and
+ /// `{"Thumbnails": []}` — even after a full metadata+image refresh, because
+ /// Emby only fills them once its own extraction task has run. Wiring them
+ /// needs a server that has actually generated the frames, so the flag stays
+ /// `false` rather than shipping a path that cannot be verified.
+ static const ServerCapabilities emby = ServerCapabilities(
+ liveTv: true,
+ liveTvDvr: false,
+ videoTranscoding: true,
+ richHubs: false,
+ numericUserRating: false,
+ userFavorites: true,
+ continueWatchingRemoval: true,
+ externalSubtitleSearch: false,
+ richMetadataEdit: true,
+ scrubThumbnails: false,
+ folderGrouping: true,
+ instantMix: true,
+ );
+
/// Every flag here is fixed per backend *kind* except [videoTranscoding],
/// which Plex probes per server (`PlexClient.capabilities`) — so that is the
/// only override this type needs. Widen the parameter list if another flag
diff --git a/lib/metadata_edit/jellyfin_metadata_edit_adapter.dart b/lib/metadata_edit/jellyfin_metadata_edit_adapter.dart
index ea40cbad..161fcec9 100644
--- a/lib/metadata_edit/jellyfin_metadata_edit_adapter.dart
+++ b/lib/metadata_edit/jellyfin_metadata_edit_adapter.dart
@@ -13,7 +13,7 @@ class JellyfinMetadataEditAdapter extends MetadataEditAdapter {
JellyfinMetadataEditAdapter(this.client);
@override
- MediaBackend get backend => MediaBackend.jellyfin;
+ MediaBackend get backend => client.backend;
@override
MediaServerClient get mediaClient => client;
@@ -26,7 +26,7 @@ class JellyfinMetadataEditAdapter extends MetadataEditAdapter {
Future load(MediaItem item) async {
final raw = await client.fetchEditableMetadataItem(item.id);
if (raw == null) {
- throw StateError('Editable Jellyfin metadata item is unavailable');
+ throw StateError('Editable MediaBrowser metadata item is unavailable');
}
final values = {};
_writeCommonValues(values, raw, item);
@@ -56,8 +56,8 @@ class JellyfinMetadataEditAdapter extends MetadataEditAdapter {
final dto = Map.from(raw);
dto['ProviderIds'] = _stringMap(dto['ProviderIds']);
- dto['Tags'] = metadataStringList(dto['Tags']);
- dto['Genres'] = metadataStringList(dto['Genres']);
+ dto['Tags'] = _namedStringList(dto, 'Tags', 'TagItems');
+ dto['Genres'] = _namedStringList(dto, 'Genres', 'GenreItems');
dto['People'] = _mapList(dto['People']);
dto['Studios'] = _mapList(dto['Studios']);
dto['LockedFields'] = metadataStringList(dto['LockedFields']);
@@ -102,6 +102,17 @@ class JellyfinMetadataEditAdapter extends MetadataEditAdapter {
}
if (peopleChanged) dto['People'] = people;
+ // Emby ignores the plain `Genres`/`Tags` string lists on `POST /Items/{id}`
+ // and reads the `GenreItems`/`TagItems` name-pair arrays instead. The
+ // fetched DTO carries the *old* pairs, so mirroring unconditionally (not
+ // only when the field changed) is what keeps a save from silently
+ // reinstating the previous genres. See
+ // [MediaBrowserDialect.metadataWritesUseNamePairLists].
+ if (client.dialect.metadataWritesUseNamePairLists) {
+ dto['GenreItems'] = _toNamePairs(dto['Genres']);
+ dto['TagItems'] = _toNamePairs(dto['Tags']);
+ }
+
final success = await client.updateMetadataItem(draft.sourceItem.id, dto);
if (success) {
draft.extras['raw'] = dto;
@@ -178,12 +189,12 @@ class JellyfinMetadataEditAdapter extends MetadataEditAdapter {
? metadataFirstString(raw['Taglines'])
: item.tagline ?? '';
values['summary'] = raw['Overview'] as String? ?? item.summary ?? '';
- values['genre'] = metadataStringList(raw['Genres']);
+ values['genre'] = _namedStringList(raw, 'Genres', 'GenreItems');
values['director'] = _peopleByType(raw['People'], 'Director');
values['writer'] = _peopleByType(raw['People'], 'Writer');
values['producer'] = _peopleByType(raw['People'], 'Producer');
values['country'] = metadataStringList(raw['ProductionLocations']);
- values['label'] = metadataStringList(raw['Tags']);
+ values['label'] = _namedStringList(raw, 'Tags', 'TagItems');
}
void _writeArtworkValues(Map values, MediaItem item) {
@@ -242,6 +253,18 @@ List _nameList(Object? value) {
.toList();
}
+/// Effective value of a `Genres`/`Tags` style field, preferring the plain string
+/// array and falling back to its `…Items` name-pair sibling.
+///
+/// Emby never returns the plain `Tags` array at all — only `TagItems`, whatever
+/// `Fields` the request asks for (measured on Emby 4.9.5). Reading the plain key
+/// alone would show an empty tag editor for an item that has tags and, worse,
+/// write that emptiness back on the next save.
+List _namedStringList(Map