Background
The proxy is currently read-only for watch state. Progress and played status are fetched from Jellyfin on detail requests but there is no way for clients to report back position updates or mark items as played. This means the resume point never advances after watching, and the continue watching section (issue #N) cannot work correctly.
What to add
POST /library/{id}/progress — report current playback position (position_ms, played flag). Proxied to Jellyfin POST /Users/{userId}/PlayingItems/{itemId} (session open) and POST /Users/{userId}/PlayingItems/{itemId}/Progress (position update).
DELETE /library/{id}/progress or POST /library/{id}/played — mark item fully played. Proxied to Jellyfin POST /Users/{userId}/PlayedItems/{itemId}.
- Episode variants: same endpoints accept catalog ID in
jf:<uuid> form (episodes have no TMDB ID).
Request body for progress update:
{ "position_ms": 412000, "played": false }
What stays the same
- Auth flow unchanged — proxy JWT in, Jellyfin token fetched from DB per request.
- Read path (
GET /library/{id} returning progress) unchanged.
Background
The proxy is currently read-only for watch state. Progress and played status are fetched from Jellyfin on detail requests but there is no way for clients to report back position updates or mark items as played. This means the resume point never advances after watching, and the continue watching section (issue #N) cannot work correctly.
What to add
POST /library/{id}/progress— report current playback position (position_ms, played flag). Proxied to JellyfinPOST /Users/{userId}/PlayingItems/{itemId}(session open) andPOST /Users/{userId}/PlayingItems/{itemId}/Progress(position update).DELETE /library/{id}/progressorPOST /library/{id}/played— mark item fully played. Proxied to JellyfinPOST /Users/{userId}/PlayedItems/{itemId}.jf:<uuid>form (episodes have no TMDB ID).Request body for progress update:
{ "position_ms": 412000, "played": false }What stays the same
GET /library/{id}returningprogress) unchanged.