mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-09 12:46:47 +02:00
Refactoring GetPlugins<T>()
This commit is contained in:
@@ -23,9 +23,9 @@ namespace Wox.Core.Plugin
|
|||||||
{
|
{
|
||||||
public const string DirectoryName = "Plugins";
|
public const string DirectoryName = "Plugins";
|
||||||
private static List<PluginMetadata> pluginMetadatas;
|
private static List<PluginMetadata> pluginMetadatas;
|
||||||
private static List<PluginPair> instantSearches;
|
private static IEnumerable<PluginPair> instantSearches;
|
||||||
private static IEnumerable<PluginPair> exclusiveSearchPlugins;
|
private static IEnumerable<PluginPair> exclusiveSearchPlugins;
|
||||||
private static List<PluginPair> contextMenuPlugins;
|
private static IEnumerable<PluginPair> contextMenuPlugins;
|
||||||
private static List<PluginPair> plugins;
|
private static List<PluginPair> plugins;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -203,7 +203,7 @@ namespace Wox.Core.Plugin
|
|||||||
|
|
||||||
public static bool IsInstantQuery(string query)
|
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)
|
private static bool IsInstantSearchPlugin(PluginMetadata pluginMetadata)
|
||||||
@@ -213,9 +213,9 @@ namespace Wox.Core.Plugin
|
|||||||
GetInstantSearchesPlugins().Any(o => o.Metadata.ID == pluginMetadata.ID);
|
GetInstantSearchesPlugins().Any(o => o.Metadata.ID == pluginMetadata.ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<PluginPair> GetInstantSearchesPlugins()
|
private static IEnumerable<PluginPair> GetInstantSearchesPlugins()
|
||||||
{
|
{
|
||||||
instantSearches = instantSearches ?? GetPlugin<IInstantQuery>();
|
instantSearches = instantSearches ?? GetPlugins<IInstantQuery>();
|
||||||
return instantSearches;
|
return instantSearches;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,26 +229,14 @@ namespace Wox.Core.Plugin
|
|||||||
return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id);
|
return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PluginPair> GetPlugin<T>() where T : class
|
public static IEnumerable<PluginPair> GetPlugins<T>() where T : class
|
||||||
{
|
{
|
||||||
var results = new List<PluginPair>();
|
return from p in AllPlugins where p.Plugin is T select p;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PluginPair GetExclusivePlugin(Query query)
|
private static PluginPair GetExclusivePlugin(Query query)
|
||||||
{
|
{
|
||||||
exclusiveSearchPlugins = exclusiveSearchPlugins ??
|
exclusiveSearchPlugins = exclusiveSearchPlugins ?? GetPlugins<IExclusiveQuery>();
|
||||||
AllPlugins.Where(p => p.Plugin.GetType().GetInterfaces().Contains(typeof(IExclusiveQuery)));
|
|
||||||
var plugin = exclusiveSearchPlugins.FirstOrDefault(p => ((IExclusiveQuery)p.Plugin).IsExclusiveQuery(query));
|
var plugin = exclusiveSearchPlugins.FirstOrDefault(p => ((IExclusiveQuery)p.Plugin).IsExclusiveQuery(query));
|
||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
@@ -272,7 +260,7 @@ namespace Wox.Core.Plugin
|
|||||||
|
|
||||||
public static List<Result> GetPluginContextMenus(Result result)
|
public static List<Result> GetPluginContextMenus(Result result)
|
||||||
{
|
{
|
||||||
contextMenuPlugins = contextMenuPlugins ?? GetPlugin<IContextMenu>();
|
contextMenuPlugins = contextMenuPlugins ?? GetPlugins<IContextMenu>();
|
||||||
|
|
||||||
var pluginPair = contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID);
|
var pluginPair = contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID);
|
||||||
var plugin = (IContextMenu)pluginPair?.Plugin;
|
var plugin = (IContextMenu)pluginPair?.Plugin;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Linq;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using Wox.Core.i18n;
|
using Wox.Core.i18n;
|
||||||
using Wox.Core.Plugin;
|
using Wox.Core.Plugin;
|
||||||
|
using Wox.Infrastructure;
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
|
|
||||||
namespace Wox.Core.UI
|
namespace Wox.Core.UI
|
||||||
@@ -39,9 +40,8 @@ namespace Wox.Core.UI
|
|||||||
internal static void ApplyPluginLanguages()
|
internal static void ApplyPluginLanguages()
|
||||||
{
|
{
|
||||||
RemoveResource(PluginManager.DirectoryName);
|
RemoveResource(PluginManager.DirectoryName);
|
||||||
foreach (var languageFile in (PluginManager.AllPlugins.Select(p => p.Plugin).
|
foreach (var languageFile in (PluginManager.GetPlugins<IPluginI18n>().
|
||||||
Where(plugin => plugin.GetType().GetInterfaces().Contains(typeof(IPluginI18n))).
|
Select(plugin => InternationalizationManager.Instance.GetLanguageFile(((IPluginI18n)plugin.Plugin).GetLanguagesFolder())).
|
||||||
Select(plugin => InternationalizationManager.Instance.GetLanguageFile(((IPluginI18n)plugin).GetLanguagesFolder())).
|
|
||||||
Where(file => !string.IsNullOrEmpty(file))))
|
Where(file => !string.IsNullOrEmpty(file))))
|
||||||
{
|
{
|
||||||
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
|
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
|
||||||
|
|||||||
Reference in New Issue
Block a user