tv-anarchy/Sources/TVAnarchyiOS/BridgeSettings.swift
Natalie 17cf518418 feat(ios): downloads (DownloadManager/DownloadsView), remote control view + bridge/player refinements
(cherry picked from commit a1f7e44e17bb41f48976b69f4dbe5278cbad06b2)
2026-06-09 06:38:45 -07:00

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"
}
}