public PageTime() { try { builder.Load(); builder.LoadLocationData(); } catch (Exception ex) { ShowErrorMessage(ex); } InitializeComponent(); if (builder.Config.AutoThemeSwitchingEnabled) { autoCheckBox.IsChecked = true; } if (builder.Config.Location.Enabled) { ActivateLocationMode(); RadioButtonLocationTimes.IsChecked = true; } else { applyButton.IsEnabled = false; if (Properties.Settings.Default.AlterTime) { darkStartBox.Text = builder.Config.Sunset.ToString("hh", CultureInfo.InvariantCulture); lightStartBox.Text = builder.Config.Sunrise.ToString("hh", CultureInfo.InvariantCulture); } else { darkStartBox.Text = builder.Config.Sunset.ToString("HH", CultureInfo.InvariantCulture); lightStartBox.Text = builder.Config.Sunrise.ToString("HH", CultureInfo.InvariantCulture); } DarkStartMinutesBox.Text = builder.Config.Sunset.ToString("mm", CultureInfo.InvariantCulture); LightStartMinutesBox.Text = builder.Config.Sunrise.ToString("mm", CultureInfo.InvariantCulture); } InitOffset(); if (Settings.Default.AlterTime) { AlterTime(true); } init = false; }
private void OnChangedLocationData(object source, FileSystemEventArgs e) { try { builder.LoadLocationData(); Logger.Debug("updated location data file"); } catch (Exception ex) { Logger.Debug(ex, "location data file locked, cannot load"); } }
public PageTime() { //read config file try { builder.Load(); builder.LoadLocationData(); } catch (Exception ex) { ShowErrorMessage(ex); } //initialize ui components InitializeComponent(); //enable 12 hour clock: if (Properties.Settings.Default.AlterTime) { TimePickerDark.Culture = CultureInfo.CreateSpecificCulture("en"); TimePickerLight.Culture = CultureInfo.CreateSpecificCulture("en"); } //enable 24 hour clock: else { TimePickerDark.Culture = CultureInfo.CreateSpecificCulture("de"); TimePickerLight.Culture = CultureInfo.CreateSpecificCulture("de"); } //read datetime from config file TimePickerDark.SelectedDateTime = builder.Config.Sunset; TimePickerLight.SelectedDateTime = builder.Config.Sunrise; //read offset from config file NumberBoxOffsetLight.Value = Convert.ToDouble(builder.Config.Location.SunriseOffsetMin); NumberboxOffsetDark.Value = Convert.ToDouble(builder.Config.Location.SunsetOffsetMin); //read coordinates from config file NumberBoxLat.Text = builder.Config.Location.CustomLat.ToString(); NumberBoxLon.Text = builder.Config.Location.CustomLon.ToString(); //tick correct radio button and prepare UI //is auto theme switch enabled? //disabled if (!builder.Config.AutoThemeSwitchingEnabled) { DisableTimeBasedSwitch(); TogglePanelVisibility(true, false, false, false); RadioButtonDisabled.IsChecked = true; } //enabled else { //is custom timepicker input enabled? if (!builder.Config.Location.Enabled) { RadioButtonCustomTimes.IsChecked = true; TogglePanelVisibility(true, false, false, false); applyButton.IsEnabled = false; } //is location mode enabled? if (builder.Config.Location.Enabled) { //windows location service if (builder.Config.Location.UseGeolocatorService) { TogglePanelVisibility(false, true, true, false); ActivateLocationModeWrapper(); RadioButtonLocationTimes.IsChecked = true; } //custom geographic coordinates else { RadioButtonCoordinateTimes.IsChecked = true; TogglePanelVisibility(false, true, true, true); ActivateLocationModeWrapper(); } } } init = false; }
static void Main(string[] args) { try { //Set up Logger var config = new NLog.Config.LoggingConfiguration(); var configDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "AutoDarkMode"); // Targets where to log to: File and Console var logfile = new NLog.Targets.FileTarget("logfile") { FileName = Path.Combine(configDir, "service.log"), Layout = @"${date:format=yyyy-MM-dd HH\:mm\:ss} | ${level} | " + "${callsite:includeNamespace=False:" + "cleanNamesOfAnonymousDelegates=true:" + "cleanNamesOfAsyncContinuations=true}: ${message} ${exception:separator=|}" }; var logconsole = new NLog.Targets.ColoredConsoleTarget("logconsole") { Layout = @"${date:format=yyyy-MM-dd HH\:mm\:ss} | ${level} | " + "${callsite:includeNamespace=False:" + "cleanNamesOfAnonymousDelegates=true:" + "cleanNamesOfAsyncContinuations=true}: ${message} ${exception:separator=|}" }; List <string> argsList; if (args.Length > 0) { argsList = new List <string>(args); } else { argsList = new List <string>(); } // Rules for mapping loggers to targets config.AddRule(LogLevel.Debug, LogLevel.Fatal, logconsole); if (argsList.Contains("/debug")) { config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile); } else { config.AddRule(LogLevel.Info, LogLevel.Fatal, logfile); } // Apply config LogManager.Configuration = config; try { Directory.CreateDirectory(configDir); } catch (Exception e) { Logger.Fatal(e, "could not create config directory"); } try { if (!mutex.WaitOne(TimeSpan.FromSeconds(2), false)) { Logger.Debug("app instance already open"); return; } } catch (Exception ex) { Logger.Error(ex, "failed getting mutex, " + ex.Message); return; } //Instantiate Runtime config GlobalState.Instance(); //Populate configuration AdmConfigBuilder Builder = AdmConfigBuilder.Instance(); try { Builder.Load(); Builder.LoadLocationData(); Logger.Debug("config builder instantiated and configuration loaded"); } catch (Exception e) { Logger.Fatal(e, "could not read config file. shutting down application!"); LogManager.Shutdown(); Environment.Exit(-1); } if (Builder.Config.Tunable.Debug && !argsList.Contains("/debug")) { config = new NLog.Config.LoggingConfiguration(); config.AddRule(LogLevel.Debug, LogLevel.Fatal, logconsole); config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile); LogManager.Configuration = config; } Logger.Debug("config file loaded"); //if a path is set to null, set it to the currently actvie theme for convenience reasons bool configUpdateNeeded = false; if (!Builder.Config.ClassicMode) { if (!File.Exists(Builder.Config.DarkThemePath) || Builder.Config.DarkThemePath == null) { Builder.Config.DarkThemePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Microsoft\Windows\Themes", ThemeHandler.GetCurrentThemeName() + ".theme"); configUpdateNeeded = true; } if (!File.Exists(Builder.Config.DarkThemePath) || Builder.Config.LightThemePath == null) { Builder.Config.LightThemePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Microsoft\Windows\Themes", ThemeHandler.GetCurrentThemeName() + ".theme"); configUpdateNeeded = true; } if (configUpdateNeeded) { Logger.Warn("one or more theme paths not set at program start, reinstantiation needed"); try { Builder.Save(); } catch (Exception ex) { Logger.Error(ex, "couldn't save configuration file"); } } } int timerMillis = 0; if (args.Length != 0) { int.TryParse(args[0], out timerMillis); } timerMillis = (timerMillis == 0) ? TimerFrequency.Short : timerMillis; Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Service = new Service(timerMillis); Application.Run(Service); } finally { //clean shutdown if (Service != null) { Service.Cleanup(); } mutex.Dispose(); } }