diff --git a/README.md b/README.md index 3c31c43..45b3783 100644 --- a/README.md +++ b/README.md @@ -331,6 +331,15 @@ Then put it behind your existing reverse proxy like everything else - [x] Sticky search bar on the library/artist/album pages, and letting anyone seek within the current music track (same no-host-check model pause/resume already had) — see docs/architecture.md +- [x] Skip intro / jump to next episode at end credits, using Emby's own + native marker detection (`EnableMarkerDetection` + its "Detect + Episode Intros" task) rather than building fingerprinting + ourselves — see docs/architecture.md +- [x] Report each party member's own playback to Emby's real Sessions + API (`/Sessions/Playing`, `/Progress`, `/Stopped`), so the admin + dashboard sees watch-party streams the same way it sees a native + client's — one session per member, under their own account — see + docs/architecture.md - [ ] Try a full party end-to-end with two real accounts (still the main gap) - [ ] Try casting to a real Chromecast (only the SDK's own bootstrap is confirmed here — no real device/session) diff --git a/client/src/api/embyApi.ts b/client/src/api/embyApi.ts index 13d71c8..68774a7 100644 --- a/client/src/api/embyApi.ts +++ b/client/src/api/embyApi.ts @@ -3,7 +3,7 @@ // module just wraps fetch calls to our own /api/* routes. See // docs/architecture.md for why this changed from the first version (CORS, // plus not wanting the browser to hold an Emby token at all). -import type { ItemDto, LibraryDto, PlaybackOptionsDto, SeasonDto } from '../types'; +import type { ItemDto, LibraryDto, PlaybackMarkersDto, PlaybackOptionsDto, SeasonDto } from '../types'; async function apiFetch(path: string, options: RequestInit = {}): Promise { const res = await fetch(path, { @@ -116,6 +116,10 @@ export function getPlaybackOptions(itemId: string): Promise return apiFetch(`/api/catalog/item/${itemId}/playback-options`); } +export function getPlaybackMarkers(itemId: string): Promise { + return apiFetch(`/api/catalog/item/${itemId}/markers`); +} + /** The party's own shared Emby stream (server/src/services/ * PartyStreamService.ts) - one negotiated PlaybackInfo session reused * by every member, instead of each viewer's own