feat(plex): P0 admin Config UI — connection test + library picker

- ConfigPanel 'plex' group auto-renders; adds a Test-connection button + a
  library-picker (checked sections write plex_libraries, applied on Save)
- api.testPlex + PlexTestResult/PlexSection types
- i18n config namespace: plex group + 7 fields + test strings (en/hu/de);
  also fills the previously-missing 'downloads' group label
This commit is contained in:
npeter83 2026-07-05 01:35:08 +02:00
parent a88254c841
commit 5684d6c406
5 changed files with 215 additions and 9 deletions

View file

@ -10,7 +10,9 @@
"backfill": "Nachladen (Backfill)",
"shorts": "Shorts-Prüfung",
"batch": "Stapelgrößen",
"explore": "Kanal erkunden"
"explore": "Kanal erkunden",
"downloads": "Downloads",
"plex": "Plex"
},
"fields": {
"smtp_host": {
@ -100,6 +102,34 @@
"search_grace_days": {
"label": "Suchergebnisse — Karenzzeit (Tage)",
"hint": "Wie lange ein nicht behaltenes Live-Suchergebnis-Video (niemand hat es angesehen/gespeichert/abonniert) behalten wird, bevor die Entdeckungs-Aufräumaufgabe es entfernt."
},
"plex_enabled": {
"label": "Plex aktivieren",
"hint": "Zeigt die Plex-Bibliothek als Feed-Quelle mit einem umfangreichen Player. Erfordert, dass der Plex-Server von diesem Host erreichbar ist und die Medien auf einem lokalen Mount liegen (siehe Pfad-Zuordnung)."
},
"plex_server_url": {
"label": "Plex-Server-URL",
"hint": "Von diesem Host erreichbare Basis-URL, z. B. http://192.168.1.112:32400."
},
"plex_server_token": {
"label": "Plex-Server-Token",
"hint": "Der Admin-X-Plex-Token des Servers. Nur serverseitig genutzt (Metadaten + Bilder); wird nie an den Browser gesendet. Verschlüsselt gespeichert; nur schreibbar."
},
"plex_path_map": {
"label": "Medien-Pfad-Zuordnung",
"hint": "Ordnet die Plex-Dateipfade dem lokalen Mount dieses Hosts zu, damit Siftlode die physische Datei abspielen kann. Durch Zeilenumbruch/Komma getrennte plexPrefix=localPrefix-Paare, z. B. /data=/plex-media. Leer = auf beiden Seiten identisch."
},
"plex_libraries": {
"label": "Angezeigte Bibliotheken",
"hint": "Durch Kommas getrennte Plex-Sektionsschlüssel. Leer = alle Sektionen. Nutze nach dem Verbindungstest die Bibliotheksauswahl unten."
},
"plex_sync_interval_min": {
"label": "Sync-Intervall (Minuten)",
"hint": "Wie oft die Katalog-Sync-Aufgabe die Plex-Metadaten spiegelt."
},
"plex_max_transcodes": {
"label": "Max. gleichzeitige Transcodes",
"hint": "Obergrenze für gleichzeitige CPU-Transcodes inkompatibler Dateien (späterer Fallback). Direkt abspielbare Dateien sind nicht begrenzt."
}
},
"save": "Speichern",
@ -121,5 +151,15 @@
"testEmail": "Test-E-Mail senden",
"testEmailHint": "Sende eine Test-E-Mail an deine eigene Adresse mit den obigen Einstellungen, um zu prüfen, ob sie funktionieren.",
"testSent": "Test-E-Mail gesendet an {{to}}",
"testFailed": "Test-E-Mail fehlgeschlagen — prüfe die Einstellungen"
"testFailed": "Test-E-Mail fehlgeschlagen — prüfe die Einstellungen",
"plexTest": "Verbindung testen",
"plexTestHint": "Prüft die Plex-Server-URL + den Token und lädt die Bibliotheksliste. Speichere zuerst deine Änderungen.",
"plexTestDirty": "Speichere deine Änderungen vor dem Verbindungstest.",
"plexTestOk": "Verbunden mit {{name}}",
"plexTestFailed": "Plex-Verbindung fehlgeschlagen — prüfe URL und Token",
"plexConnected": "Verbunden mit {{name}} {{version}}",
"plexPickLibraries": "Anzuzeigende Bibliotheken:",
"plexPickHint": "Keine auszuwählen entspricht dem Anzeigen aller Bibliotheken. Nicht vergessen zu speichern.",
"plexMovies": "Filme",
"plexShows": "Serien"
}