PlaybackRemote: pause, unpause, and seek a Playback Session #14

Closed
opened 2026-08-10 12:42:12 +00:00 by aiko · 1 comment
Owner

Parent

#1

What to build

The plugin gains the ability to act on a Playback Session rather than only observe one. PlaybackRemote pauses, unpauses, and seeks the session the phone is following, exposed over authenticated data endpoints alongside the existing ones.

Seeking takes a position in ticks. The caller decides where that came from — the phone knows where Cues begin, the server does not need to.

This is the module the PRD lists and the one ADR 0007 said would arrive eventually. It is deliberately thin: it forwards to Jellyfin's session APIs and holds no policy. Auto-pause, per-Cue transport, and follow mode are all built on it later and none of their behaviour belongs here.

The PRD marks this module as one where a test would assert the mock rather than any behaviour of ours, and that judgement stands for the pass-through itself. It does not extend to anything this slice adds on top: argument construction, tick conversion, or refusing a command for a session that is not playing all get tests.

Acceptance criteria

  • Pause, unpause, and seek reach the right Playback Session and no other
  • Seek takes ticks and converts correctly to whatever unit Jellyfin's API wants
  • Each endpoint requires the same Jellyfin authentication as the existing data endpoints
  • A command for a session that is not playing, or that does not exist, fails in a way the phone can report rather than throwing
  • Whatever logic this slice adds beyond the pass-through is covered by tests

Blocked by

None - can start immediately

## Parent #1 ## What to build The plugin gains the ability to act on a Playback Session rather than only observe one. `PlaybackRemote` pauses, unpauses, and seeks the session the phone is following, exposed over authenticated data endpoints alongside the existing ones. Seeking takes a position in ticks. The caller decides where that came from — the phone knows where Cues begin, the server does not need to. This is the module the PRD lists and the one ADR 0007 said would arrive eventually. It is deliberately thin: it forwards to Jellyfin's session APIs and holds no policy. Auto-pause, per-Cue transport, and follow mode are all built on it later and none of their behaviour belongs here. The PRD marks this module as one where a test would assert the mock rather than any behaviour of ours, and that judgement stands for the pass-through itself. It does not extend to anything this slice adds on top: argument construction, tick conversion, or refusing a command for a session that is not playing all get tests. ## Acceptance criteria - [ ] Pause, unpause, and seek reach the right Playback Session and no other - [ ] Seek takes ticks and converts correctly to whatever unit Jellyfin's API wants - [ ] Each endpoint requires the same Jellyfin authentication as the existing data endpoints - [ ] A command for a session that is not playing, or that does not exist, fails in a way the phone can report rather than throwing - [ ] Whatever logic this slice adds beyond the pass-through is covered by tests ## Blocked by None - can start immediately
aiko referenced this issue from a commit 2026-08-10 16:20:44 +00:00
Author
Owner

This was generated by AI during triage.

Merged to main in af73452. Suites at merge: 79 C#, 335 phone.

Pause, unpause and seek a Playback Session, over authenticated endpoints. Deliberately thin: it forwards to Jellyfin and holds no policy.

The acceptance criterion about converting ticks was wrong — Jellyfin's SeekPositionTicks is already the same 100ns unit as the Playhead, verified by reflecting over MediaBrowser.Model.dll rather than from memory. A comment records it so nobody adds a conversion later.

Another user's Playback Session returns 404, not 403: a housemate's television is not ours to drive, and 404 does not confirm the session exists.

> *This was generated by AI during triage.* Merged to `main` in af73452. Suites at merge: 79 C#, 335 phone. Pause, unpause and seek a Playback Session, over authenticated endpoints. Deliberately thin: it forwards to Jellyfin and holds no policy. The acceptance criterion about converting ticks was wrong — Jellyfin's `SeekPositionTicks` is already the same 100ns unit as the Playhead, verified by reflecting over `MediaBrowser.Model.dll` rather than from memory. A comment records it so nobody adds a conversion later. Another user's Playback Session returns 404, not 403: a housemate's television is not ours to drive, and 404 does not confirm the session exists.
aiko closed this issue 2026-08-10 16:21:23 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
mobrule/kurageyomi#14
No description provided.