Skip to content

fix(player): hide the quality controls when the plan offers one quality - #698

Merged
Quick104 merged 2 commits into
Silo-Server:mainfrom
timmyconnect:fix/hide-single-quality-picker
Oct 13, 2026
Merged

Quick104 merged 2 commits into
Silo-Server:mainfrom
timmyconnect:fix/hide-single-quality-picker

Conversation

@timmyconnect

@timmyconnect timmyconnect commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Closes #408
Related issue: Silo-Server/silo-server#1408
Validation tasks: none

The Apple player adds Auto in front of the qualities the server offers. When the server offers only Original, for example with transcoding disabled, the player showed Auto and Original as two choices that play the same stream. This change hides the in-player quality controls on iPhone, iPad, Apple TV and Mac when there is no real choice.

Approach

ApplePlaybackQuality.hasChoice(among:) counts the options the server offered, ignoring the Auto the client adds, and PlayerViewModel.hasQualityChoice exposes it. Every quality entry point reads that one flag:

  • iPhone and iPad: the quality pill in the action row and the Quality row in the playback settings sheet.
  • Apple TV: the Quality row in the player HUD.
  • Mac: the quality button in the transport bar and the Quality tab in the options panel.
  • SiloRemote: the player sends an empty quality list when there is no choice; the remote already hides its menu for an empty list.

Nothing writes the saved quality preference, so it applies again when a later plan offers several qualities. Version selection is separate and unchanged. Watch Party needs no special case: the controls follow the plan's qualities there as well.

Validation

  • iOS unit tests (iPad Pro 11-inch (M5) simulator, iOS 26.5): the playback protocol test class, including one new test for the single-quality, empty and multi-quality cases, 81 passed, 0 failed.
  • tvOS: SiloTV builds (compile only, CODE_SIGNING_ALLOWED=NO).
  • macOS: SiloMac builds (compile only, CODE_SIGNING_ALLOWED=NO).
  • Rendered on the iPad Pro 11-inch (M5) simulator, iOS 26.5, against a live server. For a title the server offers one quality for, the Quality pill shows on main and is hidden on this branch. For a title with nine qualities, the pill shows on both. Captures below.
  • Not rendered: the Quality row in the playback settings sheet, Apple TV, Mac and SiloRemote.
  • Not run: a plan changing from several qualities to one during playback, and Watch Party.

Evidence

Evidence: https://evidence.siloserver.org/r/silo-apple/pr-698/

Surface and build: iPad player action row, same server and profile, one title with a single quality and one with several. Before is main at da34e44; after is this branch at 5bb6e34. Apple TV and Mac captures are still owed.

Risks

  • On Mac, if the Quality tab is open at the moment the choice disappears, the panel moves to the Playback tab. This was compiled but not run.
  • On Apple TV, the Quality row can disappear while it holds focus if a replan drops to one quality. This was not checked on a device.

Checklist

  • I read and can explain the complete diff.
  • This pull request addresses one concern.
  • The Evidence section shows every change a user can see, or says there is none.

AI Disclosure

  • Harness: Claude Code (desktop app)
  • Tool(s): Xcode xcodebuild, GitHub CLI
  • Model(s): claude-opus-5-5
  • Involvement: AI-authored; not yet reviewed by a human
  • Adversarial review: n/a

🤖 Generated with Claude Code

@silo-kody

silo-kody Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Silo Kody — review complete

Review finished. Check the inline comments for findings and verify each suggestion against the code and tests.

Reviewing changes in Silo
  • Include the related issue, expected behavior, and validation steps in the PR description.
  • For API changes, describe the effect on Apple and Android clients and Jellyfin compatibility.
  • For plugin changes, identify the affected SDK contract, plugin, and catalog entry.
  • Follow this repository's AGENTS.md and CONTRIBUTING.md.
  • Request another review with @kody start-review in a PR comment.
  • React with 👍 or 👎 to give feedback on individual suggestions.
Review settings
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ❌

@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f08cb59f-9502-4a81-985d-a57e8c8a63bf
📥 Commits

