Add advanced setting "Show video context menu options to force selected backend"

This commit is contained in:
Arkadiusz Fal
2023-05-26 22:49:38 +02:00
parent e5f137a2d2
commit 562df2d9ba
4 changed files with 40 additions and 1 deletions

View File

@@ -198,6 +198,7 @@ extension Defaults.Keys {
#endif
static let showMPVPlaybackStats = Key<Bool>("showMPVPlaybackStats", default: false)
static let showPlayNowInBackendContextMenu = Key<Bool>("showPlayNowInBackendContextMenu", default: false)
#if os(macOS)
static let playerDetailsPageButtonLabelStyleDefault = ButtonLabelStyle.iconAndText

View File

@@ -8,6 +8,7 @@ struct AdvancedSettings: View {
@Default(.mpvEnableLogging) private var mpvEnableLogging
@Default(.showCacheStatus) private var showCacheStatus
@Default(.feedCacheSize) private var feedCacheSize
@Default(.showPlayNowInBackendContextMenu) private var showPlayNowInBackendContextMenu
@State private var filesToShare = [MPVClient.logFile]
@State private var presentingShareSheet = false
@@ -56,6 +57,10 @@ struct AdvancedSettings: View {
}
@ViewBuilder var advancedSettings: some View {
Section(header: SettingsHeader(text: "Advanced")) {
showPlayNowInBackendButtonsToggle
}
Section(header: SettingsHeader(text: "MPV"), footer: mpvFooter) {
showMPVPlaybackStatsToggle
#if !os(tvOS)
@@ -115,6 +120,10 @@ struct AdvancedSettings: View {
.foregroundColor(.secondary)
}
var showPlayNowInBackendButtonsToggle: some View {
Toggle("Show video context menu options to force selected backend", isOn: $showPlayNowInBackendContextMenu)
}
var showMPVPlaybackStatsToggle: some View {
Toggle("Show playback statistics", isOn: $showMPVPlaybackStats)
}

View File

@@ -21,6 +21,7 @@ struct VideoContextMenuView: View {
@FetchRequest private var watchRequest: FetchedResults<Watch>
@Default(.saveHistory) private var saveHistory
@Default(.showPlayNowInBackendContextMenu) private var showPlayNowInBackendContextMenu
private var backgroundContext = PersistenceController.shared.container.newBackgroundContext()
@@ -71,6 +72,14 @@ struct VideoContextMenuView: View {
#endif
}
if showPlayNowInBackendContextMenu {
Section {
ForEach(PlayerBackendType.allCases, id: \.self) { backend in
playNowInBackendButton(backend)
}
}
}
Section {
playNextButton
addToQueueButton
@@ -187,6 +196,20 @@ struct VideoContextMenuView: View {
}
}
private func playNowInBackendButton(_ backend: PlayerBackendType) -> some View {
Button {
if player.musicMode {
player.toggleMusicMode()
}
player.forceBackendOnPlay = backend
player.play(video)
} label: {
Label("Play Now in \(backend.label)", systemImage: "play")
}
}
private var playNowInPictureInPictureButton: some View {
Button {
player.avPlayerBackend.startPictureInPictureOnPlay = true