Ejemplo n.º 1
0
 private static void SetWallpaper(Theme newTheme, GlobalState rtc, List <string> darkThemeWallpapers,
                                  List <string> lightThemeWallpapers, bool enabled)
 {
     if (enabled)
     {
         try
         {
             if (newTheme == Theme.Dark)
             {
                 var success = WallpaperHandler.SetBackground(darkThemeWallpapers);
                 if (success)
                 {
                     rtc.CurrentWallpaperTheme = newTheme;
                     rtc.CurrentWallpaperPath  = WallpaperHandler.GetBackground();
                 }
             }
             else
             {
                 var success = WallpaperHandler.SetBackground(lightThemeWallpapers);
                 if (success)
                 {
                     rtc.CurrentWallpaperTheme = newTheme;
                     rtc.CurrentWallpaperPath  = WallpaperHandler.GetBackground();
                 }
             }
         }
         catch (Exception ex)
         {
             Logger.Error(ex, "could not set wallpaper");
         }
     }
 }
Ejemplo n.º 2
0
 private static void SetWallpaper(Theme newTheme, RuntimeConfig rtc, List <string> darkThemeWallpapers,
                                  List <string> lightThemeWallpapers, bool enabled)
 {
     if (enabled)
     {
         if (newTheme == Theme.Dark)
         {
             var success = WallpaperHandler.SetBackground(darkThemeWallpapers);
             if (success)
             {
                 rtc.CurrentWallpaperTheme = newTheme;
                 rtc.CurrentWallpaperPath  = WallpaperHandler.GetBackground();
             }
         }
         else
         {
             var success = WallpaperHandler.SetBackground(lightThemeWallpapers);
             if (success)
             {
                 rtc.CurrentWallpaperTheme = newTheme;
                 rtc.CurrentWallpaperPath  = WallpaperHandler.GetBackground();
             }
         }
     }
 }
Ejemplo n.º 3
0
 public static void SwitchToDarkTheme()
 {
     if (Settings.Default.ChangeAppTheme)
     {
         RegistryHandler.AppsUseLightTheme(false);
     }
     if (Settings.Default.ChangeSystemTheme)
     {
         RegistryHandler.SystemUsesLightTheme(false);
     }
     if (Settings.Default.ChangeWallpaper)
     {
         WallpaperHandler.ChangeWallpaper(Settings.Default.DarkWallpaperPath);
     }
 }
        private void UpdateCurrentComponentState(bool isInitializing = false)
        {
            if (Settings == null || SettingsBefore == null || (!Initialized && !isInitializing))
            {
                return;
            }
            string globalLightBefore = SettingsBefore.Component.GlobalWallpaper.Light ?? "";
            string globalDarkBefore  = SettingsBefore.Component.GlobalWallpaper.Dark ?? "";
            string globalLightAfter  = Settings.Component.GlobalWallpaper.Light ?? "";
            string globalDarkAfter   = Settings.Component.GlobalWallpaper.Dark ?? "";

            // check if the global wallpaper section has been modified.
            // Since we don't have target theme information here, if one value changes, we want a theme refresh
            if (!globalDarkBefore.Equals(globalDarkAfter))
            {
                currentGlobalTheme = Theme.Unknown;
            }
            if (!globalLightBefore.Equals(globalLightAfter))
            {
                currentGlobalTheme = Theme.Unknown;
            }

            // Same behavior with solid color
            if (!SettingsBefore.Component.SolidColors.Light.Equals(Settings.Component.SolidColors.Light))
            {
                currentSolidColorTheme = Theme.Unknown;
            }

            if (!SettingsBefore.Component.SolidColors.Dark.Equals(Settings.Component.SolidColors.Dark))
            {
                currentSolidColorTheme = Theme.Unknown;
            }

            // additinoally, if the user has changed the type dark before, an update is also required
            if (SettingsBefore.Component.TypeDark != Settings.Component.TypeDark)
            {
                StateUpdateOnTypeToggle(Settings.Component.TypeDark);
            }

            if (SettingsBefore.Component.TypeLight != Settings.Component.TypeLight)
            {
                StateUpdateOnTypeToggle(Settings.Component.TypeLight);
            }

            currentIndividualTheme   = GetIndividualWallpapersState();
            currentWallpaperPosition = WallpaperHandler.GetPosition();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Handles the switch for each of the available wallpaper type modes.
        /// </summary>
        /// <param name="type">The wallpaper type that is selected</param>
        /// <param name="newTheme">The new theme that is targeted to be set</param>
        private void HandleSwitchByType(WallpaperType type, Theme newTheme)
        {
            if (type == WallpaperType.Individual)
            {
                WallpaperHandler.SetWallpapers(Settings.Component.Monitors, Settings.Component.Position, newTheme);
                currentIndividualTheme = newTheme;
                currentGlobalTheme     = Theme.Unknown;
                currentSolidColorTheme = Theme.Unknown;
            }
            else if (type == WallpaperType.Global)
            {
                WallpaperHandler.SetGlobalWallpaper(Settings.Component.GlobalWallpaper, newTheme);
                currentGlobalTheme     = newTheme;
                currentIndividualTheme = Theme.Unknown;
                currentSolidColorTheme = Theme.Unknown;
            }
            else if (type == WallpaperType.All)
            {
                bool globalSwitched = false;
                if (currentGlobalTheme != newTheme)
                {
                    WallpaperHandler.SetGlobalWallpaper(Settings.Component.GlobalWallpaper, newTheme);
                    globalSwitched = true;
                }
                if (currentIndividualTheme != newTheme || globalSwitched)
                {
                    WallpaperHandler.SetWallpapers(Settings.Component.Monitors, Settings.Component.Position, newTheme);
                }
                currentGlobalTheme     = newTheme;
                currentIndividualTheme = newTheme;
                currentSolidColorTheme = Theme.Unknown;
            }
            else if (type == WallpaperType.SolidColor)
            {
                WallpaperHandler.SetSolidColor(Settings.Component.SolidColors, newTheme);
                currentSolidColorTheme = newTheme;
                currentGlobalTheme     = Theme.Unknown;
                currentIndividualTheme = Theme.Unknown;
            }
            ThemeHandler.SyncCustomThemeToDisk();
            ThemeFile temp = new(RegistryHandler.GetActiveThemePath());

            temp.Load();
            GlobalState.ManagedThemeFile.Desktop = temp.Desktop;
            GlobalState.ManagedThemeFile.Colors  = temp.Colors;
        }
        private Theme GetIndividualWallpapersState()
        {
            List <Tuple <string, string> > wallpapers = WallpaperHandler.GetWallpapers();
            List <Theme> wallpaperStates = new();

            // collect the wallpaper states of all wallpapers in the system
            foreach (Tuple <string, string> wallpaperInfo in wallpapers)
            {
                MonitorSettings settings = Settings.Component.Monitors.Find(m => m.Id == wallpaperInfo.Item1);
                if (settings != null)
                {
                    if (wallpaperInfo.Item2.ToLower().Equals(settings.DarkThemeWallpaper.ToLower()))
                    {
                        wallpaperStates.Add(Theme.Dark);
                    }
                    else if (wallpaperInfo.Item2.ToLower().Equals(settings.LightThemeWallpaper.ToLower()))
                    {
                        wallpaperStates.Add(Theme.Light);
                    }
                    else
                    {
                        wallpaperStates.Add(Theme.Unknown);
                        break;
                    }
                }
                else
                {
                    wallpaperStates.Add(Theme.Unknown);
                    break;
                }
            }
            // if one single wallpaper does not match a theme, then we don't know the state and it needs to be updated
            if (wallpaperStates.TrueForAll(c => c == Theme.Dark))
            {
                return(Theme.Dark);
            }
            else if (wallpaperStates.TrueForAll(c => c == Theme.Light))
            {
                return(Theme.Light);
            }
            else
            {
                return(Theme.Unknown);
            }
        }
Ejemplo n.º 7
0
 private static void SetWallpaper(Theme newTheme, RuntimeConfig rtc, System.Collections.Generic.ICollection <string> darkThemeWallpapers,
                                  System.Collections.Generic.ICollection <string> lightThemeWallpapers, bool enabled)
 {
     if (enabled)
     {
         if (newTheme == Theme.Dark)
         {
             var success = WallpaperHandler.SetBackground(darkThemeWallpapers);
             if (success)
             {
                 rtc.CurrentWallpaperTheme = newTheme;
             }
         }
         else
         {
             WallpaperHandler.SetBackground(lightThemeWallpapers);
             rtc.CurrentWallpaperTheme = newTheme;
         }
     }
 }
 /// <summary>
 /// Handles the switch for each of the available wallpaper type modes.
 /// </summary>
 /// <param name="type">The wallpaper type that is selected</param>
 /// <param name="newTheme">The new theme that is targeted to be set</param>
 private void HandleSwitchByType(WallpaperType type, Theme newTheme)
 {
     if (type == WallpaperType.Individual)
     {
         WallpaperHandler.SetWallpapers(Settings.Component.Monitors, Settings.Component.Position, newTheme);
         currentIndividualTheme = newTheme;
         currentGlobalTheme     = Theme.Unknown;
         currentSolidColorTheme = Theme.Unknown;
     }
     else if (type == WallpaperType.Global)
     {
         WallpaperHandler.SetGlobalWallpaper(Settings.Component.GlobalWallpaper, newTheme);
         currentGlobalTheme     = newTheme;
         currentIndividualTheme = Theme.Unknown;
         currentSolidColorTheme = Theme.Unknown;
     }
     else if (type == WallpaperType.All)
     {
         bool globalSwitched = false;
         if (currentGlobalTheme != newTheme)
         {
             WallpaperHandler.SetGlobalWallpaper(Settings.Component.GlobalWallpaper, newTheme);
             globalSwitched = true;
         }
         if (currentIndividualTheme != newTheme || globalSwitched)
         {
             WallpaperHandler.SetWallpapers(Settings.Component.Monitors, Settings.Component.Position, newTheme);
         }
         currentGlobalTheme     = newTheme;
         currentIndividualTheme = newTheme;
         currentSolidColorTheme = Theme.Unknown;
     }
     else if (type == WallpaperType.SolidColor)
     {
         WallpaperHandler.SetSolidColor(Settings.Component.SolidColors, newTheme);
         currentSolidColorTheme = newTheme;
         currentGlobalTheme     = Theme.Unknown;
         currentIndividualTheme = Theme.Unknown;
     }
 }
Ejemplo n.º 9
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var imageBuffer = await potd.GetImageBuffer();

                WallpaperHandler handler = new WallpaperHandler();

                var wallImage = await handler.saveToAppData(imageBuffer, potd.GetFileName());

                if (SaveImageCheckBox.IsChecked.Value)
                {
                    await handler.saveImageToPicturesLibrary(imageBuffer, potd.GetFileName());
                }
                var result = await handler.setWallpaper(wallImage);

                Debug.WriteLine("Result is " + result);
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception.Message);
            }
        }
