feat(plex): P1 frontend — Plex feed source, browse/search, show drill-down

- PlexBrowse.tsx: self-contained Plex mode (library scope tabs, own search +
  sort, poster-card grid with watch state + playability tint, paged; show →
  seasons/episodes drill-down). Playback announces (P2 wires the real player).
- Feed source dropdown gains a 'Plex' option (gated on me.plex_enabled); App
  swaps <Feed> for <PlexBrowse> when librarySource==='plex' so the video-feed
  hooks don't run in Plex mode. me exposes plex_enabled.
- api client (plexLibraries/plexBrowse/plexShow/plexImageUrl) + types; librarySource
  union + share-URL restore gain 'plex'; new plex i18n namespace en/hu/de.
- Verified over HTTP (authed): libraries, browse+FTS, image proxy 200 image/jpeg.
This commit is contained in:
npeter83 2026-07-05 02:32:00 +02:00
parent 63c6e782c8
commit 62636319b1
12 changed files with 452 additions and 5 deletions

View file

@ -36,7 +36,8 @@
"tip": "Danach filtern, wie Videos hierher kamen: nur deine Abos/Katalog, samt deiner über Live-YouTube-Suche gefundenen Videos, oder nur diese Suchergebnisse.",
"organic": "Ohne Suchergebnisse",
"all": "Mit Suchergebnissen",
"only": "Nur Suchergebnisse"
"only": "Nur Suchergebnisse",
"plex": "Plex"
},
"yt": {
"searchFor": "Auf YouTube suchen nach „{{query}}”",

View file

@ -0,0 +1,22 @@
{
"backToFeed": "YouTube-Feed",
"backToLibrary": "Zurück zur Bibliothek",
"searchPlaceholder": "Plex durchsuchen…",
"sort": {
"added": "Kürzlich hinzugefügt",
"title": "Titel"
},
"count": "{{count}} Titel",
"searchCount": "{{count}} Treffer",
"loading": "Wird geladen…",
"empty": "Noch nichts hier. Starte eine Plex-Synchronisierung auf der Admin-Konfigurationsseite.",
"loadMore": "Mehr laden",
"watched": "Angesehen",
"seasons": "{{count}} Staffeln",
"playerSoon": "Player kommt bald — „{{title}}“",
"playable": {
"direct": "Spielt direkt im Browser",
"remux": "Braucht ein leichtes Remux (keine Video-Neucodierung)",
"transcode": "Braucht Transcoding (aufwendiger)"
}
}

View file

@ -36,7 +36,8 @@
"tip": "Filter by how videos got here: your subscriptions/catalog only, plus videos you found via live YouTube search, or only those search results.",
"organic": "Hide search results",
"all": "Include search results",
"only": "Search results only"
"only": "Search results only",
"plex": "Plex"
},
"yt": {
"searchFor": "Search YouTube for “{{query}}”",

View file

@ -0,0 +1,22 @@
{
"backToFeed": "YouTube feed",
"backToLibrary": "Back to library",
"searchPlaceholder": "Search Plex…",
"sort": {
"added": "Recently added",
"title": "Title"
},
"count": "{{count}} titles",
"searchCount": "{{count}} matches",
"loading": "Loading…",
"empty": "Nothing here yet. Run a Plex sync from the admin Config page.",
"loadMore": "Load more",
"watched": "Watched",
"seasons": "{{count}} seasons",
"playerSoon": "Player coming soon — “{{title}}”",
"playable": {
"direct": "Plays directly in the browser",
"remux": "Needs a light remux (no video re-encode)",
"transcode": "Needs transcoding (heavier)"
}
}

View file

@ -36,7 +36,8 @@
"tip": "Szűrés aszerint, hogyan kerültek be a videók: csak a feliratkozásaid/katalógus, az élő YouTube-keresésből talált videóiddal együtt, vagy csak azok a keresési találatok.",
"organic": "Keresés nélkül",
"all": "Kereséssel együtt",
"only": "Csak keresésből"
"only": "Csak keresésből",
"plex": "Plex"
},
"yt": {
"searchFor": "Keresés a YouTube-on: „{{query}}”",

View file

@ -0,0 +1,22 @@
{
"backToFeed": "YouTube feed",
"backToLibrary": "Vissza a könyvtárhoz",
"searchPlaceholder": "Keresés a Plexben…",
"sort": {
"added": "Nemrég hozzáadott",
"title": "Cím"
},
"count": "{{count}} cím",
"searchCount": "{{count}} találat",
"loading": "Betöltés…",
"empty": "Még nincs itt semmi. Futtass egy Plex-szinkront az admin Konfiguráció oldalról.",
"loadMore": "Több betöltése",
"watched": "Megnézve",
"seasons": "{{count}} évad",
"playerSoon": "A lejátszó hamarosan jön — „{{title}}”",
"playable": {
"direct": "Közvetlenül játszható a böngészőben",
"remux": "Könnyű remux kell (nincs videó-újrakódolás)",
"transcode": "Transcode kell (nehezebb)"
}
}