Skip to content

fix(player): show reliable skip prompts - #9

Merged
blurbery merged 1 commit into
mainfrom
fix/aether-marker-prompts
Aug 27, 2026
Merged

fix(player): show reliable skip prompts#9
blurbery merged 1 commit into
mainfrom
fix/aether-marker-prompts

Conversation

@blurbery

@blurbery blurbery commented Aug 27, 2026

Copy link
Copy Markdown
Owner

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

  • Skip Intro appears consistently when the marker arrives during startup.
  • Skip Credits is now visible and actionable on iOS and tvOS.
  • Credit skips transition cleanly into Next Up instead of parking on the last frame.
  • Stored server markers work for the current session as well as later users.
  • The same server fix also helps Android receive the latest marker snapshot after connecting.

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:

  • iOS Simulator build with signing disabled against AetherEngine revision 0ae80496ab6f3fda135f43ef195ff10961c0e625
  • Swift parser check for PlayerView.swift, PlayerViewModel.swift, MobilePlayerControls.swift, and TVPlayerControls.swift
  • git diff --check

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

  • Tool(s): OpenAI Codex
  • Model(s): GPT-5
  • Involvement: AI-assisted
  • Adversarial review: I compared the app behavior with the pinned AetherEngine seek implementation, checked iOS and tvOS prompt lifecycle and focus, and fixed the tvOS press-capture condition that could otherwise steal focus from Skip Credits.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant