private void RestoreMuteThread() { // Try to unmute the master volume several times since some audio // devices need time to get reactivated after away / sleep mode string errorMessage = String.Empty; for (int i = 0; i <= 4; i++) { // Wait some seconds until next try if (i > 0) { Log.Debug("PS: Wait for {0} second(s)", i); Thread.Sleep(1000 * i); } try { using (MasterVolume _masterVolume = new MasterVolume()) { if (_masterVolume.IsMuted == false) { Log.Debug("PS: Master volume is unmuted - nothing to do"); return; } Log.Debug("PS: Master volume is muted - try to unmute it"); _masterVolume.IsMuted = false; Log.Debug("PS: Successfully unmuted master volume"); return; } } catch (ApplicationException appEx) { errorMessage = appEx.Message; Log.Debug("PS: Cannot handle master volume - {0}", errorMessage); } catch (COMException comEx) { errorMessage = comEx.Message; Log.Debug("PS: Cannot handle master volume - {0}", comEx.Message); } catch (ThreadAbortException) { Log.Debug("PS: RestoreMuteThread aborted"); return; } catch (Exception ex) { Log.Error("PS: Error in handling master volume - {0}", ex.Message); return; } // Terminate if MP main thread has terminated if (!_parentThread.IsAlive) { Log.Debug("PS: RestoreMuteThread terminated"); return; } } // No success after several times trying... Log.Error("PS: Error in handling master volume - " + errorMessage); }
public void Start() { Log.Info("PS: Starting PowerScheduler client plugin..."); try { // Register for MediaPortal actions to see if user is active GUIWindowManager.OnNewAction += new OnActionHandler(this.OnAction); // Create the timer that will wakeup the system after a specific amount of time after the // system has been put into standby _wakeupTimer = new WaitableTimer(); // Load settings LoadSettings(); // Unmute master volume if (_settings.GetSetting("UnmuteMasterVolume").Get<bool>()) { try { using (MasterVolume _masterVolume = new MasterVolume()) { if (_masterVolume.IsMuted) { Log.Debug("PS: Master volume is muted - unmute it"); _masterVolume.IsMuted = false; } } } catch (Exception ex) { Log.Error("PS: Error in handling master volume - {0}", ex.Message); } } // Register as global service provider instance if (!GlobalServiceProvider.Instance.IsRegistered<IPowerScheduler>()) { GlobalServiceProvider.Instance.Add<IPowerScheduler>(this); } Log.Debug("PS: Registered PowerScheduler as IPowerScheduler service to GlobalServiceProvider"); // Register standby/wakeup handlers _wakeableStandbyHandler = new WakeableStandbyHandler(); Register(_wakeableStandbyHandler); _wakeableWakeupHandler = new WakeableWakeupHandler(); Register(_wakeableWakeupHandler); if (!_singleSeat) { // Register special standby/wakeup handlers (remote client only) _factory = new PowerSchedulerFactory(); _factory.CreateDefaultSet(); } Log.Debug("PS: Registered standby/wakeup handlers to PowerScheduler client plugin"); // Register PSClientPlugin as standby / wakeup handler for PowerScheduler server (single-seat only) if (_singleSeat) RegisterToRemotePowerScheduler(); // Create the EventWaitHandles for the StandbyWakeupThread and GetCurrentState _standbyWakeupTriggered = new EventWaitHandle(false, EventResetMode.AutoReset, "MediaPortal.PowerScheduler.StandbyWakeupTriggered"); _standbyWakeupFinished = new AutoResetEvent(false); _standbyWakeupSuspend = new AutoResetEvent(false); // initially do not take suspend branch _standbyWakeupResume = new ManualResetEvent(true); // initially releases (no block) // Start the StandbyWakeupThread responsible for checking standby conditions and setting the wakeup timer _parentThread = Thread.CurrentThread; _standbyWakeupThread = new Thread(StandbyWakeupThread); _standbyWakeupThread.Name = "PS StandbyWakeup"; _standbyWakeupThread.Start(); Log.Debug("PS: StandbyWakeupThread started"); SendPowerSchedulerEvent(PowerSchedulerEventType.Started); Log.Info("PS: PowerScheduler client plugin started"); } catch (Exception ex) { Log.Error("PS: Exception in Start: {0}", ex); Stop(); } }
/// <summary> /// Saves the master volume mute state /// </summary> private void SaveMasterVolumeMuteState() { try { using (MasterVolume _masterVolume = new MasterVolume()) { _mute = _masterVolume.IsMuted; } } catch (Exception ex) { Log.Error("PS: Error in getting master volume - {0}", ex.Message); _mute = false; } finally { Log.Debug("PS: Saved master volume mute state: {0}", _mute); } }