fix: list the remembered OpenSubtitles file in the detail page's Subtitles menu
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 launchstagedLabelreturned 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 VividTVon the Apple TV 4K (3rd generation) simulator,CODE_SIGNING_ALLOWED=NO: succeeded, with both changed files recompiled.xcodebuild build -scheme Vividon 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.