generation-aware playlist readiness

This commit is contained in:
Dmitry Sergeev
2026-09-01 20:05:00 +03:00
parent b160e3aba2
commit 532e03ffca
4 changed files with 349 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
package playback
func IsSessionPlaying(
session SessionSnapshot,
statuses PlaybackStatusSnapshot,
) bool {
if statuses.Generation != session.Generation {
return false
}
switch session.Plan.Topology {
case TopologyIndependent:
hasActiveFeed := session.Plan.Video.Active || session.Plan.Audio.Active
if !hasActiveFeed {
return false
}
if session.Plan.Video.Active && !statusIsPlaying(
statuses.Video,
statuses.HasVideo,
session.Generation,
) {
return false
}
if session.Plan.Audio.Active && !statusIsPlaying(
statuses.Audio,
statuses.HasAudio,
session.Generation,
) {
return false
}
return true
case TopologySynchronized:
return statusIsPlaying(
statuses.Sync,
statuses.HasSync,
session.Generation,
)
case TopologyIdle:
return false
default:
return false
}
}
func statusIsPlaying(status Status, present bool, generation uint64) bool {
return present &&
status.Generation == generation &&
status.State == StatePlaying
}