Do not offer transport a client cannot accept #20
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
mobrule/kurageyomi#20
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#1
What to build
The transport controls (#16) send commands a client may never act on. Jellyfin already knows which clients can be driven — every session carries
SupportsRemoteControl— and we do not look at it, so the app promises a control it has no reason to believe will work.Observed on a real deploy: a Moonfin client on a Google TV. The endpoints answer, the command is accepted, and the picture does not move. From the sofa a refused command and a working one are indistinguishable, because #16 deliberately does not report command failures in the footer.
Surface the capability. Add
SupportsRemoteControlto what the Sessions endpoint reports about a Playback Session.Be honest about it on screen. When the followed session cannot be driven, the transport is disabled rather than dead — the footer never changes shape (
DESIGN.md), so the controls stay put and go inert. Theherecontrol on the frozen strip needs the same treatment, since it is a seek.livedoes not: it moves the phone, not the show.Say why once, where it can be read. A disabled control with no explanation is worse than no control. Where that explanation goes is a design decision, not a free choice — it may not live in the footer, and it must not become a state the footer changes shape for.
Stop swallowing the outcome. A refused or failed command currently disappears:
drivecatches and re-polls. That was right for keeping the footer stable and wrong for diagnosing this. Log the outcome server-side so a silent failure is recoverable from the Jellyfin log rather than only from a person noticing the television did not move.Acceptance criteria
herecontrol is disabled on the same condition;livestays enabledBlocked by
Merged to
maininaf73452. Suites at merge: 79 C#, 335 phone.Jellyfin knows which clients accept remote control and we were not asking. Confirmed in the field: Moonfin takes the command and does nothing, and Jellyfin's own UI cannot drive it either.
Transport is now disabled rather than dead on a client that cannot be driven, the reason is said in the status header, and auto-pause and follow are gated at the decision rather than swallowed at the send. A resume the app already owes bypasses the gate — otherwise a session that stopped accepting commands mid-Lookup would be left paused by us with every control that could undo it disabled.
SupportsRemoteControlturned out to be computed, not stored: the capability flag alone yields false, Jellyfin also requires a live session controller. The fixture sets both.