コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }