From 4205db293e701c1fd66f7099d2d0f774f609de8f Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Thu, 25 Jun 2020 03:40:29 +0300 Subject: [PATCH] refactor Core.Plugin.PluginManager --- Flow.Launcher.Core/Plugin/PluginManager.cs | 71 +++++++--------------- 1 file changed, 23 insertions(+), 48 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index b92226ccd..5cde9de83 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -19,10 +19,6 @@ namespace Flow.Launcher.Core.Plugin { private static IEnumerable _contextMenuPlugins; - /// - /// Directories that will hold Flow Launcher plugin directory - /// - public static List AllPlugins { get; private set; } public static readonly List GlobalPlugins = new List(); public static readonly Dictionary NonGlobalPlugins = new Dictionary(); @@ -32,27 +28,18 @@ namespace Flow.Launcher.Core.Plugin // todo happlebao, this should not be public, the indicator function should be embeded public static PluginsSettings Settings; private static List _metadatas; - private static readonly string[] Directories = { Constant.PreinstalledDirectory, DataLocation.PluginsDirectory }; - private static void ValidateUserDirectory() - { - if (!Directory.Exists(DataLocation.PluginsDirectory)) - { - Directory.CreateDirectory(DataLocation.PluginsDirectory); - } - } + /// + /// Directories that will hold Flow Launcher plugin directory + /// + private static readonly string[] Directories = { Constant.PreinstalledDirectory, DataLocation.PluginsDirectory }; private static void DeletePythonBinding() { const string binding = "flowlauncher.py"; - var directory = DataLocation.PluginsDirectory; - foreach (var subDirectory in Directory.GetDirectories(directory)) + foreach (var subDirectory in Directory.GetDirectories(DataLocation.PluginsDirectory)) { - var path = Path.Combine(subDirectory, binding); - if (File.Exists(path)) - { - File.Delete(path); - } + File.Delete(Path.Combine(subDirectory, binding)); } } @@ -76,7 +63,8 @@ namespace Flow.Launcher.Core.Plugin static PluginManager() { - ValidateUserDirectory(); + // validate user directory + Directory.CreateDirectory(DataLocation.PluginsDirectory); // force old plugins use new python binding DeletePythonBinding(); } @@ -132,9 +120,10 @@ namespace Flow.Launcher.Core.Plugin GlobalPlugins.Add(plugin); // Plugins may have multiple ActionKeywords, eg. WebSearch - plugin.Metadata.ActionKeywords.Where(x => x != Query.GlobalPluginWildcardSign) - .ToList() - .ForEach(x => NonGlobalPlugins[x] = plugin); + plugin.Metadata.ActionKeywords + .Where(x => x != Query.GlobalPluginWildcardSign) + .ToList() + .ForEach(x => NonGlobalPlugins[x] = plugin); } if (failedPlugins.Any()) @@ -164,9 +153,9 @@ namespace Flow.Launcher.Core.Plugin public static List QueryForPlugin(PluginPair pair, Query query) { + var results = new List(); try { - List results = null; var metadata = pair.Metadata; var milliseconds = Stopwatch.Debug($"|PluginManager.QueryForPlugin|Cost for {metadata.Name}", () => { @@ -175,13 +164,12 @@ namespace Flow.Launcher.Core.Plugin }); metadata.QueryCount += 1; metadata.AvgQueryTime = metadata.QueryCount == 1 ? milliseconds : (metadata.AvgQueryTime + milliseconds) / 2; - return results; } catch (Exception e) { Log.Exception($"|PluginManager.QueryForPlugin|Exception for plugin <{pair.Metadata.Name}> when query <{query}>", e); - return new List(); } + return results; } public static void UpdatePluginMetadata(List results, PluginMetadata metadata, Query query) @@ -221,47 +209,34 @@ namespace Flow.Launcher.Core.Plugin public static List GetContextMenusForPlugin(Result result) { + var results = new List(); var pluginPair = _contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID); if (pluginPair != null) { - var metadata = pluginPair.Metadata; var plugin = (IContextMenu)pluginPair.Plugin; try { - var results = plugin.LoadContextMenus(result); + results = plugin.LoadContextMenus(result); foreach (var r in results) { - r.PluginDirectory = metadata.PluginDirectory; - r.PluginID = metadata.ID; + r.PluginDirectory = pluginPair.Metadata.PluginDirectory; + r.PluginID = pluginPair.Metadata.ID; r.OriginQuery = result.OriginQuery; } - return results; } catch (Exception e) { - Log.Exception($"|PluginManager.GetContextMenusForPlugin|Can't load context menus for plugin <{metadata.Name}>", e); - return new List(); + Log.Exception($"|PluginManager.GetContextMenusForPlugin|Can't load context menus for plugin <{pluginPair.Metadata.Name}>", e); } } - else - { - return new List(); - } - + return results; } public static bool ActionKeywordRegistered(string actionKeyword) { - if (actionKeyword != Query.GlobalPluginWildcardSign && - NonGlobalPlugins.ContainsKey(actionKeyword)) - { - return true; - } - else - { - return false; - } + return actionKeyword != Query.GlobalPluginWildcardSign + && NonGlobalPlugins.ContainsKey(actionKeyword); } /// @@ -299,7 +274,7 @@ namespace Flow.Launcher.Core.Plugin GlobalPlugins.Remove(plugin); } - if(oldActionkeyword != Query.GlobalPluginWildcardSign) + if (oldActionkeyword != Query.GlobalPluginWildcardSign) NonGlobalPlugins.Remove(oldActionkeyword);