feat: offer timed opening and ending skips

This commit is contained in:
2026-10-22 13:24:37 +02:00
parent 7b53b00b15
commit 3d949154a2
8 changed files with 165 additions and 10 deletions
+12 -1
View File
@@ -211,7 +211,7 @@ struct CastPlaybackCheck {
let suite = "terebi.cast-playback-check." + UUID().uuidString
let defaults = UserDefaults(suiteName: suite)!
defer { defaults.removePersistentDomain(forName: suite) }
let model = PlayerModel(defaults: defaults)
let model = PlayerModel(defaults: defaults, skipClock: { 100 })
defer { model.shutdown() }
if CommandLine.arguments.count == 5 {
if CommandLine.arguments[3] == "queue" {
@@ -249,6 +249,17 @@ struct CastPlaybackCheck {
require(model.setPlayback(playing: false), "remote pause accepted")
try await until(model, "receiver pause acknowledged") { model.state.status == PLAYER_PAUSED && model.playbackIntent == nil }
requirePlaybackPower(system: false, display: false, "receiver pause permits sleep")
let opening = MiruroInterval(kind: .intro, start: 23, end: 24.25, episode: 1)
model.supplyMetadataForCheck(MiruroMetadata(title: nil, intervals: [opening]), episode: 1)
require(model.seekRelative(24 - model.state.position), "enter opening on receiver")
try await until(model, "receiver offers opening only after acknowledging seek") {
!model.state.seek_pending && model.segmentToSkip == opening
}
require(model.skipSegment(), "segment skip queues receiver seek")
try await until(model, "receiver acknowledges segment end without starting playback") {
!model.state.seek_pending && abs(model.state.position - 24.25) < 0.15 &&
model.state.status == PLAYER_PAUSED && model.segmentToSkip == nil
}
model.stopCasting()
try await until(model, "local decoder restores receiver position paused") {
model.castDevice == nil && model.state.status == PLAYER_PAUSED && !model.state.seek_pending &&