protected void SetCurrentPlayerContext(Func <PlayerContext, int, bool> selector) { bool changed = false; IPlayerContext newCurrentPlayerContext = null; ForEach((pc, slotIndex) => { bool newVal = selector(pc, slotIndex); if (pc.IsCurrentPlayerContext != newVal) { changed = true; pc.IsCurrentPlayerContext = newVal; } }); if (!changed) { return; } CleanupPlayerContexts(); CheckMediaWorkflowStates_Async(); PlayerContextManagerMessaging.SendPlayerContextManagerMessage(PlayerContextManagerMessaging.MessageType.CurrentPlayerChanged, newCurrentPlayerContext); }
public IPlayerContext OpenAudioPlayerContext(Guid mediaModuleId, string name, bool concurrentVideo, Guid currentlyPlayingWorkflowStateId, Guid fullscreenContentWorkflowStateId) { IOpenPlayerStrategy strategy = GetOpenPlayerStrategy(); IPlayerManager playerManager = ServiceRegistration.Get <IPlayerManager>(); lock (playerManager.SyncObj) { int currentPlayerSlotIndex; IPlayerSlotController slotController = strategy.PrepareAudioPlayerSlotController(playerManager, this, concurrentVideo, out currentPlayerSlotIndex); slotController.Closed += OnPlayerSlotControllerClosed; IPlayerContext result = new PlayerContext(slotController, mediaModuleId, name, AVType.Audio, currentlyPlayingWorkflowStateId, fullscreenContentWorkflowStateId); CleanupPlayerContexts(); IList <IPlayerContext> playerContexts = PlayerContexts; int lastPlayerContextIndex = playerContexts.Count - 1; if (currentPlayerSlotIndex > lastPlayerContextIndex) { currentPlayerSlotIndex = lastPlayerContextIndex; } PlayerContextManagerMessaging.SendUpdatePlayerRolesMessage(playerContexts[currentPlayerSlotIndex], playerContexts[lastPlayerContextIndex]); return(result); } }