Ejemplo n.º 10
0
        //private static readonly ComponentManager cm = ComponentManager.Instance();

        /// <summary>
        /// Parses a command message and invokes a callback function delegate for status reporting
        /// </summary>
        /// <param name="msg">list of messages to parse</param>
        /// <param name="SendResponse">Callback taking a string as parameter to report return values back to sender</param>
        /// <param name="service">Service class for invoking application exit</param>
        public static void Parse(List <string> msg, Action <string> SendResponse, Service service)
        {
            WaitForConfigUpdateCompletion();
            msg.ForEach(message =>
            {
                switch (message)
                {
                    #region Switch
                case Command.Switch:
                    Logger.Info("signal received: invoke theme switch");
                    //cm.ForceAll();
                    ThemeManager.TimedSwitch(builder, false);
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region Swap
                case Command.Swap:
                    Logger.Info("signal received: swap themes");
                    if (RegistryHandler.AppsUseLightTheme())
                    {
                        ThemeManager.SwitchTheme(builder.Config, Theme.Dark);
                    }
                    else
                    {
                        ThemeManager.SwitchTheme(builder.Config, Theme.Light);
                    }
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region AddAutoStart
                case Command.AddAutostart:
                    Logger.Info("signal received: add service to autostart");
                    bool regOk;
                    bool taskOk;
                    if (builder.Config.Tunable.UseLogonTask)
                    {
                        Logger.Debug("logon task mode selected");
                        regOk  = RegistryHandler.RemoveAutoStart();
                        taskOk = TaskSchdHandler.CreateLogonTask();
                    }
                    else
                    {
                        Logger.Debug("autostart mode selected");
                        taskOk = TaskSchdHandler.RemoveLogonTask();
                        regOk  = RegistryHandler.AddAutoStart();
                    }
                    if (regOk && taskOk)
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Ok
                        }.ToString());
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Err,
                            Message    = $"RegOk: {regOk}, TaskOk: {taskOk}"
                        }.ToString());
                    }
                    break;
                    #endregion

                    #region RemoveAutostart
                case Command.RemoveAutostart:
                    Logger.Info("signal received: remove service from autostart");
                    bool ok;
                    if (builder.Config.Tunable.UseLogonTask)
                    {
                        Logger.Debug("logon task mode selected");
                        ok = TaskSchdHandler.RemoveLogonTask();
                    }
                    else
                    {
                        Logger.Debug("autostart mode selected");
                        ok = RegistryHandler.RemoveAutoStart();
                    }
                    if (ok)
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Ok
                        }.ToString());
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Err
                        }.ToString());
                    }
                    break;
                    #endregion

                    #region LocationAccess
                case Command.LocationAccess:
                    Logger.Info("signal received: checking location access permissions");
                    Task <bool> geoTask = Task.Run(async() => await LocationHandler.HasPermission());
                    geoTask.Wait();
                    var result = geoTask.Result;
                    if (result)
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Ok
                        }.ToString());
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.NoLocAccess,
                            Message    = "location service needs to be enabled"
                        }.ToString());
                    }
                    break;
                    #endregion

                    #region GeoloatorIsUpdating
                case Command.GeolocatorIsUpdating:
                    Logger.Info("signal received: check if geolocator is busy");
                    if (state.GeolocatorIsUpdating)
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.InProgress
                        }.ToString());
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Ok
                        }.ToString());
                    }
                    break;
                    #endregion

                    #region CheckForUpdates
                case Command.CheckForUpdate:
                    Logger.Info("signal received: checking for update");
                    SendResponse(UpdateHandler.CheckNewVersion().ToString());
                    break;
                    #endregion

                    #region CheckForUpdateNotify
                case Command.CheckForUpdateNotify:
                    Logger.Info("signal received: checking for update and requesting notification");
                    ApiResponse updateCheckData = UpdateHandler.CheckNewVersion();
                    updateCheckData             = UpdateHandler.CanUseUpdater();
                    if (updateCheckData.StatusCode == StatusCode.New)
                    {
                        ToastHandler.InvokeUpdateToast();
                    }
                    else if (updateCheckData.StatusCode == StatusCode.UnsupportedOperation || updateCheckData.StatusCode == StatusCode.Disabled)
                    {
                        ToastHandler.InvokeUpdateToast(canUseUpdater: false);
                    }
                    SendResponse(updateCheckData.ToString());
                    break;
                    #endregion

                    #region Update
                case Command.Update:
                    Logger.Info("signal received: update adm");
                    if (!UpdateHandler.Updating)
                    {
                        ApiResponse response = UpdateHandler.CanUseUpdater();
                        if (response.StatusCode == StatusCode.New)
                        {
                            SendResponse(response.ToString());
                            // this is run sync, as such it will block the ZMQ thread!
                            _ = Task.Run(() => UpdateHandler.Update());
                        }
                        else
                        {
                            SendResponse(response.ToString());
                        }
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.InProgress,
                            Message    = "Update already in progress",
                            Details    = $"Download Progress: {UpdateHandler.Progress}"
                        }.ToString());
                    }
                    //_ = UpdateHandler.CheckNewVersion();

                    break;
                    #endregion

                    #region Shutdown
                case Command.Shutdown:
                    Logger.Info("signal received, exiting");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    service.Exit(null, null);
                    break;
                    #endregion

                    #region TestError
                case Command.TestError:
                    Logger.Info("signal received: test error");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Err
                    }.ToString());
                    break;
                    #endregion

                    #region Alive
                case Command.Alive:
                    Logger.Info("signal received: request for running status");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region Light
                case Command.Light:
                    Logger.Info("signal received: force light theme");
                    state.ForcedTheme = Theme.Light;
                    ThemeManager.SwitchTheme(builder.Config, Theme.Light);
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region Dark
                case Command.Dark:
                    Logger.Info("signal received: force dark theme");
                    state.ForcedTheme = Theme.Dark;
                    ThemeManager.SwitchTheme(builder.Config, Theme.Dark);
                    SendResponse(StatusCode.Ok);
                    break;
                    #endregion

                    #region NoForce
                case Command.NoForce:
                    Logger.Info("signal received: resetting forced modes");
                    state.ForcedTheme = Theme.Unknown;
                    ThemeManager.TimedSwitch(builder);
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region DetectMonitors
                case Command.DetectMonitors:
                    Logger.Info("signal received: detecting new monitors");
                    WallpaperHandler.DetectMonitors();
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region CleanMonitors
                case Command.CleanMonitors:
                    Logger.Info("signal received: removing disconnected monitors");
                    WallpaperHandler.CleanUpMonitors();
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region UpdateFailed
                case Command.UpdateFailed:
                    Logger.Info("signal received: notify about failed update");
                    ToastHandler.InvokeFailedUpdateToast();
                    SendResponse(StatusCode.Ok);
                    break;
                    #endregion

                    #region TestNotifications
                case Command.TestNotifications:
                    Logger.Info("signal received: test notifications");
                    ToastHandler.InvokeUpdateInProgressToast();
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                default:
                    Logger.Debug("unknown message received");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Err,
                        Message    = "requested command does not exist"
                    }.ToString());
                    break;
                }
            });
        }
 public override void EnableHook()
 {
     WallpaperHandler.DetectMonitors();
     currentWallpaperPosition = WallpaperHandler.GetPosition();
     base.EnableHook();
 }
