48 lines
2 KiB
Swift
48 lines
2 KiB
Swift
// User-editable connection + playback settings, persisted to UserDefaults.
|
|
// `networkCachingMs` is the VLCKit input buffer ("Settings including buffer" in
|
|
// the product ask) — higher absorbs more network jitter at the cost of seek
|
|
// latency; it's passed to VLCMedia as --network-caching.
|
|
|
|
import Foundation
|
|
|
|
@MainActor
|
|
final class BridgeSettings: ObservableObject {
|
|
private let store = UserDefaults.standard
|
|
|
|
@Published var host: String { didSet { store.set(host, forKey: Keys.host) } }
|
|
@Published var port: Int { didSet { store.set(port, forKey: Keys.port) } }
|
|
@Published var token: String { didSet { store.set(token, forKey: Keys.token) } }
|
|
@Published var networkCachingMs: Int { didSet { store.set(networkCachingMs, forKey: Keys.buffer) } }
|
|
@Published var prefetchEnabled: Bool { didSet { store.set(prefetchEnabled, forKey: Keys.prefetchOn) } }
|
|
@Published var prefetchCount: Int { didSet { store.set(prefetchCount, forKey: Keys.prefetchN) } }
|
|
|
|
init() {
|
|
host = store.string(forKey: Keys.host) ?? "127.0.0.1"
|
|
let p = store.integer(forKey: Keys.port)
|
|
port = p == 0 ? 8787 : p
|
|
token = store.string(forKey: Keys.token) ?? ""
|
|
let buf = store.integer(forKey: Keys.buffer)
|
|
networkCachingMs = buf == 0 ? 1500 : buf
|
|
prefetchEnabled = store.object(forKey: Keys.prefetchOn) as? Bool ?? true
|
|
let n = store.integer(forKey: Keys.prefetchN)
|
|
prefetchCount = n == 0 ? 3 : n
|
|
}
|
|
|
|
var baseURL: URL? {
|
|
URL(string: "http://\(host):\(port)")
|
|
}
|
|
|
|
var client: BridgeClient? {
|
|
guard let baseURL else { return nil }
|
|
return BridgeClient(baseURL: baseURL, token: token.isEmpty ? nil : token)
|
|
}
|
|
|
|
private enum Keys {
|
|
static let host = "bridge.host"
|
|
static let port = "bridge.port"
|
|
static let token = "bridge.token"
|
|
static let buffer = "bridge.networkCachingMs"
|
|
static let prefetchOn = "bridge.prefetchEnabled"
|
|
static let prefetchN = "bridge.prefetchCount"
|
|
}
|
|
}
|