diff --git a/src/modules/launcher/PowerLauncher/SettingsWatcher.cs b/src/modules/launcher/PowerLauncher/SettingsWatcher.cs index 3c8deb5b17..68641213cc 100644 --- a/src/modules/launcher/PowerLauncher/SettingsWatcher.cs +++ b/src/modules/launcher/PowerLauncher/SettingsWatcher.cs @@ -75,10 +75,10 @@ namespace PowerLauncher var overloadSettings = _settingsUtils.GetSettingsOrDefault(PowerLauncherSettings.ModuleName); - if (overloadSettings.Plugins == null || !overloadSettings.Plugins.Any()) + if (overloadSettings.Plugins == null || overloadSettings.Plugins.Count() != PluginManager.AllPlugins.Count) { // Needed to be consistent with old settings - overloadSettings.Plugins = GetDefaultPluginsSettings(); + overloadSettings.Plugins = CombineWithDefaultSettings(overloadSettings.Plugins); _settingsUtils.SaveSettings(overloadSettings.ToJsonString(), PowerLauncherSettings.ModuleName); } else @@ -173,6 +173,20 @@ namespace PowerLauncher return model.ToString(); } + private static List CombineWithDefaultSettings(IEnumerable plugins) + { + var results = GetDefaultPluginsSettings().ToDictionary(x => x.Id); + foreach (var plugin in plugins) + { + if (results.ContainsKey(plugin.Id)) + { + results[plugin.Id] = plugin; + } + } + + return results.Values.ToList(); + } + private static IEnumerable GetDefaultPluginsSettings() { return PluginManager.AllPlugins.Select(x => new PowerLauncherPluginSettings()