mirror of
https://github.com/yattee/yattee.git
synced 2026-07-21 06:42:01 +00:00
Add audio-only music mode
Persistent per-platform mode that plays only the audio track to save bandwidth and speed up loads. When enabled, stream selection picks the best audio-only stream (preferred language, codec, bitrate) and never fetches the video URL; toggling mid-video reloads at the current position using the quality-switch path (live vid=no toggling is avoided due to A/V desync). - Toggle row in the player quality/settings sheet on iOS, macOS and tvOS, next to lock controls - New audioMode control button type (red when active) for player controls and mini player layouts - Picking a video quality explicitly turns the mode off; audio track picks keep it on and now work while audio-only is playing - Stream URL refresh preserves audio-only playback instead of resurrecting video - Queue preloads and history entries resolved before a toggle are discarded so selection re-runs with the current mode - tvOS player shows the video thumbnail instead of a black screen during audio-only playback - PiP button hidden for audio-only streams
This commit is contained in:
@@ -458,6 +458,8 @@ struct MiniPlayerView: View {
|
||||
pipButton(config: config)
|
||||
case .playbackSpeed:
|
||||
playbackSpeedButton(config: config)
|
||||
case .audioMode:
|
||||
audioModeButton(config: config)
|
||||
default:
|
||||
EmptyView()
|
||||
}
|
||||
@@ -654,6 +656,21 @@ struct MiniPlayerView: View {
|
||||
.tint(.primary)
|
||||
}
|
||||
|
||||
private func audioModeButton(config: ControlButtonConfiguration) -> some View {
|
||||
let isAudioMode = appEnvironment?.settingsManager.audioOnlyModeEnabled ?? false
|
||||
return Button {
|
||||
incrementTapCount(for: config)
|
||||
Task { await playerService?.setAudioMode(!isAudioMode) }
|
||||
} label: {
|
||||
Image(systemName: "music.note")
|
||||
.font(isTabAccessory ? .title3 : .title2)
|
||||
.frame(width: 32, height: 32)
|
||||
.contentShape(Rectangle())
|
||||
.foregroundStyle(isAudioMode ? AnyShapeStyle(Color.red) : AnyShapeStyle(.primary))
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
|
||||
/// Whether transport controls should be disabled (during loading/buffering or buffer not ready)
|
||||
|
||||
Reference in New Issue
Block a user