53 lines
1004 B
Go
53 lines
1004 B
Go
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
|
|
}
|