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:
parent
63c6e782c8
commit
62636319b1
12 changed files with 452 additions and 5 deletions
|
|
@ -74,6 +74,7 @@ export default function Feed({
|
|||
view,
|
||||
canRead,
|
||||
isDemo = false,
|
||||
plexEnabled = false,
|
||||
onOpenWizard,
|
||||
ytSearch,
|
||||
onYtSearch,
|
||||
|
|
@ -86,6 +87,8 @@ export default function Feed({
|
|||
view: "grid" | "list";
|
||||
canRead: boolean;
|
||||
isDemo?: boolean;
|
||||
// When the optional Plex module is on, offer "Plex" as a feed source (App swaps to PlexBrowse).
|
||||
plexEnabled?: boolean;
|
||||
onOpenWizard: () => void;
|
||||
// Live YouTube search: the active search term (null = normal feed). Entering a search and
|
||||
// leaving it both step browser history (the search is a feed sub-view with its own history
|
||||
|
|
@ -560,6 +563,7 @@ export default function Feed({
|
|||
<option value="organic">{t("feed.source.organic")}</option>
|
||||
<option value="all">{t("feed.source.all")}</option>
|
||||
<option value="search">{t("feed.source.only")}</option>
|
||||
{plexEnabled && <option value="plex">{t("feed.source.plex")}</option>}
|
||||
</select>
|
||||
</label>
|
||||
</>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue