feat: add independent CLI launches and preserve shared video bookmarks

This commit is contained in:
2026-10-11 12:47:08 +02:00
parent 537e8e2624
commit 0dce073287
10 changed files with 254 additions and 40 deletions
+20 -1
View File
@@ -20,7 +20,9 @@ struct PlaybackProgressChecks {
try FileManager.default.createSymbolicLink(at: alias, withDestinationURL: file)
let youtube = URL(string: "https://www.youtube.com/watch?v=jNQXAC9IVRw")!
var progress = PlaybackProgress(defaults: defaults)
let progress = PlaybackProgress(defaults: defaults)
let independent = PlaybackProgress(defaults: UserDefaults(suiteName: suite)!)
let independentFile = directory.appendingPathComponent("independent.mp4")
progress.save(123.25, for: file)
progress.save(18, for: otherFile)
progress.save(9.5, for: youtube)
@@ -29,12 +31,20 @@ struct PlaybackProgressChecks {
require(reopened.position(for: alias) == 123.25, "symlink and original file share progress")
require(reopened.position(for: otherFile) == 18, "local files keep separate positions")
require(reopened.position(for: youtube) == 9.5, "canonical YouTube URL persists independently of local files")
independent.save(27, for: independentFile)
let shared = PlaybackProgress(defaults: defaults)
require(shared.position(for: file) == 123.25 && shared.position(for: youtube) == 9.5,
"an independently initialized player cannot overwrite another video's bookmarks")
require(shared.position(for: independentFile) == 27,
"independent player progress is also retained")
progress.save(nil, for: alias)
let completed = PlaybackProgress(defaults: defaults)
require(completed.position(for: file) == nil, "completion clears progress through either file identity")
require(completed.position(for: otherFile) == 18 && completed.position(for: youtube) == 9.5,
"clearing one video preserves other videos")
require(completed.position(for: independentFile) == 27,
"clearing progress in one player preserves a different player's bookmark")
for position in [Double.nan, Double.infinity, -Double.infinity, -1, 0] {
progress.save(position, for: file)
require(PlaybackProgress(defaults: defaults).position(for: file) == nil,
@@ -44,6 +54,15 @@ struct PlaybackProgressChecks {
defer { isolated.removePersistentDomain(forName: suite + ".isolated") }
require(PlaybackProgress(defaults: isolated).position(for: youtube) == nil,
"injected preference domains remain isolated")
isolated.set([file.standardizedFileURL.absoluteString: 42.5, youtube.absoluteString: 15],
forKey: "playbackPositions")
let migrated = PlaybackProgress(defaults: isolated)
require(migrated.position(for: alias) == 42.5 && migrated.position(for: youtube) == 15,
"existing local and YouTube bookmarks survive the shared-history migration")
migrated.save(43, for: file)
let migratedAgain = PlaybackProgress(defaults: isolated)
require(migratedAgain.position(for: file) == 43 && migratedAgain.position(for: youtube) == 15,
"opening another player preserves both migrated bookmarks and newer progress")
print("Playback progress checks passed")
}
}