コード例 #1
0
        private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerStarted:
                case PlayerManagerMessaging.MessageType.PlayerStopped:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                    HandlePlayerChange();
                    break;

                case PlayerManagerMessaging.MessageType.PlaybackStateChanged:
                    HandlePlaybackStateChanged();
                    break;
                }
            }
            else if (message.ChannelName == PlayerContextManagerMessaging.CHANNEL)
            {
                PlayerContextManagerMessaging.MessageType messageType = (PlayerContextManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerContextManagerMessaging.MessageType.PlayerSlotsChanged:
                    HandlePlayerChange();
                    break;
                }
            }
        }
コード例 #2
0
        void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                // React to player changes
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerResumeState:
                    IResumeState        resumeState    = (IResumeState)message.MessageData[PlayerManagerMessaging.KEY_RESUME_STATE];
                    PositionResumeState positionResume = resumeState as PositionResumeState;
                    if (positionResume != null)
                    {
                        TimeSpan resumePosition = positionResume.ResumePosition;
                        _progress = Math.Min((int)(resumePosition.TotalSeconds * 100 / _duration.TotalSeconds), 100);
                    }
                    break;

                case PlayerManagerMessaging.MessageType.PlayerError:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                case PlayerManagerMessaging.MessageType.PlayerStopped:
                    StopScrobble();
                    break;

                case PlayerManagerMessaging.MessageType.PlayerStarted:
                    var psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    CreateScrobbleData(psc);
                    StartScrobble();
                    break;
                }
            }
        }
コード例 #3
0
        void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                // React to player changes
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                IPlayerSlotController psc;
                // ServiceRegistration.Get<ILogger>().Debug("Trakt.tv: PlayerManagerMessage: {0}", message.MessageType);
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerResumeState:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    IResumeState resumeState = (IResumeState)message.MessageData[PlayerManagerMessaging.KEY_RESUME_STATE];
                    Guid         mediaItemId = (Guid)message.MessageData[PlayerManagerMessaging.KEY_MEDIAITEM_ID];
                    HandleResumeInfo(psc, mediaItemId, resumeState);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerError:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                case PlayerManagerMessaging.MessageType.PlayerStopped:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    HandleScrobble(psc, false);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerStarted:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    HandleScrobble(psc, true);
                    break;
                }
            }
        }
コード例 #4
0
        private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerStarted:
                case PlayerManagerMessaging.MessageType.PlayerStopped:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                case PlayerManagerMessaging.MessageType.PlayerSlotsChanged:
                {
                    IPlayerManager     playerManager = ServiceRegistration.Get <IPlayerManager>();
                    ISlimDXVideoPlayer player        = playerManager[PlayerManagerConsts.PRIMARY_SLOT] as ISlimDXVideoPlayer;
                    UpdateVideoPlayerState(player);
                    SynchronizeToVideoPlayerFramerate(player);
                    break;
                }

                case PlayerManagerMessaging.MessageType.PlaybackStateChanged:
                {
                    IPlayerManager     playerManager = ServiceRegistration.Get <IPlayerManager>();
                    ISlimDXVideoPlayer player        = playerManager[PlayerManagerConsts.PRIMARY_SLOT] as ISlimDXVideoPlayer;
                    UpdateVideoPlayerState(player);
                    break;
                }
                }
            }
        }
コード例 #5
0
 private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == PlayerContextManagerMessaging.CHANNEL)
     {
         PlayerContextManagerMessaging.MessageType messageType = (PlayerContextManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case PlayerContextManagerMessaging.MessageType.CurrentPlayerChanged:
             Update();
             break;
         }
     }
     else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
     {
         PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case PlayerManagerMessaging.MessageType.PlayerSlotStarted:
         case PlayerManagerMessaging.MessageType.PlayerSlotClosed:
             Update();
             break;
         }
     }
     else if (message.ChannelName == WorkflowManagerMessaging.CHANNEL)
     {
         WorkflowManagerMessaging.MessageType messageType = (WorkflowManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case WorkflowManagerMessaging.MessageType.NavigationComplete:
             Update();
             break;
         }
     }
 }
