fix(syncplay): send full series queue and resume position on initiate#2
Open
JenteJan wants to merge 1 commit into
Open
fix(syncplay): send full series queue and resume position on initiate#2JenteJan wants to merge 1 commit into
JenteJan wants to merge 1 commit into
Conversation
When starting playback in a SyncPlay group, _playSyncPlay sent a single-item queue (PlayingQueue: [itemId], position 0, startPositionTicks 0). This broke playback for other participants, notably the official Jellyfin clients (e.g. the webOS TV app): - Episodes never started on other clients. The official client queues the whole series (with PlayingItemPosition pointing at the chosen episode); a lone single-episode queue is not started by those clients. Movies, being naturally single-item, worked - which made the bug look movie-vs-episode specific. - The resume position was dropped. Continue Watching restarted the group from 0:00 because startPositionTicks fell back to 0 whenever no explicit startPosition was passed. The local playback path resolves this via model.startDuration(); the SyncPlay path did not. Mirror the local playback path: build the queue via collectQueue (full series for an episode/series/season, empty for a movie), resolve Series/Season to their next-up episode, send the whole series with the correct playingItemPosition, and fall back to the resolved item's saved resume position. Also document the matching cross-client regression scenarios per the SyncPlay regression checklist (AGENTS.md rule 10).
3320835 to
ec82d98
Compare
This was referenced Jun 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Builds on the SyncPlay work in DonutWare#735 — targets the
syncplaybranch so it folds into that PR once merged.Problem
Starting playback from Fladder while in a SyncPlay group didn't work for other participants — most visibly the official Jellyfin clients (verified against the Jellyfin web client and the LG webOS app):
Root cause
_playSyncPlaysent a single-item queue:setNewQueue(itemIds: [itemModel.id], playingItemPosition: 0, startPositionTicks: 0).PlayingItemPositionat the chosen episode). A lone single-episode queue is not started by those clients; movies are single-item by nature, so they worked and hid the bug.startPositionTicksfell back to 0 whenever no explicitstartPositionwas passed. The local playback path resolves the resume point viamodel.startDuration(); the SyncPlay path did not.Fix
Mirror the local playback path in
_playSyncPlay:collectQueue(itemModel)(full series for an episode/series/season; empty for a movie).createPlaybackModel'sfirstItemToPlay).playingItemPosition; movies fall back to a single item.Also adds the matching cross-client regression scenarios to
docs/syncplay-implementation.mdper the regression checklist.Testing
Manually verified in a real group, with Fladder as the initiator and official Jellyfin clients as the other participant — the Jellyfin web client and the LG webOS app: