Improve settings

This commit is contained in:
Arkadiusz Fal
2021-11-04 23:01:27 +01:00
parent d50b136b38
commit dc9cbd34d0
9 changed files with 120 additions and 81 deletions

View File

@@ -25,13 +25,13 @@ struct VideoPlayerView: View {
@EnvironmentObject<PlayerModel> private var player
var body: some View {
GeometryReader { geometry in
#if os(macOS)
HSplitView {
content
}
.frame(idealWidth: 1000, maxWidth: 1100, minHeight: 700)
#else
#if os(macOS)
HSplitView {
content
}
.frame(idealWidth: 1000, maxWidth: 1100, minHeight: 700)
#else
GeometryReader { geometry in
HStack(spacing: 0) {
content
}
@@ -42,8 +42,8 @@ struct VideoPlayerView: View {
self.playerSize = size
}
.navigationBarHidden(true)
#endif
}
}
#endif
}
var content: some View {
@@ -168,9 +168,5 @@ struct VideoPlayerView_Previews: PreviewProvider {
static var previews: some View {
VideoPlayerView()
.injectFixtureEnvironmentObjects()
VideoPlayerView()
.injectFixtureEnvironmentObjects()
.previewInterfaceOrientation(.landscapeRight)
}
}

View File

@@ -14,7 +14,7 @@ struct InstancesSettings: View {
var body: some View {
Group {
Section(header: Text("Instances")) {
Section(header: SettingsHeader(text: "Instances")) {
ForEach(instances) { instance in
Group {
NavigationLink(instance.longDescription) {

View File

@@ -15,79 +15,61 @@ struct PlaybackSettings: View {
#endif
var body: some View {
playerInstanceSection
Group {
#if os(iOS)
Section(header: SettingsHeader(text: "Player")) {
sourcePicker
qualityPicker
if idiom == .pad {
sidebarPicker
}
keywordsToggle
}
#else
Section(header: SettingsHeader(text: "Source")) {
sourcePicker
}
qualitySection
Section(header: SettingsHeader(text: "Quality")) {
qualityPicker
}
#if !os(tvOS)
playerSection
#endif
#if os(macOS)
Section(header: SettingsHeader(text: "Sidebar")) {
sidebarPicker
}
#endif
keywordsToggle
#endif
}
#if os(macOS)
Spacer()
#endif
}
private var playerInstanceSection: some View {
Section(header: Text("Preferred playback source")) {
Picker("Source", selection: $playerInstanceID) {
Text("Best available stream").tag(String?.none)
private var sourcePicker: some View {
Picker("Source", selection: $playerInstanceID) {
Text("Best available stream").tag(String?.none)
ForEach(instances) { instance in
Text(instance.longDescription).tag(Optional(instance.id))
}
ForEach(instances) { instance in
Text(instance.longDescription).tag(Optional(instance.id))
}
.labelsHidden()
#if os(iOS)
.pickerStyle(.automatic)
#elseif os(tvOS)
.pickerStyle(.inline)
#endif
}
.labelsHidden()
#if os(iOS)
.pickerStyle(.automatic)
#elseif os(tvOS)
.pickerStyle(.inline)
#endif
}
private var qualitySection: some View {
Section(header: Text("Quality")) {
Picker("Quality", selection: $quality) {
ForEach(Stream.ResolutionSetting.allCases, id: \.self) { resolution in
Text(resolution.description).tag(resolution)
}
private var qualityPicker: some View {
Picker("Quality", selection: $quality) {
ForEach(Stream.ResolutionSetting.allCases, id: \.self) { resolution in
Text(resolution.description).tag(resolution)
}
.labelsHidden()
#if os(iOS)
.pickerStyle(.automatic)
#elseif os(tvOS)
.pickerStyle(.inline)
#endif
}
}
private var playerSection: some View {
Section(header: Text("Player")) {
#if os(iOS)
if idiom == .pad {
sidebarPicker
}
#elseif os(macOS)
sidebarPicker
#endif
Toggle("Show video keywords", isOn: $showKeywords)
}
}
private var sidebarPicker: some View {
Picker("Sidebar", selection: $playerSidebar) {
#if os(macOS)
Text("Show sidebar").tag(PlayerSidebarSetting.always)
#endif
#if os(iOS)
Text("Show sidebar when space permits").tag(PlayerSidebarSetting.whenFits)
#endif
Text("Hide sidebar").tag(PlayerSidebarSetting.never)
}
.labelsHidden()
@@ -97,4 +79,36 @@ struct PlaybackSettings: View {
.pickerStyle(.inline)
#endif
}
private var sidebarPicker: some View {
Picker("Sidebar", selection: $playerSidebar) {
#if os(macOS)
Text("Show").tag(PlayerSidebarSetting.always)
#endif
#if os(iOS)
Text("Show sidebar when space permits").tag(PlayerSidebarSetting.whenFits)
#endif
Text("Hide").tag(PlayerSidebarSetting.never)
}
.labelsHidden()
#if os(iOS)
.pickerStyle(.automatic)
#elseif os(tvOS)
.pickerStyle(.inline)
#endif
}
private var keywordsToggle: some View {
Toggle("Show video keywords", isOn: $showKeywords)
}
}
struct PlaybackSettings_Previews: PreviewProvider {
static var previews: some View {
PlaybackSettings()
.injectFixtureEnvironmentObjects()
}
}

View File

@@ -6,7 +6,7 @@ struct ServicesSettings: View {
@Default(.sponsorBlockCategories) private var sponsorBlockCategories
var body: some View {
Section(header: Text("SponsorBlock API")) {
Section(header: SettingsHeader(text: "SponsorBlock API")) {
TextField(
"SponsorBlock API Instance",
text: $sponsorBlockInstance,
@@ -19,7 +19,7 @@ struct ServicesSettings: View {
#endif
}
Section(header: Text("Categories to Skip")) {
Section(header: SettingsHeader(text: "Categories to Skip")) {
#if os(macOS)
List(SponsorBlockAPI.categories, id: \.self) { category in
SponsorBlockCategorySelectionRow(

View File

@@ -0,0 +1,20 @@
import SwiftUI
struct SettingsHeader: View {
var text: String
var body: some View {
Text(text)
#if os(macOS) || os(tvOS)
.font(.title3)
.foregroundColor(.secondary)
.focusable(false)
#endif
}
}
struct SettingsHeader_Previews: PreviewProvider {
static var previews: some View {
SettingsHeader(text: "Header")
}
}