コード例 #6
0
 void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
     {
         PlayerManagerMessaging.MessageType messageType =
             (PlayerManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case PlayerManagerMessaging.MessageType.PlayerSlotStarted:
         case PlayerManagerMessaging.MessageType.PlayerSlotClosed:
         case PlayerManagerMessaging.MessageType.PlayerStarted:
         case PlayerManagerMessaging.MessageType.PlayerStopped:
         case PlayerManagerMessaging.MessageType.PlayerEnded:
         case PlayerManagerMessaging.MessageType.PlayersMuted:
         case PlayerManagerMessaging.MessageType.PlayersResetMute:
             CheckUpdatePlayerConfigurationData();
             break;
         }
     }
     else if (message.ChannelName == PlayerContextManagerMessaging.CHANNEL)
     {
         PlayerContextManagerMessaging.MessageType messageType =
             (PlayerContextManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case PlayerContextManagerMessaging.MessageType.CurrentPlayerChanged:
         case PlayerContextManagerMessaging.MessageType.PlayerSlotsChanged:
             CheckUpdatePlayerConfigurationData();
             break;
         }
     }
 }
コード例 #7
0
 void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == SystemMessaging.CHANNEL)
     {
         SystemMessaging.MessageType messageType = (SystemMessaging.MessageType)message.MessageType;
         ISystemStateService         sss         = ServiceRegistration.Get <ISystemStateService>();
         if (messageType == SystemMessaging.MessageType.SystemStateChanged)
         {
             if (sss.CurrentState == SystemState.ShuttingDown || sss.CurrentState == SystemState.Ending)
             {
                 UnsubscribeFromMessages();
             }
         }
     }
     if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
     {
         // React to player changes
         PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case PlayerManagerMessaging.MessageType.PlayerStarted:
             IPlayerSlotController psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
             HandleVideoEffectSelection(psc);
             break;
         }
     }
 }
コード例 #8
0
        private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == ServerConnectionMessaging.CHANNEL)
            {
                ServerConnectionMessaging.MessageType messageType =
                    (ServerConnectionMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case ServerConnectionMessaging.MessageType.HomeServerAttached:
                case ServerConnectionMessaging.MessageType.HomeServerConnected:
                    _updatePending = true; //Update all
                    break;
                }
            }
            else if (message.ChannelName == ContentDirectoryMessaging.CHANNEL)
            {
                ContentDirectoryMessaging.MessageType messageType = (ContentDirectoryMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case ContentDirectoryMessaging.MessageType.ShareImportCompleted:
                    _importUpdatePending = true; //Update latest added
                    break;

                case ContentDirectoryMessaging.MessageType.MediaItemChanged:
                    if ((ContentDirectoryMessaging.MediaItemChangeType)message.MessageData[ContentDirectoryMessaging.MEDIA_ITEM_CHANGE_TYPE] != ContentDirectoryMessaging.MediaItemChangeType.None)
                    {
                        _mediaItemUpdatePending = true;
                    }
                    break;
                }
            }
            else if (message.ChannelName == SharesMessaging.CHANNEL)
            {
                SharesMessaging.MessageType messageType = (SharesMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case SharesMessaging.MessageType.ShareChanged:
                case SharesMessaging.MessageType.ShareRemoved:
                    _updatePending = true; //Update all
                    break;
                }
            }
            else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                PlayerManagerMessaging.MessageType messageType =
                    (PlayerManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerStopped:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                    _playbackUpdatePending = true; //Update most played and last played
                    break;
                }
            }
        }
コード例 #9
0
        private SystemMessage GetSystemMessageForMessageType(PlayerManagerMessaging.MessageType msgType)
        {
            IPlayerSlotController psc   = Substitute.For <IPlayerSlotController>();
            SystemMessage         state = new SystemMessage(msgType)
            {
                ChannelName = "PlayerManager",
                MessageData = { ["PlayerSlotController"] = psc }
            };

            return(state);
        }
