Renames Sources/PlumTV→TVAnarchy and PlumTVCore→TVAnarchyCore (the rename the auto-commit service couldn't stage — it git-add'd the old, now-gone paths and aborted every cycle), and commits the accumulated work: - Library: black-built index fast path (LibraryIndex + scanFromIndex) with NFS-walk fallback; incremental --add on download-complete; mtime staleness gate; loose-file series-collapse fix; determinate scan/index progress. - Cover art: keyless TVmaze cartoon-vs-live-action disambiguation (type/year). - Player: sleep timer (timed + end-of-episode); visibility-gated polling. - Home: Continue Watching cover art + live refresh; Recently Added; adult gate. - Logs: multi-line selection + copy; truncated giant tx-list errors. - Hover previews (opt-in) via black ffmpeg + scp. Also gitignores foreign project trees (governor/mcp/fleet/recommender) that sit in this directory but belong to their own repos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
17 lines
663 B
Swift
17 lines
663 B
Swift
import Foundation
|
|
|
|
/// Host load for a target — load averages plus mpv's instantaneous decode %CPU
|
|
/// (100 = one core), the figure that actually moves when you change quality.
|
|
public struct HostStats: Decodable, Sendable, Equatable {
|
|
public let load1: Double
|
|
public let load5: Double
|
|
public let load15: Double
|
|
public let cores: Int
|
|
public let mpv_cpu: Double? // null when nothing is playing
|
|
}
|
|
|
|
/// A target that can report its host's load (only black — it's a real machine
|
|
/// we have a shell on; VLC-on-plum is local and not interesting to chart).
|
|
public protocol HostStatsProvider: AnyObject {
|
|
func stats() async -> HostStats?
|
|
}
|