diff --git a/Shared/Home/HomeView.swift b/Shared/Home/HomeView.swift index 3f6781f0..62bc5c15 100644 --- a/Shared/Home/HomeView.swift +++ b/Shared/Home/HomeView.swift @@ -26,14 +26,21 @@ struct HomeView: View { var body: some View { BrowserPlayerControls { ScrollView(.vertical, showsIndicators: false) { - if showOpenActionsInHome { - HStack { - #if os(tvOS) - OpenVideosButton(text: "Open Video", imageSystemName: "globe") { - NavigationModel.shared.presentingOpenVideos = true + HStack { + #if os(tvOS) + Group { + if showOpenActionsInHome { + OpenVideosButton(text: "Open Video", imageSystemName: "globe") { + NavigationModel.shared.presentingOpenVideos = true + } } - .frame(maxWidth: 600) - #else + OpenVideosButton(text: "Settings", imageSystemName: "gear") { + NavigationModel.shared.presentingSettings = true + } + } + + #else + if showOpenActionsInHome { OpenVideosButton(text: "Files", imageSystemName: "folder") { NavigationModel.shared.presentingFileImporter = true } @@ -44,19 +51,19 @@ struct HomeView: View { NavigationModel.shared.presentingOpenVideos = true } .frame(maxWidth: 40) - #endif - } - #if os(iOS) - .padding(.top, RefreshControl.navigationBarTitleDisplayMode == .inline ? 15 : 0) - #else - .padding(.top, 15) - #endif - #if os(tvOS) - .padding(.horizontal, 40) - #else - .padding(.horizontal, 15) + } #endif } + #if os(iOS) + .padding(.top, RefreshControl.navigationBarTitleDisplayMode == .inline ? 15 : 0) + #else + .padding(.top, 15) + #endif + #if os(tvOS) + .padding(.horizontal, 40) + #else + .padding(.horizontal, 15) + #endif if !accounts.current.isNil, showFavoritesInHome { #if os(tvOS) @@ -112,7 +119,6 @@ struct HomeView: View { #if os(tvOS) .edgesIgnoringSafeArea(.horizontal) #else - .onDrop(of: [UTType.text], delegate: DropFavoriteOutside(current: $dragging)) .navigationTitle("Home") #endif #if os(macOS) diff --git a/Shared/Navigation/ContentView.swift b/Shared/Navigation/ContentView.swift index b548a288..feaeee57 100644 --- a/Shared/Navigation/ContentView.swift +++ b/Shared/Navigation/ContentView.swift @@ -84,6 +84,16 @@ struct ContentView: View { .environmentObject(navigation) } ) + .background( + EmptyView().sheet(isPresented: $navigation.presentingSettings) { + SettingsView() + .environmentObject(accounts) + .environmentObject(instances) + .environmentObject(settings) + .environmentObject(navigation) + .environmentObject(player) + } + ) #if !os(tvOS) .fileImporter( isPresented: $navigation.presentingFileImporter, @@ -134,16 +144,6 @@ struct ContentView: View { .environmentObject(playlists) } ) - .background( - EmptyView().sheet(isPresented: $navigation.presentingSettings) { - SettingsView() - .environmentObject(accounts) - .environmentObject(instances) - .environmentObject(settings) - .environmentObject(navigation) - .environmentObject(player) - } - ) #endif .background( EmptyView().sheet(isPresented: $navigation.presentingOpenVideos) { diff --git a/Shared/Settings/BrowsingSettings.swift b/Shared/Settings/BrowsingSettings.swift index 98e519df..8aefa618 100644 --- a/Shared/Settings/BrowsingSettings.swift +++ b/Shared/Settings/BrowsingSettings.swift @@ -120,7 +120,9 @@ struct BrowsingSettings: View { private var interfaceSettings: some View { Section(header: SettingsHeader(text: "Interface".localized())) { - Toggle("Show Open Videos toolbar button", isOn: $showOpenActionsToolbarItem) + #if !os(tvOS) + Toggle("Show Open Videos toolbar button", isOn: $showOpenActionsToolbarItem) + #endif #if os(iOS) Toggle("Lock portrait mode", isOn: $lockPortraitWhenBrowsing) .onChange(of: lockPortraitWhenBrowsing) { lock in diff --git a/Shared/Settings/EditFavorites.swift b/Shared/Settings/EditFavorites.swift index de709b77..fdce3a4d 100644 --- a/Shared/Settings/EditFavorites.swift +++ b/Shared/Settings/EditFavorites.swift @@ -10,51 +10,69 @@ struct EditFavorites: View { var body: some View { Group { - List { - Section(header: Text("Favorites")) { - if favorites.isEmpty { - Text("Favorites is empty") - .foregroundColor(.secondary) - } - ForEach(favorites) { item in - HStack { - Text(label(item)) - - Spacer() - HStack(spacing: 30) { - Button { - model.moveUp(item) - } label: { - Label("Move Up", systemImage: "arrow.up") - } - - Button { - model.moveDown(item) - } label: { - Label("Move Down", systemImage: "arrow.down") - } - - Button { - model.remove(item) - } label: { - Label("Remove", systemImage: "trash") - } - } - #if !os(tvOS) - .buttonStyle(.borderless) - #endif - } + #if os(tvOS) + ScrollView { + VStack { + editor } } - #if os(tvOS) - .padding(.trailing, 40) - #endif + .frame(width: 1000) + #else + List { + editor + } + #endif + } + .navigationTitle("Favorites") + } - #if os(tvOS) - Divider() - .padding(20) - #endif + var editor: some View { + Group { + Section(header: Text("Favorites")) { + if favorites.isEmpty { + Text("Favorites is empty") + .foregroundColor(.secondary) + } + ForEach(favorites) { item in + HStack { + Text(label(item)) + Spacer() + HStack(spacing: 30) { + Button { + model.moveUp(item) + } label: { + Label("Move Up", systemImage: "arrow.up") + } + + Button { + model.moveDown(item) + } label: { + Label("Move Down", systemImage: "arrow.down") + } + + Button { + model.remove(item) + } label: { + Label("Remove", systemImage: "trash") + } + } + #if !os(tvOS) + .buttonStyle(.borderless) + #endif + } + } + } + #if os(tvOS) + .padding(.trailing, 40) + #endif + + #if os(tvOS) + Divider() + .padding(20) + #endif + + if !model.addableItems().isEmpty { Section(header: Text("Available")) { ForEach(model.addableItems()) { item in HStack { @@ -70,6 +88,9 @@ struct EditFavorites: View { .font(.system(size: 30)) #endif } + #if !os(tvOS) + .buttonStyle(.borderless) + #endif } } } @@ -77,13 +98,8 @@ struct EditFavorites: View { .padding(.trailing, 40) #endif } - .labelStyle(.iconOnly) - .frame(alignment: .leading) - #if os(tvOS) - .frame(width: 1000) - #endif } - .navigationTitle("Favorites") + .labelStyle(.iconOnly) } func label(_ item: FavoriteItem) -> String { @@ -97,9 +113,9 @@ struct EditFavorites: View { struct EditFavorites_Previews: PreviewProvider { static var previews: some View { - NavigationView { - EditFavorites() - } - .injectFixtureEnvironmentObjects() +// NavigationView { + EditFavorites() +// } + .injectFixtureEnvironmentObjects() } } diff --git a/Shared/Settings/SettingsView.swift b/Shared/Settings/SettingsView.swift index f744c255..c8c6ebb0 100644 --- a/Shared/Settings/SettingsView.swift +++ b/Shared/Settings/SettingsView.swift @@ -97,9 +97,7 @@ struct SettingsView: View { #else NavigationView { settingsList - #if os(tvOS) - .navigationBarHidden(true) - #endif + .navigationTitle("Settings") } #endif } @@ -115,14 +113,6 @@ struct SettingsView: View { #endif Section { - #if os(tvOS) - NavigationLink { - EditFavorites() - } label: { - Label("Favorites", systemImage: "heart.fill") - } - #endif - NavigationLink { BrowsingSettings() } label: { @@ -195,7 +185,6 @@ struct SettingsView: View { } #endif } - .navigationTitle("Settings") .toolbar { ToolbarItem(placement: .navigationBarLeading) { #if !os(tvOS) @@ -217,9 +206,9 @@ struct SettingsView: View { private var windowHeight: Double { switch selection { case nil: - return accounts.isEmpty ? 680 : 520 + return accounts.isEmpty ? 680 : 580 case .browsing: - return 520 + return 580 case .player: return 680 case .quality: diff --git a/Shared/Videos/VideoBanner.swift b/Shared/Videos/VideoBanner.swift index 94e46907..4d135af0 100644 --- a/Shared/Videos/VideoBanner.swift +++ b/Shared/Videos/VideoBanner.swift @@ -4,6 +4,12 @@ import SDWebImageSwiftUI import SwiftUI struct VideoBanner: View { + #if os(tvOS) + static let titleAppend = "" + #else + static let titleAppend = "\n" + #endif + let video: Video? var playbackTime: CMTime? var videoDuration: TimeInterval? @@ -27,7 +33,7 @@ struct VideoBanner: View { Group { if let video { HStack(alignment: .top) { - Text(video.displayTitle + "\n") + Text(video.displayTitle + Self.titleAppend) if video.isLocal, let fileExtension = video.localStreamFileExtension { Spacer() Text(fileExtension) diff --git a/Shared/Views/OpenVideosButton.swift b/Shared/Views/OpenVideosButton.swift index 7728401c..88590146 100644 --- a/Shared/Views/OpenVideosButton.swift +++ b/Shared/Views/OpenVideosButton.swift @@ -7,12 +7,12 @@ struct OpenVideosButton: View { var body: some View { Button(action: action) { - HStack { + HStack(spacing: 8) { if let imageSystemName { Image(systemName: imageSystemName) } if let text { - Text(text ?? "") + Text(text) .fontWeight(.bold) } } diff --git a/tvOS/TVNavigationView.swift b/tvOS/TVNavigationView.swift index f24fc2b5..ce663447 100644 --- a/tvOS/TVNavigationView.swift +++ b/tvOS/TVNavigationView.swift @@ -50,10 +50,6 @@ struct TVNavigationView: View { .tabItem { Image(systemName: "magnifyingglass") } .tag(TabSelection.search) } - - LazyView(SettingsView()) - .tabItem { Image(systemName: "gear") } - .tag(TabSelection.settings) } } .fullScreenCover(isPresented: $navigation.presentingAddToPlaylist) {