feat: offer timed opening and ending skips
This commit is contained in:
@@ -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 &&
|
||||
|
||||
Reference in New Issue
Block a user