Fix plugin settings delete issue

This commit is contained in:
Jack251970 2025-03-06 19:43:16 +08:00
parent 7975ab5882
commit ce3a3e912a

View file

@ -72,15 +72,20 @@ namespace Flow.Launcher.Core.Plugin
{ {
foreach (var pluginPair in AllPlugins) foreach (var pluginPair in AllPlugins)
{ {
switch (pluginPair.Plugin) await DisposePluginAsync(pluginPair);
{ }
case IDisposable disposable: }
disposable.Dispose();
break; private static async Task DisposePluginAsync(PluginPair pluginPair)
case IAsyncDisposable asyncDisposable: {
await asyncDisposable.DisposeAsync(); switch (pluginPair.Plugin)
break; {
} case IDisposable disposable:
disposable.Dispose();
break;
case IAsyncDisposable asyncDisposable:
await asyncDisposable.DisposeAsync();
break;
} }
} }
@ -565,13 +570,25 @@ namespace Flow.Launcher.Core.Plugin
} }
} }
internal static void UninstallPlugin(PluginMetadata plugin, bool removePluginFromSettings, bool removePluginSettings, bool checkModified) internal static async void UninstallPlugin(PluginMetadata plugin, bool removePluginFromSettings, bool removePluginSettings, bool checkModified)
{ {
if (checkModified && PluginModified(plugin.ID)) if (checkModified && PluginModified(plugin.ID))
{ {
throw new ArgumentException($"Plugin {plugin.Name} has been modified"); throw new ArgumentException($"Plugin {plugin.Name} has been modified");
} }
if (removePluginFromSettings)
{
// If we want to remove plugin from AllPlugins,
// we need to dispose them so that they can release file handles
// which can help FL to delete the plugin settings & cache folders successfully
var pluginPairs = AllPlugins.FindAll(p => p.Metadata.ID == plugin.ID);
foreach (var pluginPair in pluginPairs)
{
await DisposePluginAsync(pluginPair);
}
}
if (removePluginSettings) if (removePluginSettings)
{ {
// For dotnet plugins, we need to remove their PluginJsonStorage instance // For dotnet plugins, we need to remove their PluginJsonStorage instance