public RootViewModel(IViewModelFactory viewModelFactory, DialogManager dialogManager, SettingsService settingsService, UpdateService updateService, GammaService gammaService, HotKeyService hotKeyService, RegistryService registryService, ExternalApplicationService externalApplicationService, SystemEventService systemEventService) { _viewModelFactory = viewModelFactory; _dialogManager = dialogManager; _settingsService = settingsService; _updateService = updateService; _gammaService = gammaService; _hotKeyService = hotKeyService; _registryService = registryService; _externalApplicationService = externalApplicationService; _systemEventService = systemEventService; // Title DisplayName = $"{App.Name} v{App.VersionString}"; // Cancel 'disable temporarily' when switched on this.Bind(o => o.IsEnabled, (sender, args) => { if (IsEnabled) { _enableAfterDelayTimer.Stop(); } }); // Initialize timers _updateConfigurationTimer = new AutoResetTimer(UpdateConfiguration); _updateInstantTimer = new AutoResetTimer(UpdateInstant); _updateIsPausedTimer = new AutoResetTimer(UpdateIsPaused); _checkForUpdatesTimer = new AutoResetTimer(async() => await _updateService.CheckPrepareUpdateAsync()); _pollingTimer = new AutoResetTimer(PollGamma); _enableAfterDelayTimer = new ManualResetTimer(Enable); // Reset gamma when power settings change _systemEventService.DisplayStateChanged += (sender, args) => InvalidateGamma(); SystemEvents.DisplaySettingsChanging += (sender, args) => InvalidateGamma(); SystemEvents.DisplaySettingsChanged += (sender, args) => InvalidateGamma(); }
public CoreViewModel( SettingsService settingsService, GammaService gammaService, HotKeyService hotKeyService, ExternalApplicationService externalApplicationService) { _settingsService = settingsService; _gammaService = gammaService; _hotKeyService = hotKeyService; _externalApplicationService = externalApplicationService; _updateConfigurationTimer = new AutoResetTimer(UpdateConfiguration); _updateInstantTimer = new AutoResetTimer(UpdateInstant); _updateIsPausedTimer = new AutoResetTimer(UpdateIsPaused); _pollingTimer = new AutoResetTimer(PollGamma); _enableAfterDelayTimer = new ManualResetTimer(Enable); // Cancel 'disable temporarily' when switched to enabled this.Bind(o => o.IsEnabled, (sender, args) => { if (IsEnabled) { _enableAfterDelayTimer.Stop(); } }); // Handle settings changes _settingsService.SettingsSaved += (sender, args) => { _isStale = true; Refresh(); RegisterHotKeys(); }; // Handle display settings changes _systemEvents.DisplaySettingsChanged += (sender, args) => _isStale = true; _systemEvents.DisplayStateChanged += (sender, args) => _isStale = true; }
public RootViewModel(IEventAggregator eventAggregator, IViewModelFactory viewModelFactory, SettingsService settingsService, UpdateService updateService, CalculationService calculationService, LocationService locationService, WinApiService winApiService) { _settingsService = settingsService; _calculationService = calculationService; _winApiService = winApiService; // Handle messages eventAggregator.Subscribe(this); // Initialize view models GeneralSettings = viewModelFactory.CreateGeneralSettingsViewModel(); LocationSettings = viewModelFactory.CreateLocationSettingsViewModel(); AdvancedSettings = viewModelFactory.CreateAdvancedSettingsViewModel(); // When IsEnabled switches to 'true' - cancel 'disable temporarily' this.Bind(o => o.IsEnabled, (sender, args) => { if (IsEnabled) { _enableAfterDelayTimer.Stop(); } }); // Initialize timers _updateTimer = new AutoResetTimer(() => { UpdateIsPaused(); UpdateInstant(); UpdateGamma(); }); _settingsAutoSaveTimer = new AutoResetTimer(() => _settingsService.SaveIfNeeded()); _internetSyncTimer = new AutoResetTimer(async() => { if (!_settingsService.IsInternetSyncEnabled) { return; } // TODO: rework later var location = await locationService.GetLocationAsync(); if (_settingsService.IsInternetSyncEnabled) { _settingsService.Location = location; var date = DateTimeOffset.Now; _settingsService.SunriseTime = _calculationService.CalculateSunrise(location, date).TimeOfDay; _settingsService.SunsetTime = _calculationService.CalculateSunset(location, date).TimeOfDay; } }); _checkForUpdatesTimer = new AutoResetTimer(async() => { IsUpdateAvailable = await updateService.CheckForUpdatesAsync(); }); _enableAfterDelayTimer = new ManualResetTimer(Enable); }