yattee/Shared/Settings/AdvancedSettings.swift

104 lines
3.0 KiB
Swift
Raw Normal View History

import Defaults
import SwiftUI
struct AdvancedSettings: View {
@Default(.instancesManifest) private var instancesManifest
@Default(.showMPVPlaybackStats) private var showMPVPlaybackStats
2022-07-02 10:49:57 +00:00
@Default(.mpvCacheSecs) private var mpvCacheSecs
@Default(.mpvCachePauseWait) private var mpvCachePauseWait
var body: some View {
VStack(alignment: .leading) {
#if os(macOS)
advancedSettings
Spacer()
#else
List {
advancedSettings
}
#if os(iOS)
.listStyle(.insetGrouped)
#endif
#endif
}
#if os(tvOS)
.frame(maxWidth: 1000)
#endif
.navigationTitle("Advanced")
}
@ViewBuilder var advancedSettings: some View {
2022-07-02 10:49:57 +00:00
Section(header: SettingsHeader(text: "MPV"), footer: mpvFooter) {
showMPVPlaybackStatsToggle
HStack {
Text("cache-secs")
2022-07-03 20:32:26 +00:00
.frame(minWidth: 140, alignment: .leading)
2022-07-02 10:49:57 +00:00
TextField("cache-secs", text: $mpvCacheSecs)
}
2022-07-03 20:32:26 +00:00
.multilineTextAlignment(.trailing)
2022-07-02 10:49:57 +00:00
HStack {
Text("cache-pause-wait")
2022-07-03 20:32:26 +00:00
.frame(minWidth: 140, alignment: .leading)
2022-07-02 10:49:57 +00:00
TextField("cache-pause-wait", text: $mpvCachePauseWait)
}
2022-07-03 20:32:26 +00:00
.multilineTextAlignment(.trailing)
2022-07-02 10:49:57 +00:00
}
Section(header: manifestHeader) {
TextField("URL", text: $instancesManifest)
2022-07-02 10:49:57 +00:00
#if !os(macOS)
.keyboardType(.webSearch)
#endif
.disableAutocorrection(true)
}
.padding(.bottom, 4)
2022-07-02 10:49:57 +00:00
}
2022-07-02 10:49:57 +00:00
@ViewBuilder var mpvFooter: some View {
2022-07-03 20:32:26 +00:00
let url = "https://mpv.io/manual/master"
2022-07-02 10:49:57 +00:00
VStack(alignment: .leading) {
Text("Restart the app to apply the settings above.")
2022-07-03 20:32:26 +00:00
VStack(alignment: .leading, spacing: 2) {
#if os(tvOS)
Text("More info can be found in MPV Documentation:")
Text(url)
#else
Text("More info can be found in:")
Link("MPV Documentation", destination: URL(string: url)!)
#if os(macOS)
.onHover(perform: onHover(_:))
#endif
#endif
2022-07-02 10:49:57 +00:00
}
}
2022-07-02 10:49:57 +00:00
.foregroundColor(.secondary)
}
var manifestHeader: some View {
SettingsHeader(text: "Public Manifest")
}
var showMPVPlaybackStatsToggle: some View {
2022-07-02 10:49:57 +00:00
Toggle("Show playback statistics", isOn: $showMPVPlaybackStats)
}
2022-07-03 20:32:26 +00:00
#if os(macOS)
private func onHover(_ inside: Bool) {
if inside {
NSCursor.pointingHand.push()
} else {
NSCursor.pop()
}
}
#endif
}
struct AdvancedSettings_Previews: PreviewProvider {
static var previews: some View {
AdvancedSettings()
}
}