From 818802cf5e63928b0e9db2e22e947e35b0aadc26 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 18:52:34 +0000 Subject: [PATCH] Refactoring GetPlugins() --- Wox.Core/Plugin/PluginManager.cs | 30 +++++++++--------------------- Wox.Core/UI/ResourceMerger.cs | 6 +++--- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index aa26b9f78c..ec8aa7de1e 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -23,9 +23,9 @@ namespace Wox.Core.Plugin { public const string DirectoryName = "Plugins"; private static List pluginMetadatas; - private static List instantSearches; + private static IEnumerable instantSearches; private static IEnumerable exclusiveSearchPlugins; - private static List contextMenuPlugins; + private static IEnumerable contextMenuPlugins; private static List plugins; /// @@ -203,7 +203,7 @@ namespace Wox.Core.Plugin public static bool IsInstantQuery(string query) { - return GetInstantSearchesPlugins().Any(o => ((IInstantQuery)o).IsInstantQuery(query)); + return GetInstantSearchesPlugins().Any(o => ((IInstantQuery)o.Plugin).IsInstantQuery(query)); } private static bool IsInstantSearchPlugin(PluginMetadata pluginMetadata) @@ -213,9 +213,9 @@ namespace Wox.Core.Plugin GetInstantSearchesPlugins().Any(o => o.Metadata.ID == pluginMetadata.ID); } - private static List GetInstantSearchesPlugins() + private static IEnumerable GetInstantSearchesPlugins() { - instantSearches = instantSearches ?? GetPlugin(); + instantSearches = instantSearches ?? GetPlugins(); return instantSearches; } @@ -229,26 +229,14 @@ namespace Wox.Core.Plugin return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id); } - public static List GetPlugin() where T : class + public static IEnumerable GetPlugins() where T : class { - var results = new List(); - foreach (var pluginPair in AllPlugins) - { - //need to load types from AllPlugins - //PluginInitContext is only available in this instance - T type = pluginPair.Plugin as T; - if (type != null) - { - results.Add(pluginPair); - } - } - return results; + return from p in AllPlugins where p.Plugin is T select p; } private static PluginPair GetExclusivePlugin(Query query) { - exclusiveSearchPlugins = exclusiveSearchPlugins ?? - AllPlugins.Where(p => p.Plugin.GetType().GetInterfaces().Contains(typeof(IExclusiveQuery))); + exclusiveSearchPlugins = exclusiveSearchPlugins ?? GetPlugins(); var plugin = exclusiveSearchPlugins.FirstOrDefault(p => ((IExclusiveQuery)p.Plugin).IsExclusiveQuery(query)); return plugin; } @@ -272,7 +260,7 @@ namespace Wox.Core.Plugin public static List GetPluginContextMenus(Result result) { - contextMenuPlugins = contextMenuPlugins ?? GetPlugin(); + contextMenuPlugins = contextMenuPlugins ?? GetPlugins(); var pluginPair = contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID); var plugin = (IContextMenu)pluginPair?.Plugin; diff --git a/Wox.Core/UI/ResourceMerger.cs b/Wox.Core/UI/ResourceMerger.cs index c9a22493f5..0e73a502ef 100644 --- a/Wox.Core/UI/ResourceMerger.cs +++ b/Wox.Core/UI/ResourceMerger.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Windows; using Wox.Core.i18n; using Wox.Core.Plugin; +using Wox.Infrastructure; using Wox.Plugin; namespace Wox.Core.UI @@ -39,9 +40,8 @@ namespace Wox.Core.UI internal static void ApplyPluginLanguages() { RemoveResource(PluginManager.DirectoryName); - foreach (var languageFile in (PluginManager.AllPlugins.Select(p => p.Plugin). - Where(plugin => plugin.GetType().GetInterfaces().Contains(typeof(IPluginI18n))). - Select(plugin => InternationalizationManager.Instance.GetLanguageFile(((IPluginI18n)plugin).GetLanguagesFolder())). + foreach (var languageFile in (PluginManager.GetPlugins(). + Select(plugin => InternationalizationManager.Instance.GetLanguageFile(((IPluginI18n)plugin.Plugin).GetLanguagesFolder())). Where(file => !string.IsNullOrEmpty(file)))) { Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary