示例#1
0
        public void SwitchNow(Database db, SwitchDir dir)
        {
            if (_thread == null || !_thread.IsAlive)
            {
                Log.Write(LogLevel.Warning, "The switch thread was found to be inactive. Restarting...");
                Start(db, _theme);
            }

            _switchNow = dir;
        }
示例#2
0
        private void DoSwitch(Database db, SwitchDir dir)
        {
            if (_theme == null)
            {
                Log.Write(LogLevel.Warning, "Cannot switch wallpaper; there is no current theme.");
                return;
            }
            else
            {
                Log.Write(LogLevel.Info, "Switching wallpaper for theme '{0}'", _theme.Name);
            }

            try
            {
                _switching = true;

                // Fire the Switching event handler.
                SwitchEventHandler ev = Switching;
                if (ev != null)
                {
                    ev(this, new EventArgs());
                }

                _wallpaperSetter.Set(db, _theme, dir, false, ref _randomGroupCounter, _cancel.Token);

                Log.Write(LogLevel.Debug, "Finished switching wallpaper.");
            }
            catch (Exception ex)
            {
                Log.Write(ex, "Error when switching wallpaper.");
            }
            finally
            {
                _switching = false;

                // Fire the Switched event handler.
                SwitchEventHandler ev = Switched;
                if (ev != null)
                {
                    ev(this, new EventArgs());
                }
            }
        }
示例#3
0
 public void SetSwitchDirection(SwitchDir direction)
 {
     if (!IsLockedByRS)
     {
         if (direction == SwitchDir.Straight)
         {
             SetDirectionStraight();
         }
         else if (direction == SwitchDir.Turn)
         {
             SetDirectionTurn();
         }
         else if (direction == SwitchDir.Change)
         {
             ChangeSwitchDirection();
         }
     }
     else
     {
         Debug.Log("Locked");
     }
 }
示例#4
0
        private SwitchDir CheckSwitch()
        {
            // Check if the user initiated an early switch.
            var switchNow = _switchNow;

            if (switchNow != SwitchDir.None)
            {
                _switchNow = SwitchDir.None;
                return(switchNow);
            }

            if (_paused)
            {
                return(SwitchDir.None);
            }

            if (_startUpTime != DateTime.MinValue)
            {
                var startUpDelay = Settings.StartUpDelay;
                if (startUpDelay > 0 && _startUpTime.AddSeconds(startUpDelay) > DateTime.Now)
                {
                    return(SwitchDir.None);
                }
                else
                {
                    _startUpTime = DateTime.MinValue;
                }
            }

            // If the screensaver was last found to be running, then check now if the user has woken up.
            if (_screensaverRunning)
            {
                if (!ScreenSaverRunning)
                {
                    Log.Write(LogLevel.Debug, "Screensaver has stopped running.");
                    _screensaverRunning = false;
                }
            }

            // Check if it's time to switch
            if (!_locked && !_screensaverRunning)
            {
                lock (_themeLock)
                {
                    DateTime nextSwitch = _lastSwitch + _theme.Interval;
                    if (DateTime.Now >= nextSwitch)
                    {
                        // Check if the screensaver is running; if so, then don't switch now.
                        if (ScreenSaverRunning)
                        {
                            Log.Write(LogLevel.Debug, "Stopping wallpaper updating because the screensaver is running.");
                            _screensaverRunning = true;
                            return(SwitchDir.None);
                        }

                        return(SwitchDir.Next);
                    }
                }
            }

            return(SwitchDir.None);
        }