コード例 #10
0
        public void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                // React to player changes
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                IPlayerSlotController psc;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerResumeState:
                    Logger.Debug("Player Resume");
                    //Resume();
                    break;

                case PlayerManagerMessaging.MessageType.PlaybackStateChanged:
                    Logger.Debug("Player PlaybackStateChanged");
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    IMediaPlaybackControl mpc = psc.CurrentPlayer as IMediaPlaybackControl;

                    if (mpc != null && mpc.IsPaused)
                    {
                        Pause();
                    }
                    else
                    {
                        Resume();
                    }

                    break;

                case PlayerManagerMessaging.MessageType.PlayerError:
                    Logger.Error("Player Error");
                    break;

                case PlayerManagerMessaging.MessageType.PlayerEnded:
                case PlayerManagerMessaging.MessageType.PlayerStopped:
                    Logger.Debug("Player Stopped or Ended");
                    Stop();
                    break;

                case PlayerManagerMessaging.MessageType.PlayerStarted:
                    Logger.Debug("Player Started");
                    break;

                case PlayerManagerMessaging.MessageType.VolumeChanged:
                    Logger.Debug("Volume changed");
                    VolumeChanged();
                    break;
                }
            }
        }
コード例 #11
0
        private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlaylistMessaging.CHANNEL)
            {
                PlaylistMessaging.MessageType messageType = (PlaylistMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlaylistMessaging.MessageType.PlaylistUpdate:
                    UpdatePlaylist();
                    break;

                case PlaylistMessaging.MessageType.CurrentItemChange:
                    UpdateCurrentItem();
                    break;

                case PlaylistMessaging.MessageType.PropertiesChange:
                    UpdateProperties();
                    break;
                }
            }
            else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerSlotClosed:
                    IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();
                    ISystemStateService   sss = ServiceRegistration.Get <ISystemStateService>();
                    IPlayerContext        pc  = playerContextManager.GetPlayerContext(PlayerChoice.CurrentPlayer);
                    if (pc == null && sss.CurrentState == SystemState.Running)
                    {
                        IWorkflowManager workflowManager = ServiceRegistration.Get <IWorkflowManager>();
                        workflowManager.NavigatePopToState(Consts.WF_STATE_ID_SHOW_PLAYLIST, true);
                    }
                    break;
                    // We don't need to track the PlayerSlotActivated or PlayerSlotsChanged messages, because all information
                    // we need is contained in the CurrentPlayer information
                }
            }
            else if (message.ChannelName == PlayerContextManagerMessaging.CHANNEL)
            {
                PlayerContextManagerMessaging.MessageType messageType = (PlayerContextManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerContextManagerMessaging.MessageType.CurrentPlayerChanged:
                    UpdatePlaylist();
                    break;
                }
            }
        }
コード例 #12
0
 private void HandlePlayerMessage(PlayerManagerMessaging.MessageType message, IPlayerSlotController psc)
 {
     switch (message)
     {
     case PlayerManagerMessaging.MessageType.PlayerEnded:
     case PlayerManagerMessaging.MessageType.PlayerStopped:
     case PlayerManagerMessaging.MessageType.PlayerError:
         IPlayerContext pc = PlayerContext.GetPlayerContext(psc);
         if (pc != null)
         {
             onPlayerStopped(pc.CurrentMediaItem);
         }
         break;
     }
 }
コード例 #13
0
 protected void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
     {
         PlayerManagerMessaging.MessageType messageType =
             (PlayerManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case PlayerManagerMessaging.MessageType.PlayerSlotStarted:
         case PlayerManagerMessaging.MessageType.PlayerSlotClosed:
             Update();
             break;
         }
     }
 }
コード例 #14
0
        private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlaylistMessaging.CHANNEL)
            {
                PlaylistMessaging.MessageType messageType = (PlaylistMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlaylistMessaging.MessageType.PlaylistUpdate:
                    UpdatePlaylist();
                    break;

                case PlaylistMessaging.MessageType.PropertiesChange:
                    UpdateProperties();
                    break;
                }
            }
            else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerSlotClosed:
                    IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();
                    ISystemStateService   sss = ServiceRegistration.Get <ISystemStateService>();
                    IPlayerContext        pc  = playerContextManager.GetPlayerContext(PlayerChoice.CurrentPlayer);
                    if (pc == null && sss.CurrentState == SystemState.Running)
                    {
                        IWorkflowManager workflowManager = ServiceRegistration.Get <IWorkflowManager>();
                        workflowManager.NavigatePopToState(Consts.WF_STATE_ID_EDIT_PLAYLIST, true);
                    }
                    break;
                }
            }
            else if (message.ChannelName == PlayerContextManagerMessaging.CHANNEL)
            {
                PlayerContextManagerMessaging.MessageType messageType = (PlayerContextManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerContextManagerMessaging.MessageType.CurrentPlayerChanged:
                    UpdatePlaylist();
                    break;
                }
            }
        }
