fix(player): show reliable skip prompts - #9
Merged
Conversation
This was referenced Aug 27, 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.
Problem
I was seeing Skip Intro only some of the time, and Skip Credits was not appearing even when the server already had a credit marker. Markers can be discovered after playback starts but before the Apple realtime socket is connected, so the current player session could miss the update.
The app also had no manual Skip Credits prompt. When a credit marker ended exactly at the media duration, seeking Aether to that timestamp could leave playback paused on the final frame instead of entering the normal end-of-file and Next Up flow.
Approach
The player now reconciles missing intro or credit ranges once after realtime connects, while the server snapshot remains the main cross-client fix. I added Skip Credits controls on iOS and tvOS, including tvOS focus handling.
When a credit skip lands at the end of the file, it now uses the existing Silo end-of-file and Next Up path instead of seeking Aether to an exact paused EOF position.
Benefits
Performance
The reconciliation runs only once, only after realtime is connected, and only when intro or credits are missing. A complete marker session makes no extra request.
Nothing waits on the marker provider before playback begins. Marker fetching stays on the server in the background, the prompt checks are simple in-memory time-range comparisons, and the credits path reuses the existing end-of-file flow instead of adding another player pipeline. This keeps Aether startup, decoding, and seeking independent from provider response time.
Related changes
Validation
Passed locally:
The tvOS build was attempted but could not start because tvOS 26.5 is not installed in this Xcode installation. Xcode stopped during destination selection before compiling project code. No simulator platform was downloaded.
Risk
One watch-detail request can run after realtime connects when either skip range is missing. Complete marker sessions make no additional request. The credits prompt is visible only while playback is inside the credit range.
AI Disclosure