Skip to content

fix: list the remembered OpenSubtitles file in the detail page's Subtitles menu - #189

Merged
blurbery merged 2 commits into
mainfrom
fix/opensubtitles-remembered-on-replay
Oct 20, 2026
Merged

blurbery merged 2 commits into
mainfrom
fix/opensubtitles-remembered-on-replay

Conversation

@blurbery

@blurbery blurbery commented Oct 20, 2026 •

Copy link
Copy Markdown
Owner

Problem and reproduction

Reported on Discord against 0.44.0 on Apple TV with Emby: pick a subtitle from OpenSubtitles, close the video, come back to the title, and the srt has gone. It happens every time.

Vivid already remembers the chosen OpenSubtitles file per title and file version, and the player restores it on the next play. The detail page's Subtitles menu was the gap:

  • It never listed the remembered file, on Apple TV or in the iPhone and iPad sheet.
  • While a file was remembered, neither Auto nor Off was ticked, so nothing in the menu looked chosen and the srt looked gone.
  • Tapping anything there to sort it out (Auto, Off or a track) forgets the remembered file, so the next play really didn't have it.

To reproduce on main: connect OpenSubtitles, play a title and pick a subtitle from Find on OpenSubtitles, stop, then open Subtitles on the movie or episode page. The file isn't listed and nothing is ticked.

Implementation and impact

  • TVPlaybackSelectorRow.swift (Apple TV): the Subtitles menu lists the file as "OpenSubtitles · file name" with a tick, after Off (and while the file's own subtitles are still being read, straight after Auto). Choosing it does nothing except close the menu, so the file is kept.
  • OpenSubtitlesViews.swift (iPhone and iPad detail sheet): the same row after Off. Choosing it closes the sheet and keeps the file.
  • The row shows for a file picked from Find on OpenSubtitles on the detail page before playing, and for one remembered from an earlier viewing. Both come from the existing stagedLabel, which already drives the summary line and the Auto and Off ticks.
  • Both detail pages now call OpenSubtitlesStore.reload() when they appear. Before, nothing on the detail page loaded the store's connection and scope, so straight after launch stagedLabel returned nil and the file's label and tick (and now the row) were missing until the player, a search or Settings had run. This was likely part of the original report too, since on a fresh launch Auto showed ticked instead.

Deliberately unchanged: how the file is remembered and restored, what Auto, Off and the other rows do (they still replace the file, as documented), the player's own subtitle menus (which already list the file), and Silo, Emby and Jellyfin behaviour, which is the same for all three.

Validation

  • xcodebuild build -scheme VividTV on the Apple TV 4K (3rd generation) simulator, CODE_SIGNING_ALLOWED=NO: succeeded, with both changed files recompiled.
  • xcodebuild build -scheme Vivid on the iPhone 18 Pro simulator, CODE_SIGNING_ALLOWED=NO: succeeded.
  • python3 scripts/ci/check-docs.py --base origin/main: passed.
  • Not run locally: the test suite and the rest of PR checks (CI runs them).

Performance

Not applicable. The row reads the same in-memory label the menu already reads for its ticks.

Testing status

  • Tested? Partly, builds only.
  • Environment: tvOS and iOS simulators.
  • Revision: 6bc6412 (builds and docs check rerun after the review fixes).
  • Checks and results: both apps build. The menus weren't opened with a remembered file, since that needs a signed-in server and an OpenSubtitles key.
  • Limitations: not checked on a device or with a real OpenSubtitles download. No before and after screenshots for the same reason. The player-side restore reads correctly but hasn't been exercised on a device either. If the reporter's srt also disappears when they press Play straight away without touching the menu, that's a separate cause still to find.

Design impact and approval

Important

Only blurbery can approve design changes. Obtain prior, explicit approval and reference it here. Unapproved design changes must not be merged.

  • Design impact: adds one ticked row, "OpenSubtitles · file name", to the detail page's Subtitles menu on Apple TV and in the iPhone and iPad sheet, using the existing row styles. Nothing else changes.
  • Approval from blurbery: approved by me (blurbery) before this was built, on 20 October 2026.

Documentation impact

  • docs/plugins.md: Next time you watch now says the detail page lists the remembered file with a tick.

  • docs/playback/README.md: the subtitle menus paragraph says the same.

  • docs/playback/architecture.md: the OpenSubtitles paragraph covers the row and the reload on the detail pages.

  • I checked the docs this change affects and updated them in this PR, or explained above why none needed changes.

AI disclosure

Important

Required for every PR. Incomplete disclosures are not ready for review or merge.

I implemented these changes and used Claude Opus as a tool.

View guided diff

…itles menu

Coming back to a title after picking an OpenSubtitles file, the Subtitles
menu on the movie or episode page didn't list that file, and neither Auto
nor Off was ticked, so the subtitle looked gone. Tapping anything there to
fix it then really did forget the file.

The menu now lists the file as "OpenSubtitles · file name" with a tick, on
Apple TV and on iPhone and iPad. Choosing it keeps it.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude review of the whole PR at 329ae09. The summary comment lists everything found.

Comment thread docs/playback/README.md Outdated
Comment thread iosApp/iosApp/tvOS/Screens/Detail/TVPlaybackSelectorRow.swift
Comment thread iosApp/iosApp/tvOS/Screens/Detail/TVPlaybackSelectorRow.swift
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Claude review of the new commits 329ae09..6bc6412

I reviewed the new commits: the OpenSubtitlesStore.shared.reload() tasks on the tvOS selector row and the phone detail modifier, plus the README and architecture doc changes. Nothing needs fixing, and all three earlier findings are addressed.

  • Store not loaded: the tvOS and phone detail pages now reload the store when they appear. stagedLabel no longer returns nil because loadedScope was never set, and reload() only resets state when the scope or key has changed.
  • README wording: the "Until then" sentence now says the file is listed "for as long as it's remembered".
  • Architecture doc: a new sentence describes the detail-menu row and the reload on appear, and it matches the code for both Apple TV and iPhone.

I couldn't check any of this by running the apps. I only read the code.

I checked the new commits against the code and found nothing to fix. The earlier "Until then" wording in docs/playback/README.md now reads "for as long as it's remembered", which matches how stagedLabel behaves. The new sentences in docs/playback/architecture.md hold: the detail menus list the file as "OpenSubtitles · file name" with Auto and Off unticked, and choosing it keeps it. The new OpenSubtitlesStore.shared.reload() tasks in TVPlaybackSelectorRow.swift and OpenSubtitlesViews.swift set loadedScope, so the row and tick show straight after launch. docs/plugins.md and docs/server-connections.md still match. I did not check the "approved by blurbery on 20 October 2026" line in the description.

claude-sonnet-5-5, high effort, 16 turns, about US$0.29 of API credit

…ile shows after launch

The store only learns its connection and scope when something reloads it,
and nothing on the detail pages did. Straight after launch the remembered
file's row, tick and label were missing until the player, a search or
Settings had run. Both detail pages now reload it when they appear.

Also corrects the playback README wording and adds the row to the
architecture doc.
@blurbery
blurbery merged commit b8b5fac into main Oct 20, 2026
27 checks passed
@blurbery
blurbery deleted the fix/opensubtitles-remembered-on-replay branch October 20, 2026 04:36
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