feat: configure duration-aware progress in compact titles

This commit is contained in:
2026-10-12 15:45:22 +02:00
parent 1f5e9541e7
commit 35fa89e492
5 changed files with 96 additions and 8 deletions
@@ -1,17 +1,23 @@
import Foundation
import TOMLDecoder
public enum CompactTitleProgress: String, Decodable, Sendable {
case time, percentage, none
}
public struct PlayerConfiguration: Equatable, Sendable {
public var showBufferInfo: Bool
public var automaticQuality: Bool
public var snapToEdges: Bool
public var compactTitleProgress: CompactTitleProgress
public var keys: KeyBindings
public init(showBufferInfo: Bool = false, automaticQuality: Bool = false, snapToEdges: Bool = true,
keys: KeyBindings = KeyBindings()) {
compactTitleProgress: CompactTitleProgress = .time, keys: KeyBindings = KeyBindings()) {
self.showBufferInfo = showBufferInfo
self.automaticQuality = automaticQuality
self.snapToEdges = snapToEdges
self.compactTitleProgress = compactTitleProgress
self.keys = keys
}
@@ -25,6 +31,7 @@ public struct PlayerConfiguration: Equatable, Sendable {
"", "[ui]",
"buffer_info = \(defaults.showBufferInfo)",
"compact_snap_to_edges = \(defaults.snapToEdges)",
"compact_title_progress = \"\(defaults.compactTitleProgress.rawValue)\"",
"", "[keys]"
]
for (name, action) in PlayerAction.namedActions {
@@ -77,6 +84,7 @@ public struct PlayerConfiguration: Equatable, Sendable {
return Self(showBufferInfo: values.ui?.bufferInfo ?? false,
automaticQuality: values.playback?.automaticQuality ?? false,
snapToEdges: values.ui?.compactSnapToEdges ?? true,
compactTitleProgress: values.ui?.compactTitleProgress ?? .time,
keys: try KeyBindings(overrides: values.keys?.overrides ?? [:]))
} catch {
throw ConfigurationError(message: "\(url.path): \(diagnostic(for: error, data: data))")
@@ -163,11 +171,14 @@ public struct PlayerConfiguration: Equatable, Sendable {
private struct UIConfiguration {
let bufferInfo: Bool?
let compactSnapToEdges: Bool?
let compactTitleProgress: CompactTitleProgress?
init(container: KeyedDecodingContainer<SettingKey>) throws {
try validate(container, allowed: ["buffer_info", "compact_snap_to_edges"])
try validate(container, allowed: ["buffer_info", "compact_snap_to_edges", "compact_title_progress"])
bufferInfo = try container.decodeIfPresent(Bool.self, forKey: SettingKey("buffer_info"))
compactSnapToEdges = try container.decodeIfPresent(Bool.self, forKey: SettingKey("compact_snap_to_edges"))
compactTitleProgress = try container.decodeIfPresent(CompactTitleProgress.self,
forKey: SettingKey("compact_title_progress"))
}
}