From b85b2ec30ab55f89f0a1a17ecc72c1bc0d7b3919 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 6 Jul 2025 16:45:44 +0800 Subject: [PATCH 1/3] Remove plugins from global & non-global plugins when they are removed from settings --- Flow.Launcher.Core/Plugin/PluginManager.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index 6ad29983a17..f4c2058a7d3 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -700,6 +700,14 @@ internal static async Task UninstallPluginAsync(PluginMetadata plugin, bool remo } Settings.RemovePluginSettings(plugin.ID); AllPlugins.RemoveAll(p => p.Metadata.ID == plugin.ID); + foreach (var globalPlugin in GlobalPlugins.Where(p => p.Metadata.ID == plugin.ID)) + { + GlobalPlugins.Remove(globalPlugin); + } + foreach (var key in NonGlobalPlugins.Where(p => p.Value.Metadata.ID == plugin.ID).Select(p => p.Key)) + { + NonGlobalPlugins.Remove(key); + } } // Marked for deletion. Will be deleted on next start up From 53174091d68f12547fbc101066c720d5e6c0ff97 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 6 Jul 2025 16:52:26 +0800 Subject: [PATCH 2/3] Use remove where for code quality --- Flow.Launcher.Core/Plugin/PluginManager.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index f4c2058a7d3..e81f16ede19 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -700,10 +700,7 @@ internal static async Task UninstallPluginAsync(PluginMetadata plugin, bool remo } Settings.RemovePluginSettings(plugin.ID); AllPlugins.RemoveAll(p => p.Metadata.ID == plugin.ID); - foreach (var globalPlugin in GlobalPlugins.Where(p => p.Metadata.ID == plugin.ID)) - { - GlobalPlugins.Remove(globalPlugin); - } + GlobalPlugins.RemoveWhere(p => p.Metadata.ID == plugin.ID); foreach (var key in NonGlobalPlugins.Where(p => p.Value.Metadata.ID == plugin.ID).Select(p => p.Key)) { NonGlobalPlugins.Remove(key); From 63aca6ea37115a506ff24824d4f856f93364c744 Mon Sep 17 00:00:00 2001 From: Jack Ye <1160210343@qq.com> Date: Sun, 6 Jul 2025 16:54:04 +0800 Subject: [PATCH 3/3] Fix possible invalid operation Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Flow.Launcher.Core/Plugin/PluginManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index e81f16ede19..311eb4a1102 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -701,7 +701,8 @@ internal static async Task UninstallPluginAsync(PluginMetadata plugin, bool remo Settings.RemovePluginSettings(plugin.ID); AllPlugins.RemoveAll(p => p.Metadata.ID == plugin.ID); GlobalPlugins.RemoveWhere(p => p.Metadata.ID == plugin.ID); - foreach (var key in NonGlobalPlugins.Where(p => p.Value.Metadata.ID == plugin.ID).Select(p => p.Key)) + var keysToRemove = NonGlobalPlugins.Where(p => p.Value.Metadata.ID == plugin.ID).Select(p => p.Key).ToList(); + foreach (var key in keysToRemove) { NonGlobalPlugins.Remove(key); }