Reviewing files that changed from the base of the PR and between 7af0d58 and 6f9189f.

📒 Files selected for processing (8)
  • iosApp/Tests/PlaybackProtocolV3Tests.swift
  • iosApp/iosApp/Screens/Player/ApplePlaybackQuality.swift
  • iosApp/iosApp/Screens/Player/PlayerViewModel.swift
  • iosApp/iosApp/Screens/Player/Sheets/PlayerSettingsSheet.swift
  • iosApp/iosApp/Screens/Player/iOS/MobilePlayerControls.swift
  • iosApp/iosApp/Screens/Player/tvOS/TVPlayerInfoHUD.swift
  • iosApp/iosApp/macOS/MacPlayerControls.swift
  • iosApp/iosApp/macOS/MacPlayerOptionsPanel.swift
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Quick104 Quick104 added priority: P2 Limited scope, workaround exists, or polish impact: polish Annoyance, cosmetic, or nice-to-have labels Oct 8, 2026 — with Cursor

Quick104 commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Note

Grok commenting on Quick's behalf.

Evidence FAIL — this PR changes what users see in the player quality controls, but Evidence has no artifacts yet.

Missing:

  • Before/after captures (or a shelf link) showing quality controls hidden when the plan offers one quality, and still shown when there are several
  • Coverage for the surfaces the diff actually changes: iOS (pill + settings sheet), tvOS (HUD Quality row), and macOS (transport button + Quality tab)

Unit tests and compile-only builds don't replace visual Evidence for this UI change.

Comment thread iosApp/iosApp/macOS/MacPlayerOptionsPanel.swift
@silo-kody

silo-kody Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Silo Kody — review complete

Review finished. Check the inline comments for findings and verify each suggestion against the code and tests.

Reviewing changes in Silo
  • Include the related issue, expected behavior, and validation steps in the PR description.
  • For API changes, describe the effect on Apple and Android clients and Jellyfin compatibility.
  • For plugin changes, identify the affected SDK contract, plugin, and catalog entry.
  • Follow this repository's AGENTS.md and CONTRIBUTING.md.
  • Request another review with @kody start-review in a PR comment.
  • React with 👍 or 👎 to give feedback on individual suggestions.
Review settings
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ❌
⚠️ 2 Kody Rule(s) were not evaluated

These rules declare that they need repository context beyond this diff, and the review could not retrieve it, so they were not judged on this pull request:

  • Centralize server-relative authentication path validation
  • Enforce latest-link-wins centrally across deferred deep links

timmyconnect and others added 2 commits October 8, 2026 21:18
The player prepends Auto to the server's qualities, so a plan with only
Original showed Auto and Original as if they were a choice. The quality
pill, settings row, tvOS HUD row, Mac button and tab, and the remote's
menu are now hidden unless the plan offers more than one quality. The
saved preference is not written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
If the options panel was on Quality when a replan left one quality, the
tab vanished from the picker but its content stayed. The panel now moves
to Playback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@timmyconnect
timmyconnect force-pushed the fix/hide-single-quality-picker branch from 5bb6e34 to 6f9189f Compare October 8, 2026 19:18
@silo-kody

silo-kody Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Silo Kody — review complete

Review finished. Check the inline comments for findings and verify each suggestion against the code and tests.

Reviewing changes in Silo
  • Include the related issue, expected behavior, and validation steps in the PR description.
  • For API changes, describe the effect on Apple and Android clients and Jellyfin compatibility.
  • For plugin changes, identify the affected SDK contract, plugin, and catalog entry.
  • Follow this repository's AGENTS.md and CONTRIBUTING.md.
  • Request another review with @kody start-review in a PR comment.
  • React with 👍 or 👎 to give feedback on individual suggestions.
Review settings
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ❌

@Quick104
Quick104 merged commit f148e23 into Silo-Server:main Oct 13, 2026
7 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

impact: polish Annoyance, cosmetic, or nice-to-have priority: P2 Limited scope, workaround exists, or polish

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Hide in-player quality selectors when only one quality is available

2 participants