public static AsyncObservableCollection <Process> UpdateProcesses(
            ProxifierSettings guiModelData,
            ProxifierSettings settings)
        {
            var systemProcessList = System.Diagnostics.Process.GetProcesses().OrderBy(x => x.ProcessName).ToList();
            var systemProcessIds  = systemProcessList.Select(p => p.Id).ToList();
            var finishedProcesses = guiModelData.ProcessesList
                                    .Where(process => !systemProcessIds.Contains(process.Pid))
                                    .ToList();

            if (finishedProcesses.Any())
            {
                SettingsManager.SaveSettings(guiModelData, settings);
            }

            foreach (var process in finishedProcesses)
            {
                guiModelData.ProcessesList.Remove(process);
            }

            var guiProcessIds      = guiModelData.ProcessesList.Select(process => process.Pid).ToList();
            var newSystemProcesses = systemProcessList.Where(process => !guiProcessIds.Contains(process.Id)).ToList();

            foreach (var systemProcess in newSystemProcesses)
            {
                var path = systemProcess.GetPath();
                if (string.IsNullOrWhiteSpace(path)) // TODO: improve
                {
                    continue;
                }

                var newProcess = new Process
                {
                    Name = systemProcess.ProcessName,
                    Pid  = systemProcess.Id,
                    Path = path
                };

                var settingsProcess = settings.ActiveProcessesList
                                      .FirstOrDefault(x => x.Path.Equals(path, StringComparison.InvariantCultureIgnoreCase));
                if (settingsProcess != null)
                {
                    newProcess.IsEnabled  = settingsProcess.IsEnabled;
                    newProcess.ServerInfo = new ServerInfo
                    {
                        ServerIP   = settingsProcess.ServerInfo.ServerIP,
                        ServerPort = settingsProcess.ServerInfo.ServerPort,
                        ServerType = settingsProcess.ServerInfo.ServerType
                    };
                }

                guiModelData.ProcessesList.Add(newProcess);
            }

            return(guiModelData.ProcessesList);
        }
 private void setupData()
 {
     GuiModelData = new ProxifierSettings
     {
         RoutedConnectionsList = new AsyncObservableCollection <RoutedConnection>(),
         ProcessesList         = new AsyncObservableCollection <Process>()
     };
     GuiModelData.PropertyChanged      += guiModelDataPropertyChanged;
     GuiModelData.ProcessesListDataView = CollectionViewSource.GetDefaultView(GuiModelData.ProcessesList);
 }
        public static ProxifierSettings LoadSettings(ProxifierSettings guiModelData)
        {
            var settings = SettingsSerializer.LoadSettings(SettingsPath);

            guiModelData.ProxifierPort = settings.ProxifierPort;
            guiModelData.DefaultServerInfo.ServerIP   = settings.DefaultServerInfo.ServerIP;
            guiModelData.DefaultServerInfo.ServerPort = settings.DefaultServerInfo.ServerPort;
            guiModelData.DefaultServerInfo.ServerType = settings.DefaultServerInfo.ServerType;
            guiModelData.RunOnStartup  = settings.RunOnStartup;
            guiModelData.AreAllChecked = settings.AreAllChecked;
            return(settings);
        }
        public static void SaveSettings(ProxifierSettings guiModelData, ProxifierSettings settings)
        {
            if (guiModelData.RunOnStartup)
            {
                RunOnWindowsStartup.Do();
            }
            else
            {
                RunOnWindowsStartup.Undo();
            }

            addNewActiveItems(guiModelData, settings);
            SettingsSerializer.SaveSettings(guiModelData, SettingsPath);
        }
        private static void addNewActiveItems(ProxifierSettings guiModelData, ProxifierSettings settings)
        {
            foreach (var process in guiModelData.ProcessesList)
            {
                if (!process.IsEnabled && string.IsNullOrWhiteSpace(process.ServerInfo.ServerIP) &&
                    process.ServerInfo.ServerPort == 0)
                {
                    continue;
                }

                if (!settings.ActiveProcessesList.Contains(process))
                {
                    settings.ActiveProcessesList.Add(process);
                }

                if (!guiModelData.ActiveProcessesList.Contains(process))
                {
                    guiModelData.ActiveProcessesList.Add(process);
                }
            }
        }
 public static void SaveSettings(ProxifierSettings data, string configFilePath)
 {
     File.WriteAllText(configFilePath, JsonConvert.SerializeObject(data, new JsonSerializerSettings {
         Formatting = Formatting.Indented
     }));
 }
 private void loadSettings()
 {
     _settings = SettingsManager.LoadSettings(GuiModelData);
 }