コード例 #15
0
        public static void OnMessageReceived(SystemMessage message)
        {
            // React to player changes
            PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
            IPlayerSlotController psc;

            switch (messageType)
            {
            case PlayerManagerMessaging.MessageType.PlayerResumeState:
                Logger.Debug("WifiRemote: Player Resume");
                //Resume();
                break;

            case PlayerManagerMessaging.MessageType.PlaybackStateChanged:
                Logger.Debug("WifiRemote: Playback State Changed");
                SendMessageToAllClients.Send(WifiRemotePlugin.MessageStatus, ref SocketServer.Instance.connectedSockets);
                break;

            case PlayerManagerMessaging.MessageType.PlayerError:
                Logger.Error("WifiRemote: Player Error");
                break;

            case PlayerManagerMessaging.MessageType.PlayerEnded:
            case PlayerManagerMessaging.MessageType.PlayerStopped:
                Logger.Debug("WifiRemote: Player Stopped or Ended");
                SendMessageToAllClients.Send(WifiRemotePlugin.MessageStatus, ref SocketServer.Instance.connectedSockets);
                NowPlayingUpdater.Stop();
                break;

            case PlayerManagerMessaging.MessageType.PlayerStarted:
                Logger.Debug("WifiRemote: Player Started");
                SendMessageToAllClients.Send(WifiRemotePlugin.MessageStatus, ref SocketServer.Instance.connectedSockets);
                NowPlayingUpdater.Start();
                break;

            case PlayerManagerMessaging.MessageType.VolumeChanged:
                Logger.Debug("WifiRemote: Volume changed");
                SendMessageToAllClients.Send(new MessageVolume(), ref SocketServer.Instance.connectedSockets);
                break;
            }
        }
コード例 #16
0
        private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerStarted:
                    StartScrobble(message);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerResumeState:
                    SaveResumePosition(message);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerError:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                case PlayerManagerMessaging.MessageType.PlayerStopped:
                    StopScrobble();
                    break;
                }
            }
        }
コード例 #17
0
        void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == WorkflowManagerMessaging.CHANNEL)
            {
                // Adjust our knowledge about the currently opened FSC/CP state if the user switches to one of them
                WorkflowManagerMessaging.MessageType messageType = (WorkflowManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case WorkflowManagerMessaging.MessageType.StatesPopped:
                    ICollection <Guid> statesRemoved = new List <Guid>(
                        ((IDictionary <Guid, NavigationContext>)message.MessageData[WorkflowManagerMessaging.CONTEXTS]).Keys);
                    HandleStatesRemovedFromWorkflowStack(statesRemoved);
                    break;

                case WorkflowManagerMessaging.MessageType.StatePushed:
                    NavigationContext context = (NavigationContext)message.MessageData[WorkflowManagerMessaging.CONTEXT];
                    Guid stateId = context.WorkflowState.StateId;
                    HandleWorkflowStatePushed(stateId);
                    break;
                }
            }
            else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                // React to player changes
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                IPlayerSlotController psc;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerResumeState:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    IResumeState resumeState = (IResumeState)message.MessageData[PlayerManagerMessaging.KEY_RESUME_STATE];
                    Guid         mediaItemId = (Guid)message.MessageData[PlayerManagerMessaging.KEY_MEDIAITEM_ID];
                    HandleResumeInfo(psc, mediaItemId, resumeState);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerError:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    HandlePlayerEnded(psc);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerStopped:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    HandlePlayerStopped(psc);
                    break;

                case PlayerManagerMessaging.MessageType.RequestNextItem:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    HandleRequestNextItem(psc);
                    break;
                }
                CleanupPlayerContexts();
                CheckMediaWorkflowStates_NoLock(); // Primary player could have been changed or closed or CP player could have been closed
            }
            else if (message.ChannelName == PlayerContextManagerMessaging.CHANNEL)
            {
                // React to internal player context manager changes
                PlayerContextManagerMessaging.MessageType messageType = (PlayerContextManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerContextManagerMessaging.MessageType.UpdatePlayerRolesInternal:
                    PlayerContext newCurrentPlayer = (PlayerContext)message.MessageData[PlayerContextManagerMessaging.NEW_CURRENT_PLAYER_CONTEXT];
                    PlayerContext newAudioPlayer   = (PlayerContext)message.MessageData[PlayerContextManagerMessaging.NEW_AUDIO_PLAYER_CONTEXT];
                    HandleUpdatePlayerRoles(newCurrentPlayer, newAudioPlayer);
                    break;
                    // PlayerContextManagerMessaging.MessageType.CurrentPlayerChanged not handled here
                }
            }
        }
