private void ToggleEnable(AutoStartEntry autoStart, bool enable) { var task = TaskService.Instance.GetTask(autoStart.Path); if (task == null) { throw new InvalidOperationException($"Task {autoStart.Path} not found"); } if (task.Enabled == enable) { return; } task.Enabled = enable; var currentAutoStart = GetAutoStartEntry(task); LastAutoStartEntries.AddOrUpdate( autoStart.Path, (key) => { return(currentAutoStart); }, (key, oldValue) => { return(currentAutoStart); } ); if (enable) { EnableHandler(currentAutoStart); } else { DisableHandler(currentAutoStart); } }
private void CheckChanges() { Logger.Trace("CheckChanges called"); var currentAutoStarts = GetCurrentAutoStarts(); var currentAutoStartsDictionary = new Dictionary <string, AutoStartEntry>(); foreach (AutoStartEntry currentAutoStart in currentAutoStarts) { currentAutoStartsDictionary[currentAutoStart.Path] = currentAutoStart; } var autoStartsToRemove = new List <AutoStartEntry>(); foreach (var oldAutoStart in LastAutoStartEntries) { bool found = currentAutoStartsDictionary.TryGetValue(oldAutoStart.Key, out AutoStartEntry newAutoStartEntry); if (!found) { autoStartsToRemove.Add(oldAutoStart.Value); } } foreach (AutoStartEntry autoStartToRemove in autoStartsToRemove) { bool removed = LastAutoStartEntries.TryRemove(autoStartToRemove.Path, out AutoStartEntry removedAutoStartEntry); if (removed) { RemoveHandler(removedAutoStartEntry); } } foreach (AutoStartEntry currentAutoStart in currentAutoStarts) { bool found = LastAutoStartEntries.TryGetValue(currentAutoStart.Path, out AutoStartEntry oldAutoStart); if (!found) { bool added = LastAutoStartEntries.TryAdd(currentAutoStart.Path, currentAutoStart); if (added) { AddHandler(currentAutoStart); } continue; } if (oldAutoStart.Value != currentAutoStart.Value) { bool updated = LastAutoStartEntries.TryUpdate(currentAutoStart.Path, currentAutoStart, oldAutoStart); if (updated) { RemoveHandler(oldAutoStart); AddHandler(currentAutoStart); } continue; } bool wasEnabled = oldAutoStart.IsEnabled.GetValueOrDefault(true); bool nowEnabled = currentAutoStart.IsEnabled.GetValueOrDefault(true); if (wasEnabled != nowEnabled) { oldAutoStart.IsEnabled = nowEnabled; if (nowEnabled) { EnableHandler(currentAutoStart); } else { DisableHandler(currentAutoStart); } } } }