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 }