コード例 #18
0
        void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == WorkflowManagerMessaging.CHANNEL)
            {
                // Adjust our knowledge about the currently opened FSC/CP state if the user switches to one of them
                WorkflowManagerMessaging.MessageType messageType =
                    (WorkflowManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case WorkflowManagerMessaging.MessageType.StatesPopped:
                    ICollection <Guid> statesRemoved = new List <Guid>(
                        ((IDictionary <Guid, NavigationContext>)message.MessageData[WorkflowManagerMessaging.CONTEXTS]).Keys);
                    HandleStatesRemovedFromWorkflowStack(statesRemoved);
                    break;

                case WorkflowManagerMessaging.MessageType.StatePushed:
                    NavigationContext context = (NavigationContext)message.MessageData[WorkflowManagerMessaging.CONTEXT];
                    Guid stateId = context.WorkflowState.StateId;
                    HandleWorkflowStatePushed(stateId);
                    break;
                }
            }
            else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                // React to player changes
                PlayerManagerMessaging.MessageType messageType =
                    (PlayerManagerMessaging.MessageType)message.MessageType;
                IPlayerSlotController psc;
                uint activationSequence;
                switch (messageType)
                {
                case PlayerManagerMessaging.MessageType.PlayerError:
                case PlayerManagerMessaging.MessageType.PlayerEnded:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    activationSequence = (uint)message.MessageData[PlayerManagerMessaging.ACTIVATION_SEQUENCE];
                    HandlePlayerEnded(psc, activationSequence);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerStopped:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    activationSequence = (uint)message.MessageData[PlayerManagerMessaging.ACTIVATION_SEQUENCE];
                    HandlePlayerStopped(psc, activationSequence);
                    break;

                case PlayerManagerMessaging.MessageType.RequestNextItem:
                    psc = (IPlayerSlotController)message.MessageData[PlayerManagerMessaging.PLAYER_SLOT_CONTROLLER];
                    activationSequence = (uint)message.MessageData[PlayerManagerMessaging.ACTIVATION_SEQUENCE];
                    HandleRequestNextItem(psc, activationSequence);
                    break;

                case PlayerManagerMessaging.MessageType.PlayerSlotsChanged:
                    HandlePlayerSlotsChanged();
                    break;
                }
                CheckCurrentPlayerSlot();          // Current player could have been closed
                CheckMediaWorkflowStates_NoLock(); // Primary player could have been changed or closed or CP player could have been closed
            }
            else if (message.ChannelName == PlayerContextManagerMessaging.CHANNEL)
            {
                // React to internal player context manager changes
                PlayerContextManagerMessaging.MessageType messageType =
                    (PlayerContextManagerMessaging.MessageType)message.MessageType;
                switch (messageType)
                {
                case PlayerContextManagerMessaging.MessageType.UpdatePlayerRolesInternal:
                    int newCurrentPlayerIndex = (int)message.MessageData[PlayerContextManagerMessaging.CURRENT_PLAYER_INDEX];
                    int newAudioPlayerIndex   = (int)message.MessageData[PlayerContextManagerMessaging.AUDIO_PLAYER_INDEX];
                    HandlePlayerRolesChanged(newCurrentPlayerIndex, newAudioPlayerIndex);
                    break;
                    // PlayerContextManagerMessaging.MessageType.CurrentPlayerChanged not handled here
                }
            }
        }
