diff --git a/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs b/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs index 01a7ef96957..219e923a4ea 100644 --- a/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs +++ b/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs @@ -38,10 +38,10 @@ internal AbstractPluginEnvironment(List pluginMetadataList, Plug PluginSettings = pluginSettings; } - internal IEnumerable Setup() + internal IEnumerable> Setup() { if (!PluginMetadataList.Any(o => o.Language.Equals(Language, StringComparison.OrdinalIgnoreCase))) - return new List(); + return new List>(); if (!string.IsNullOrEmpty(PluginsSettingsFilePath) && FilesFolders.FileExists(PluginsSettingsFilePath)) { @@ -88,7 +88,7 @@ internal IEnumerable Setup() $"Not able to successfully set {EnvName} path, setting's plugin executable path variable is still an empty string.", $"{Language}Environment"); - return new List(); + return new List>(); } } @@ -107,9 +107,9 @@ private void EnsureLatestInstalled(string expectedPath, string currentPath, stri internal abstract PluginPair CreatePluginPair(string filePath, PluginMetadata metadata); - private IEnumerable SetPathForPluginPairs(string filePath, string languageToSet) + private IEnumerable> SetPathForPluginPairs(string filePath, string languageToSet) { - var tasks = new List(); + var tasks = new List>(); foreach (var metadata in PluginMetadataList) { diff --git a/Flow.Launcher.Core/Plugin/PluginsLoader.cs b/Flow.Launcher.Core/Plugin/PluginsLoader.cs index eff6336f088..94abc30421a 100644 --- a/Flow.Launcher.Core/Plugin/PluginsLoader.cs +++ b/Flow.Launcher.Core/Plugin/PluginsLoader.cs @@ -25,6 +25,25 @@ public static async Task> PluginsAsync(List met { var dotnetPlugins = DotNetPlugins(metadatas); + await Task.WhenAll(dotnetPlugins); + + if (!ErroredPlugins.IsEmpty) + { + var errorPluginString = String.Join(Environment.NewLine, ErroredPlugins); + + var errorMessage = "The following " + + (ErroredPlugins.Count > 1 ? "plugins have " : "plugin has ") + + "errored and cannot be loaded:"; + + _ = Task.Run(() => + { + MessageBox.Show($"{errorMessage}{Environment.NewLine}{Environment.NewLine}" + + $"{errorPluginString}{Environment.NewLine}{Environment.NewLine}" + + $"Please refer to the logs for more information", "", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + }); + } + var pythonEnv = new PythonEnvironment(metadatas, settings); var pythonV2Env = new PythonV2Environment(metadatas, settings); var tsEnv = new TypeScriptEnvironment(metadatas, settings); @@ -41,8 +60,7 @@ public static async Task> PluginsAsync(List met var executablePlugins = ExecutablePlugins(metadatas); var executableV2Plugins = ExecutableV2Plugins(metadatas); - var plugins = dotnetPlugins - .Concat(pythonPlugins) + var plugins = pythonPlugins .Concat(pythonV2Plugins) .Concat(tsPlugins) .Concat(jsPlugins) @@ -52,26 +70,9 @@ public static async Task> PluginsAsync(List met .Concat(executableV2Plugins) .ToList(); - await Task.WhenAll(plugins); - - if (!ErroredPlugins.IsEmpty) - { - var errorPluginString = String.Join(Environment.NewLine, ErroredPlugins); - - var errorMessage = "The following " - + (ErroredPlugins.Count > 1 ? "plugins have " : "plugin has ") - + "errored and cannot be loaded:"; - - _ = Task.Run(() => - { - MessageBox.Show($"{errorMessage}{Environment.NewLine}{Environment.NewLine}" + - $"{errorPluginString}{Environment.NewLine}{Environment.NewLine}" + - $"Please refer to the logs for more information", "", - MessageBoxButtons.OK, MessageBoxIcon.Warning); - }); - } + var pluginPairs = await Task.WhenAll(plugins); - return Plugins.ToList(); + return Plugins.Concat(pluginPairs).ToList(); } public static IEnumerable DotNetPlugins(List source) @@ -132,7 +133,7 @@ public static IEnumerable DotNetPlugins(List source) })); } - public static IEnumerable ExecutablePlugins(IEnumerable source) + public static IEnumerable> ExecutablePlugins(IEnumerable source) { return source .Where(o => o.Language.Equals(AllowedLanguage.Executable, StringComparison.OrdinalIgnoreCase)) @@ -146,7 +147,7 @@ public static IEnumerable ExecutablePlugins(IEnumerable so })); } - public static IEnumerable ExecutableV2Plugins(IEnumerable source) + public static IEnumerable> ExecutableV2Plugins(IEnumerable source) { return source .Where(o => o.Language.Equals(AllowedLanguage.ExecutableV2, StringComparison.OrdinalIgnoreCase))