feat(plex): every show card plays the episode it would put on

A show card's picture opened the show page everywhere but Home, whose shelves carried the
resolved `next`. Now every Plex picture plays: a show asks `GET /api/plex/show/{id}/next`
(the in-progress episode, else the first unwatched, else S1·E1 — the rule Home and the show
page's Resume follow) on the click, fresh each time. A started show shows Continue + Restart;
its title, an ⓘ and the menu's "Open show" row open its page; one with no episodes opens there.

The question is asked per show, never carried on every card: three probes a show would cost a
grid page up to 180 queries. The hover preview asks it once it opens and names the episode
("Next: S6·E16 — Title"). Related shows on a show page play the same way.
This commit is contained in:
2026-10-09 01:22:00 +02:00
parent 851b97b09d
commit 3eb87e7108
21 changed files with 405 additions and 43 deletions
@@ -132,6 +132,7 @@ describe("the restart button on a show and a season", () => {
onPlay={onPlay}
onOpenSeason={() => {}}
onOpenShow={() => {}}
onPlayShow={() => {}}
/>,
);
const btn = await screen.findByRole("button", { name: /plex\.series\.showFromStart/ });
@@ -154,6 +155,7 @@ describe("the show page's summary", () => {
onPlay={() => {}}
onOpenSeason={() => {}}
onOpenShow={() => {}}
onPlayShow={() => {}}
/>,
);
fireEvent.click(await screen.findByText("plex.textMore"));