Exemplo n.º 1
0
        void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == SystemMessaging.CHANNEL)
            {
                SystemMessaging.MessageType messageType = (SystemMessaging.MessageType)message.MessageType;
                if (messageType == SystemMessaging.MessageType.SystemStateChanged)
                {
                    if (!_autoStart)
                    {
                        return;
                    }
                    SystemState state = (SystemState)message.MessageData[SystemMessaging.NEW_STATE];
                    switch (state)
                    {
                    case SystemState.Running:
                        StartTimer();
                        break;

                    case SystemState.ShuttingDown:
                        StopTimer();
                        break;
                    }
                }
            }
        }
 void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == ServerConnectionMessaging.CHANNEL)
     {
         ServerConnectionMessaging.MessageType type = (ServerConnectionMessaging.MessageType)message.MessageType;
         switch (type)
         {
         case ServerConnectionMessaging.MessageType.HomeServerConnected:
         case ServerConnectionMessaging.MessageType.HomeServerAttached:
             UpdateServerAddress();
             break;
         }
     }
     else 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.Suspending)
             {
                 _suspended = true;
             }
             else if (newState == SystemState.Resuming && _suspended)
             {
                 _suspended = false;
                 DoWakeServer();
             }
             break;
         }
     }
 }
Exemplo n.º 3
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.ShuttingDown)
             {
                 IsSuspended = true;
             }
             break;
         }
     }
     if (message.ChannelName == TaskSchedulerMessaging.CHANNEL)
     {
         TaskSchedulerMessaging.MessageType messageType = (TaskSchedulerMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case TaskSchedulerMessaging.MessageType.DUE:
             Task dueTask = (Task)message.MessageData[TaskSchedulerMessaging.TASK];
             if (dueTask.ID == _importerTaskId)
             {
                 // Forward a new message which will be handled by MediaLibrary (it knows the shares and configuration), then it will
                 // schedule the local shares.
                 ImporterWorkerMessaging.SendImportMessage(ImporterWorkerMessaging.MessageType.RefreshLocalShares);
             }
             break;
         }
     }
 }
Exemplo n.º 4
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)
                     {
                         playerContext.Stop();
                         _tvWasActive = true;
                     }
                 }
             }
             break;
         }
     }
 }
 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)
             {
                 RestorePendingActions();
             }
         }
     }
     else if (message.ChannelName == MediaLibraryMessaging.CHANNEL)
     {
         MediaLibraryMessaging.MessageType messageType = (MediaLibraryMessaging.MessageType)message.MessageType;
         if (messageType == MediaLibraryMessaging.MessageType.MediaItemsAddedOrUpdated)
         {
             IEnumerable <Guid> ids = message.MessageData[MediaLibraryMessaging.PARAM] as IEnumerable <Guid>;
             if (ids != null)
             {
                 foreach (Guid id in ids)
                 {
                     ScheduleAnalysis(id);
                 }
             }
         }
         else if (messageType == MediaLibraryMessaging.MessageType.MediaItemsDeleted)
         {
             ScheduleAnalysisCleanup();
         }
     }
 }
Exemplo n.º 6
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;
         }
     }
 }
Exemplo n.º 7
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)
             {
                 RestorePendingActions();
             }
         }
     }
     else if (message.ChannelName == MediaLibraryMessaging.CHANNEL)
     {
         MediaLibraryMessaging.MessageType messageType = (MediaLibraryMessaging.MessageType)message.MessageType;
         if (messageType == MediaLibraryMessaging.MessageType.MediaItemsAddedOrUpdated)
         {
             IEnumerable <MediaItem> items = message.MessageData[MediaLibraryMessaging.PARAM] as IEnumerable <MediaItem>;
             if (items != null)
             {
                 foreach (MediaItem item in items)
                 {
                     ScheduleFanArtCollection(item.MediaItemId, item.Aspects);
                 }
             }
         }
         else if (messageType == MediaLibraryMessaging.MessageType.MediaItemsDeleted)
         {
             ScheduleFanArtCleanup();
         }
     }
 }
 //This handler is called synchronously, we complete the blocks in here when the system state changes
 //to ShuttingDown to ensure that all pending tasks are completed whilst all services are still available
 private void OnPreviewMessage(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.ShuttingDown)
             {
                 CompleteBlocks();
             }
         }
     }
 }
Exemplo n.º 9
0
 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)
             {
                 _reloadSkinActions.RegisterKeyActions();
                 _loadSkinThemeActions.RegisterKeyActions();
                 DropMessageQueue();
             }
         }
     }
 }
