Add new menus

This commit is contained in:
Arkadiusz Fal
2021-11-09 00:14:28 +01:00
parent 3b7d54aab2
commit e7e6bd109c
10 changed files with 116 additions and 17 deletions

63
Shared/MenuCommands.swift Normal file
View File

@@ -0,0 +1,63 @@
import Foundation
import SwiftUI
struct MenuCommands: Commands {
@Binding var model: MenuModel
var body: some Commands {
navigationMenu
playbackMenu
}
private var navigationMenu: some Commands {
CommandMenu("Navigation") {
Button("Favorites") {
model.navigation?.tabSelection = .favorites
}
.keyboardShortcut("1")
Button("Subscriptions") {
model.navigation?.tabSelection = .subscriptions
}
.disabled(!(model.accounts?.app.supportsSubscriptions ?? true))
.keyboardShortcut("2")
Button("Popular") {
model.navigation?.tabSelection = .popular
}
.disabled(!(model.accounts?.app.supportsPopular ?? true))
.keyboardShortcut("3")
Button("Trending") {
model.navigation?.tabSelection = .trending
}
.keyboardShortcut("4")
Button("Search") {
model.navigation?.tabSelection = .search
}
.keyboardShortcut("f")
}
}
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((model.player?.presentingPlayer ?? true) ? "Hide Player" : "Show Player") {
model.player?.togglePlayer()
}
.keyboardShortcut("o")
}
}
}

View File

@@ -17,6 +17,8 @@ struct ContentView: View {
@StateObject private var subscriptions = SubscriptionsModel()
@StateObject private var thumbnailsModel = ThumbnailsModel()
@EnvironmentObject<MenuModel> private var menu
#if os(iOS)
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
#endif
@@ -106,7 +108,7 @@ struct ContentView: View {
if let account = accounts.lastUsed ??
instances.lastUsed?.anonymousAccount ??
instances.all.first?.anonymousAccount
InstancesModel.all.first?.anonymousAccount
{
accounts.setCurrent(account)
}
@@ -120,6 +122,10 @@ struct ContentView: View {
search.accounts = accounts
subscriptions.accounts = accounts
menu.accounts = accounts
menu.navigation = navigation
menu.player = player
if !accounts.current.isNil {
player.loadHistoryDetails()
}

View File

@@ -6,7 +6,6 @@ struct PlaybackBar: View {
@Environment(\.dismiss) private var dismiss
@Environment(\.inNavigationView) private var inNavigationView
@EnvironmentObject<InstancesModel> private var instances
@EnvironmentObject<PlayerModel> private var player
var body: some View {
@@ -154,7 +153,7 @@ struct PlaybackBar: View {
private var streamControl: some View {
#if os(macOS)
Picker("", selection: $player.streamSelection) {
ForEach(instances.all) { instance in
ForEach(InstancesModel.all) { instance in
let instanceStreams = availableStreamsForInstance(instance)
if !instanceStreams.values.isEmpty {
let kinds = Array(instanceStreams.keys).sorted { $0 < $1 }
@@ -175,7 +174,7 @@ struct PlaybackBar: View {
}
#else
Menu {
ForEach(instances.all) { instance in
ForEach(InstancesModel.all) { instance in
let instanceStreams = availableStreamsForInstance(instance)
if !instanceStreams.values.isEmpty {
let kinds = Array(instanceStreams.keys).sorted { $0 < $1 }

View File

@@ -48,9 +48,6 @@ struct PlayerControlsView<Content: View>: View {
.contentShape(Rectangle())
}
.padding(.vertical, 20)
#if !os(tvOS)
.keyboardShortcut("o")
#endif
ZStack(alignment: .bottom) {
HStack {
@@ -73,10 +70,6 @@ struct PlayerControlsView<Content: View>: View {
.font(.system(size: 30))
.frame(minWidth: 30)
#if !os(tvOS)
.keyboardShortcut("p")
#endif
Button(action: { model.advanceToNextItem() }) {
Label("Next", systemImage: "forward.fill")
}

View File

@@ -7,15 +7,19 @@ struct YatteeApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
#endif
@StateObject private var menu = MenuModel()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(menu)
}
#if !os(tvOS)
.handlesExternalEvents(matching: Set(["*"]))
.commands {
SidebarCommands()
CommandGroup(replacing: .newItem, addition: {})
MenuCommands(model: Binding<MenuModel>(get: { menu }, set: { _ in }))
}
#endif