コード例 #19
0
 private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == SystemMessaging.CHANNEL)
     {
         SystemMessaging.MessageType messageType = (SystemMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case SystemMessaging.MessageType.SystemStateChanged:
             SystemState newState = (SystemState)message.MessageData[SystemMessaging.NEW_STATE];
             if (newState == SystemState.Resuming)
             {
                 // Signal the event, callback is executed after timeout, see OnResume
                 _resumeEvent.EnqueueEvent(this, EventArgs.Empty);
             }
             if (newState == SystemState.Suspending)
             {
                 ServiceRegistration.Get <ILogger>().Info("SlimTvClientModel: System suspending, stopping all SlimTV players");
                 IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>();
                 for (int index = 0; index < playerContextManager.NumActivePlayerContexts; index++)
                 {
                     IPlayerContext playerContext = playerContextManager.GetPlayerContext(index);
                     if (playerContext != null && playerContext.CurrentMediaItem is LiveTvMediaItem ltvi)
                     {
                         if (ltvi.AdditionalProperties.ContainsKey(LiveTvMediaItem.CHANNEL))
                         {
                             _ = UpdateWatchDuration((IChannel)ltvi.AdditionalProperties[LiveTvMediaItem.CHANNEL]);
                         }
                         playerContext.Stop();
                         _tvWasActive = true;
                     }
                 }
             }
             break;
         }
     }
     else if (message.ChannelName == ServerStateMessaging.CHANNEL)
     {
         //Check if Tv Server state has changed and update if necessary
         ServerStateMessaging.MessageType messageType = (ServerStateMessaging.MessageType)message.MessageType;
         if (messageType == ServerStateMessaging.MessageType.StatesChanged)
         {
             var states = message.MessageData[ServerStateMessaging.STATES] as IDictionary <Guid, object>;
             if (states != null && states.ContainsKey(TvServerState.STATE_ID))
             {
                 ServerState = states[TvServerState.STATE_ID] as TvServerState;
             }
         }
     }
     else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
     {
         PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case PlayerManagerMessaging.MessageType.PlayerStopped:
         case PlayerManagerMessaging.MessageType.PlayerEnded:
             if (_lastTunedChannel != null)
             {
                 _ = UpdateWatchDuration(_lastTunedChannel);
             }
             break;
         }
     }
 }
コード例 #20
0
        private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == SystemMessaging.CHANNEL)
            {
                SystemMessaging.MessageType messageType = (SystemMessaging.MessageType)message.MessageType;
                if (messageType == SystemMessaging.MessageType.SystemStateChanged)
                {
                    SystemState newState = (SystemState)message.MessageData[SystemMessaging.NEW_STATE];
                    if (newState == SystemState.Running)
                    {
                        Initialise();
                    }
                }
            }
            else if (message.ChannelName == PlayerManagerMessaging.CHANNEL)
            {
                PlayerManagerMessaging.MessageType messageType = (PlayerManagerMessaging.MessageType)message.MessageType;
                if (messageType == PlayerManagerMessaging.MessageType.PlayerStarted)
                {
                    Log.Info("Playback started.");
                    ContentEffect effect;
                    // What kind of playback?
                    // Video gets highest priority in PiP.
                    if (ServiceRegistration.Get <IPlayerContextManager>().IsVideoContextActive)
                    {
                        effect = settings.VideoEffect;
                    }
                    else if (ServiceRegistration.Get <IPlayerContextManager>().IsAudioContextActive)
                    {
                        effect = settings.AudioEffect;
                    }
                    else
                    {
                        return;
                    }

                    // Start the right effect.
                    if (CheckForStartRequirements())
                    {
                        coreObject.ChangeEffect(effect);
                        CalculateDelay();
                    }
                    else
                    {
                        coreObject.ChangeEffect(ContentEffect.LEDsDisabled);
                    }
                }
                else if (messageType == PlayerManagerMessaging.MessageType.PlayerStopped ||
                         messageType == PlayerManagerMessaging.MessageType.PlayerEnded)
                {
                    Log.Info("Playback stopped.");
                    ContentEffect effect;
                    // Is there still something playing? (PiP)
                    // If yes, what?
                    if (ServiceRegistration.Get <IPlayerContextManager>().IsVideoContextActive)
                    {
                        Log.Info("Another video player is still active (PiP).");
                        effect = settings.VideoEffect;
                    }
                    else if (ServiceRegistration.Get <IPlayerContextManager>().IsAudioContextActive)
                    {
                        Log.Info("Another audio player is still active (PiP).");
                        effect = settings.AudioEffect;
                    }
                    else
                    {
                        effect = settings.MenuEffect;
                    }

                    if (CheckForStartRequirements())
                    {
                        coreObject.ChangeEffect(effect);
                        CalculateDelay();
                    }
                    else
                    {
                        coreObject.ChangeEffect(ContentEffect.LEDsDisabled);
                    }
                }
            }
        }