yattee/Shared/MenuCommands.swift

89 lines
2.3 KiB
Swift
Raw Normal View History

2021-11-08 23:14:28 +00:00
import Foundation
import SwiftUI
struct MenuCommands: Commands {
@Binding var model: MenuModel
var body: some Commands {
navigationMenu
playbackMenu
}
private var navigationMenu: some Commands {
2021-11-28 14:37:55 +00:00
CommandGroup(before: .windowSize) {
2021-11-08 23:14:28 +00:00
Button("Favorites") {
2022-03-27 18:38:59 +00:00
setTabSelection(.favorites)
2021-11-08 23:14:28 +00:00
}
.keyboardShortcut("1")
Button("Subscriptions") {
2022-03-27 18:38:59 +00:00
setTabSelection(.subscriptions)
2021-11-08 23:14:28 +00:00
}
2021-11-28 14:37:55 +00:00
.disabled(subscriptionsDisabled)
2021-11-08 23:14:28 +00:00
.keyboardShortcut("2")
Button("Popular") {
2022-03-27 18:38:59 +00:00
setTabSelection(.popular)
2021-11-08 23:14:28 +00:00
}
2022-01-09 14:47:24 +00:00
.disabled(!(model.accounts?.app.supportsPopular ?? false))
2021-11-08 23:14:28 +00:00
.keyboardShortcut("3")
Button("Trending") {
2022-03-27 18:38:59 +00:00
setTabSelection(.trending)
2021-11-08 23:14:28 +00:00
}
.keyboardShortcut("4")
Button("Search") {
2022-03-27 18:38:59 +00:00
setTabSelection(.search)
2021-11-08 23:14:28 +00:00
}
.keyboardShortcut("f")
2021-11-28 14:37:55 +00:00
Divider()
2021-11-08 23:14:28 +00:00
}
}
2022-03-27 18:38:59 +00:00
private func setTabSelection(_ tabSelection: NavigationModel.TabSelection) {
guard let navigation = model.navigation else {
return
}
navigation.sidebarSectionChanged.toggle()
navigation.tabSelection = tabSelection
}
2021-11-28 14:37:55 +00:00
private var subscriptionsDisabled: Bool {
!(
(model.accounts?.app.supportsSubscriptions ?? false) && model.accounts?.signedIn ?? false
)
}
2021-11-08 23:14:28 +00:00
private var playbackMenu: some Commands {
CommandMenu("Playback") {
Button((model.player?.isPlaying ?? true) ? "Pause" : "Play") {
model.player?.togglePlay()
}
.disabled(model.player?.currentItem.isNil ?? true)
.keyboardShortcut("p")
Button("Play Next") {
model.player?.advanceToNextItem()
}
.disabled(model.player?.queue.isEmpty ?? true)
.keyboardShortcut("s")
Button(togglePlayerLabel) {
2021-11-08 23:14:28 +00:00
model.player?.togglePlayer()
}
.keyboardShortcut("o")
}
}
private var togglePlayerLabel: String {
#if os(macOS)
"Show Player"
#else
(model.player?.presentingPlayer ?? true) ? "Hide Player" : "Show Player"
#endif
}
2021-11-08 23:14:28 +00:00
}