Exemplo n.º 10
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.Running)
             {
                 StartTimer();
                 if (UserSettingStorage.AutoLoginUser == Guid.Empty && UserSettingStorage.UserLoginScreenEnabled && UserSettingStorage.UserLoginEnabled)
                 {
                     ShowLoginScreen();
                 }
             }
             else if (newState == SystemState.Suspending || newState == SystemState.Hibernating)
             {
                 if ((UserSettingStorage.AutoLoginUser == Guid.Empty || UserSettingStorage.AutoLoginUser != CurrentUser?.ProfileId) && UserSettingStorage.UserLoginEnabled)
                 {
                     LogoutUser();
                 }
             }
             else if (newState == SystemState.ShuttingDown)
             {
                 StopTimer();
             }
             break;
         }
     }
     else if (message.ChannelName == ServerConnectionMessaging.CHANNEL)
     {
         ServerConnectionMessaging.MessageType messageType = (ServerConnectionMessaging.MessageType)message.MessageType;
         switch (messageType)
         {
         case ServerConnectionMessaging.MessageType.HomeServerConnected:
             if (_firstLogin)
             {
                 _ = SetCurrentUser(); //Auto login user on first connect
             }
             _ = RefreshUserList();
             break;
         }
     }
 }
Exemplo n.º 11
0
 void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
 {
     if (message.ChannelName == SystemMessaging.CHANNEL)
     {
         SystemMessaging.MessageType messageType = (SystemMessaging.MessageType)message.MessageType;
         if (messageType == SystemMessaging.MessageType.SystemStateChanged)
         {
             SystemState state = (SystemState)message.MessageData[SystemMessaging.NEW_STATE];
             switch (state)
             {
             case SystemState.ShuttingDown:
                 UnregisterService();
                 break;
             }
         }
     }
 }
Exemplo n.º 12
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.ShuttingDown)
             {
                 IsSuspended = true;
             }
             break;
         }
     }
 }
Exemplo n.º 13
0
        void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == ServerConnectionMessaging.CHANNEL)
            {
                ServerConnectionMessaging.MessageType type = (ServerConnectionMessaging.MessageType)message.MessageType;
                switch (type)
                {
                case ServerConnectionMessaging.MessageType.HomeServerAttached:
                    RegisterService();
                    break;

                case ServerConnectionMessaging.MessageType.HomeServerDisconnected:
                case ServerConnectionMessaging.MessageType.HomeServerDetached:
                    UnregisterService();
                    break;
                }
            }
            if (message.ChannelName == SystemMessaging.CHANNEL)
            {
                SystemMessaging.MessageType messageType = (SystemMessaging.MessageType)message.MessageType;
                if (messageType == SystemMessaging.MessageType.SystemStateChanged)
                {
                    SystemState state = (SystemState)message.MessageData[SystemMessaging.NEW_STATE];
                    switch (state)
                    {
                    case SystemState.Suspending:
                        ITvProvider tvProvider = ServiceRegistration.Get <ITvProvider>(false);
                        if (tvProvider != null)
                        {
                            tvProvider.DeInit();
                        }
                        break;

                    case SystemState.ShuttingDown:
                        // Called to make sure that timeshifting on server is stopped on shutdown.
                        UnregisterService();
                        break;
                    }
                }
            }
        }
 public void Receive(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)
             {
                 // It is necessary to block the main thread until our message delivery thread has delivered all pending
                 // messages to avoid asynchronous threads during the shutdown phase.
                 // It's a bit illegal to call the Shutdown() method which acquires a lock in this synchronous message
                 // handler method. But as we know that the SystemStateChanged message is only called by our application
                 // main thread which doesn't hold locks, this won't cause deadlocks.
                 // How ugly, but that's life.
                 _owner.Shutdown();
             }
         }
     }
 }
Exemplo n.º 15
0
 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)
             {
                 RegisterKeyBindings();
             }
             if (newState == SystemState.ShuttingDown)
             {
                 DisableStats();
                 UnregisterKeyBindings();
                 DropMessageQueue();
             }
         }
     }
 }
Exemplo n.º 16
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)
             {
                 DoResume();
             }
             if (newState == SystemState.Suspending)
             {
                 DoSuspend();
             }
             break;
         }
     }
 }
Exemplo n.º 17
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.Suspending)
             {
                 ServiceRegistration.Get <ILogger>().Info("SlimTVMPExtendedProvider: System suspending, stopping timeshift.");
                 DeInit();
             }
             if (newState == SystemState.Resuming)
             {
                 ServiceRegistration.Get <ILogger>().Info("SlimTVMPExtendedProvider: System resuming, init connections.");
                 Init();
             }
             break;
         }
     }
 }
 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.Suspending)
             {
                 _suspended = true;
             }
             if (newState == SystemState.Resuming && _suspended)
             {
                 _suspended = false;
                 ServiceRegistration.Get <ILogger>().Info("UPnPSystemResumeHelper: System resuming, trigger UpdateConfiguration for UPnPServer.");
                 _upnpServer.UpdateConfiguration();
             }
             break;
         }
     }
 }
Exemplo n.º 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;
         }
     }
 }
Exemplo n.º 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);
                    }
                }
            }
        }