Ejemplo n.º 12
0
        //private static readonly ComponentManager cm = ComponentManager.Instance();

        /// <summary>
        /// Parses a command message and invokes a callback function delegate for status reporting
        /// </summary>
        /// <param name="msg">list of messages to parse</param>
        /// <param name="SendResponse">Callback taking a string as parameter to report return values back to sender</param>
        /// <param name="service">Service class for invoking application exit</param>
        public static void Parse(List <string> msg, Action <string> SendResponse, Service service)
        {
            //WaitForConfigUpdateCompletion();
            _ = state.ConfigIsUpdatingWaitHandle.WaitOne();
            msg.ForEach(message =>
            {
                switch (message)
                {
                    #region Switch
                case Command.Switch:
                    Logger.Info("signal received: invoke theme switch");
                    //cm.ForceAll();
                    ThemeManager.TimedSwitch(builder, false);
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region Swap
                case Command.Swap:
                    Logger.Info("signal received: swap themes");
                    if (RegistryHandler.AppsUseLightTheme())
                    {
                        ThemeManager.SwitchTheme(builder.Config, Theme.Dark);
                    }
                    else
                    {
                        ThemeManager.SwitchTheme(builder.Config, Theme.Light);
                    }
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region AddAutoStart
                case Command.AddAutostart:
                    Logger.Info("signal received: add service to autostart");
                    SendResponse(AutoStartHandler.AddAutostart().ToString());
                    break;
                    #endregion

                    #region RemoveAutostart
                case Command.RemoveAutostart:
                    Logger.Info("signal received: remove service from autostart");
                    SendResponse(AutoStartHandler.RemoveAutostart().ToString());
                    break;
                    #endregion

                    #region GetAutostartState
                case Command.GetAutostartState:
                    Logger.Info("signal recevied: get autostart state");
                    SendResponse(AutoStartHandler.GetAutostartState().ToString());
                    break;
                    #endregion

                    #region ValidateAutostartAutostart
                case string s when s.StartsWith(Command.ValidateAutostart):
                    Logger.Info("signal received: validate autostart entries");
                    string[] split = s.Split(" ");
                    if (split.Length > 1)
                    {
                        SendResponse(AutoStartHandler.Validate(true).ToString());
                    }
                    else
                    {
                        SendResponse(AutoStartHandler.Validate(false).ToString());
                    }
                    break;
                    #endregion

                    #region LocationAccess
                case Command.LocationAccess:
                    Logger.Info("signal received: checking location access permissions");
                    Task <bool> geoTask = Task.Run(async() => await LocationHandler.HasLocation());
                    geoTask.Wait();
                    var result = geoTask.Result;
                    if (result)
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Ok
                        }.ToString());
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.NoLocAccess,
                            Message    = "location service needs to be enabled"
                        }.ToString());
                    }
                    break;
                    #endregion

                    #region GeoloatorIsUpdating
                case Command.GeolocatorIsUpdating:
                    Logger.Info("signal received: check if geolocator is busy");
                    if (state.GeolocatorIsUpdating)
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.InProgress
                        }.ToString());
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.Ok
                        }.ToString());
                    }
                    break;
                    #endregion

                    #region CheckForUpdates
                case Command.CheckForUpdate:
                    Logger.Info("signal received: checking for update");
                    SendResponse(UpdateHandler.CheckNewVersion().ToString());
                    break;
                    #endregion

                    #region CheckForUpdateNotify
                case Command.CheckForUpdateNotify:
                    Logger.Info("signal received: checking for update and requesting notification");
                    ApiResponse updateCheckData = UpdateHandler.CheckNewVersion();
                    updateCheckData             = UpdateHandler.CanUseUpdater();
                    if (updateCheckData.StatusCode == StatusCode.New)
                    {
                        ToastHandler.InvokeUpdateToast();
                    }
                    else if (updateCheckData.StatusCode == StatusCode.UnsupportedOperation || updateCheckData.StatusCode == StatusCode.Disabled)
                    {
                        ToastHandler.InvokeUpdateToast(canUseUpdater: false);
                    }
                    SendResponse(updateCheckData.ToString());
                    break;
                    #endregion

                    #region Update
                case Command.Update:
                    Logger.Info("signal received: update adm");
                    if (!UpdateHandler.Updating)
                    {
                        ApiResponse response = UpdateHandler.CanUseUpdater();
                        if (response.StatusCode == StatusCode.New)
                        {
                            SendResponse(response.ToString());
                            // this is run sync, as such it will block the ZMQ thread!
                            _ = Task.Run(() => UpdateHandler.Update());
                        }
                        else
                        {
                            SendResponse(response.ToString());
                        }
                    }
                    else
                    {
                        SendResponse(new ApiResponse()
                        {
                            StatusCode = StatusCode.InProgress,
                            Message    = "Update already in progress",
                            Details    = $"Download Progress: {UpdateHandler.Progress}"
                        }.ToString());
                    }
                    //_ = UpdateHandler.CheckNewVersion();

                    break;
                    #endregion

                    #region CheckForDowngradeNotify
                case Command.CheckForDowngradeNotify:
                    Logger.Info("signal received: checking for downgrade and requesting notification");
                    ApiResponse downgradeCheckData = UpdateHandler.CheckDowngrade();
                    updateCheckData = UpdateHandler.CanUseUpdater();
                    if (updateCheckData.StatusCode == StatusCode.Downgrade)
                    {
                        ToastHandler.InvokeUpdateToast(downgrade: true);
                    }
                    else if (updateCheckData.StatusCode == StatusCode.UnsupportedOperation || updateCheckData.StatusCode == StatusCode.Disabled)
                    {
                        ToastHandler.InvokeUpdateToast(downgrade: true, canUseUpdater: false);
                    }
                    SendResponse(updateCheckData.ToString());
                    break;
                    #endregion

                    #region Shutdown
                case Command.Shutdown:
                    Logger.Info("signal received, exiting");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    service.Exit(null, null);
                    break;
                    #endregion

                    #region TestError
                case Command.TestError:
                    Logger.Info("signal received: test error");
                    Thread.Sleep(5000);
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Err
                    }.ToString());
                    break;
                    #endregion

                    #region Alive
                case Command.Alive:
                    Logger.Info("signal received: request for running status");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region Light
                case Command.Light:
                    Logger.Info("signal received: force light theme");
                    state.ForcedTheme = Theme.Light;
                    ThemeHandler.EnforceNoMonitorUpdates(builder, state, Theme.Light);
                    ThemeManager.SwitchTheme(builder.Config, Theme.Light);
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region Dark
                case Command.Dark:
                    Logger.Info("signal received: force dark theme");
                    state.ForcedTheme = Theme.Dark;
                    ThemeHandler.EnforceNoMonitorUpdates(builder, state, Theme.Dark);
                    ThemeManager.SwitchTheme(builder.Config, Theme.Dark);
                    SendResponse(StatusCode.Ok);
                    break;
                    #endregion

                    #region NoForce
                case Command.NoForce:
                    Logger.Info("signal received: resetting forced modes");
                    state.ForcedTheme = Theme.Unknown;
                    ThemeManager.TimedSwitch(builder);
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region DetectMonitors
                case Command.DetectMonitors:
                    Logger.Info("signal received: detecting new monitors");
                    WallpaperHandler.DetectMonitors();
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region CleanMonitors
                case Command.CleanMonitors:
                    Logger.Info("signal received: removing disconnected monitors");
                    WallpaperHandler.CleanUpMonitors();
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region UpdateFailed
                case Command.UpdateFailed:
                    Logger.Info("signal received: notify about failed update");
                    ToastHandler.InvokeFailedUpdateToast();
                    SendResponse(StatusCode.Ok);
                    break;
                    #endregion

                    #region TestNotifications
                case Command.TestNotifications:
                    Logger.Info("signal received: test notifications");
                    ToastHandler.InvokeUpdateInProgressToast("TestVersion");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                    #region TestNotifications2
                case Command.TestNotifications2:
                    Logger.Info("signal received: test notifications");
                    //ToastHandler.InvokeUpdateToast(true, true);
                    //ToastHandler.RemoveUpdaterToast();
                    //ToastHandler.UpdateProgressToast("0.5", "test");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Ok
                    }.ToString());
                    break;
                    #endregion

                default:
                    Logger.Debug("unknown message received");
                    SendResponse(new ApiResponse()
                    {
                        StatusCode = StatusCode.Err,
                        Message    = "requested command does not exist"
                    }.ToString());
                    break;
                }
            });
        }
Ejemplo n.º 13
0
 public override void EnableHook()
 {
     WallpaperHandler.DetectMonitors();
     base.EnableHook();
 }