import Foundation import Observation import FlixyPlayback /// Wie Untertitel aussehen sollen — gemerkt über Neustarts hinweg. /// /// Eigener Typ statt zweier Felder an `PlaybackSettings`, aus demselben Grund /// wie bei `LanguagePreferences`: dort geht es um Qualität und Leitung, hier /// um Darstellung. Zwei Fragen, zwei Orte. /// /// **Die Werte selbst liegen in `SubtitleStyle`**, also im prüfbaren Teil. /// Hier steht nur, wie sie einen Neustart überleben. @MainActor @Observable final class SubtitleAppearance { private enum Key { static let size = "flixy.subtitles.size" static let palette = "flixy.subtitles.palette" } private let defaults: UserDefaults var size: SubtitleStyle.Size { didSet { defaults.set(size.rawValue, forKey: Key.size) } } var palette: SubtitleStyle.Palette { didSet { defaults.set(palette.rawValue, forKey: Key.palette) } } init(defaults: UserDefaults = .standard) { self.defaults = defaults // Über `object(forKey:)`, nicht über `integer(forKey:)`: das gäbe für // „nie gesetzt" eine Null zurück, und die ist keine gültige Stufe. self.size = (defaults.object(forKey: Key.size) as? Int) .flatMap(SubtitleStyle.Size.init(rawValue:)) ?? .normal self.palette = defaults.string(forKey: Key.palette) .flatMap(SubtitleStyle.Palette.init(rawValue:)) ?? .whiteOnClear } var style: SubtitleStyle { SubtitleStyle(size: size, palette: palette) } }