generation-aware playlist readiness
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user