public void QueryBuild_ShouldGenerateSameSearchQuery_WithOrWithoutSpaceAfterActionKeyword() { // Arrange var plugin = new PluginPair { Metadata = new PluginMetadata { ActionKeywords = new List <string> { "a" } } }; var nonGlobalPlugins = new Dictionary <string, PluginPair> { { "a", plugin }, }; var firstQueryText = "asearch"; var secondQueryText = "a search"; // Act var firstPluginQueryPair = QueryBuilder.Build(ref firstQueryText, nonGlobalPlugins); var firstQuery = firstPluginQueryPair.GetValueOrDefault(plugin); var secondPluginQueryPairs = QueryBuilder.Build(ref secondQueryText, nonGlobalPlugins); var secondQuery = secondPluginQueryPairs.GetValueOrDefault(plugin); // Assert Assert.IsTrue(firstQuery.Search.Equals(secondQuery.Search)); Assert.IsTrue(firstQuery.ActionKeyword.Equals(secondQuery.ActionKeyword)); }
public static void Init() { plugins.Clear(); BasePluginLoader.ParsePluginsConfig(); plugins.AddRange(new PythonPluginLoader().LoadPlugin()); plugins.AddRange(new CSharpPluginLoader().LoadPlugin()); foreach (IPlugin plugin in plugins.Select(pluginPair => pluginPair.Plugin)) { IPlugin plugin1 = plugin; PluginPair pluginPair = plugins.FirstOrDefault(o => o.Plugin == plugin1); if (pluginPair != null) { PluginMetadata metadata = pluginPair.Metadata; ThreadPool.QueueUserWorkItem(o => plugin1.Init(new PluginInitContext() { Plugins = plugins, CurrentPluginMetadata = metadata, ChangeQuery = s => App.Window.ChangeQuery(s), CloseApp = App.Window.CloseApp, HideApp = App.Window.HideApp, ShowApp = () => App.Window.ShowApp(), ShowMsg = (title, subTitle, iconPath) => App.Window.ShowMsg(title, subTitle, iconPath), OpenSettingDialog = () => App.Window.OpenSettingDialog(), ShowCurrentResultItemTooltip = (msg) => App.Window.ShowCurrentResultItemTooltip(msg) })); } } }
public override void Dispatch(Query query) { foreach (PluginPair pair in Plugins.AllPlugins.Where(o => o.Metadata.PluginType == PluginType.System)) { PluginPair pair1 = pair; ThreadPool.QueueUserWorkItem(state => { pair1.InitContext.PushResults = (q, r) => { if (r == null || r.Count == 0) { return; } foreach (Result result in r) { result.PluginDirectory = pair1.Metadata.PluginDirecotry; result.OriginQuery = q; result.AutoAjustScore = true; } UpdateResultView(r); }; List <Result> results = pair1.Plugin.Query(query); pair1.InitContext.PushResults(query, results); }); } }
public static List <Result> QueryForPlugin(PluginPair pair, Query query, bool delayedExecution = false) { try { List <Result> results = null; var metadata = pair.Metadata; var milliseconds = Stopwatch.Debug($"|PluginManager.QueryForPlugin|Cost for {metadata.Name}", () => { if (delayedExecution && (pair.Plugin is IDelayedExecutionPlugin)) { results = ((IDelayedExecutionPlugin)pair.Plugin).Query(query, delayedExecution) ?? new List <Result>(); } else if (!delayedExecution) { results = pair.Plugin.Query(query) ?? new List <Result>(); } if (results != null) { UpdatePluginMetadata(results, metadata, query); UpdateResultWithActionKeyword(results, query); } }); 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 <Result>()); } }
public void QueryBuilderShouldSetTermsCorrectlyWhenCalled() { // Arrange string searchQuery = "MyTest search term"; var plugin = new PluginPair(new PluginMetadata { ActionKeyword = "My", ID = "plugin1" }); PluginManager.SetAllPlugins(new List <PluginPair>() { plugin, }); // Act var pluginQueryPairs = QueryBuilder.Build(searchQuery); var builtQuery = pluginQueryPairs.GetValueOrDefault(plugin); // Assert // Using Ordinal since this is used internally Assert.IsTrue(builtQuery.Terms.Count == 3 && builtQuery.Terms[0].Equals("Test", StringComparison.Ordinal) && builtQuery.Terms[1].Equals("search", StringComparison.Ordinal) && builtQuery.Terms[2].Equals("term", StringComparison.Ordinal)); }
public void QueryBuildShouldGenerateQueriesOnlyForPluginsWhoseActionKeywordsAreLongestIfMultipleMatch() { // Arrange string firstSearchQuery = "MyKeyword"; string secondSearchQuery = "My Keyword"; var firstPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "My", ID = "plugin1" }); var secondPlugin = new PluginPair(new PluginMetadata { ActionKeyword = "MyKey", ID = "plugin2" }); PluginManager.SetAllPlugins(new List <PluginPair>() { firstPlugin, secondPlugin, }); // Act var firstSearchQueryPluginPair = QueryBuilder.Build(firstSearchQuery); var firstSearchQueryFirstPlugin = firstSearchQueryPluginPair.GetValueOrDefault(firstPlugin); var firstSearchQuerySecondPlugin = firstSearchQueryPluginPair.GetValueOrDefault(secondPlugin); var secondSearchQueryPluginPair = QueryBuilder.Build(secondSearchQuery); var secondSearchQueryFirstPlugin = secondSearchQueryPluginPair.GetValueOrDefault(firstPlugin); var secondSearchQuerySecondPlugin = secondSearchQueryPluginPair.GetValueOrDefault(secondPlugin); // Assert Assert.IsTrue(AreEqual(firstSearchQueryFirstPlugin, null)); Assert.IsTrue(AreEqual(firstSearchQuerySecondPlugin, new Query(firstSearchQuery, secondPlugin.Metadata.ActionKeyword))); Assert.IsTrue(AreEqual(secondSearchQueryFirstPlugin, new Query(secondSearchQuery, firstPlugin.Metadata.ActionKeyword))); Assert.IsTrue(AreEqual(secondSearchQuerySecondPlugin, null)); }
public void QueryBuilder_ShouldSetTermsCorrently_WhenCalled() { // Arrange string searchQuery = "abcd efgh"; var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" } }; var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" } }; var nonGlobalPlugins = new Dictionary <string, PluginPair> { { "ab", firstPlugin }, { "abcd", secondPlugin }, }; // Act var pluginQueryPairs = QueryBuilder.Build(ref searchQuery, nonGlobalPlugins); var firstQuery = pluginQueryPairs.GetValueOrDefault(firstPlugin); var secondQuery = pluginQueryPairs.GetValueOrDefault(secondPlugin); // Assert Assert.IsTrue(firstQuery.Terms[0].Equals("cd") && firstQuery.Terms[1].Equals("efgh") && firstQuery.Terms.Length == 2); Assert.IsTrue(secondQuery.Terms[0].Equals("efgh") && secondQuery.Terms.Length == 1); }
internal static void ExecutePluginQuery(PluginPair pair, Query query) { try { Stopwatch sw = new Stopwatch(); sw.Start(); List <Result> results = pair.Plugin.Query(query) ?? new List <Result>(); results.ForEach(o => { o.PluginID = pair.Metadata.ID; }); sw.Stop(); DebugHelper.WriteLine(string.Format("Plugin query: {0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); pair.QueryCount += 1; if (pair.QueryCount == 1) { pair.AvgQueryTime = sw.ElapsedMilliseconds; } else { pair.AvgQueryTime = (pair.AvgQueryTime + sw.ElapsedMilliseconds) / 2; } API.PushResults(query, pair.Metadata, results); } catch (System.Exception e) { throw new WoxPluginException(pair.Metadata.Name, e); } }
public void Dispatch(Query query) { foreach (PluginPair pair in GetPlugins(query)) { var customizedPluginConfig = UserSettingStorage.Instance. CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pair.Metadata.ID); if (customizedPluginConfig != null && customizedPluginConfig.Disabled) { return; } PluginPair localPair = pair; if (query.IsIntantQuery && PluginManager.IsInstantSearchPlugin(pair.Metadata)) { DebugHelper.WriteLine(string.Format("Plugin {0} is executing instant search.", pair.Metadata.Name)); using (new Timeit(" => instant search took: ")) { PluginManager.ExecutePluginQuery(localPair, query); } } else { ThreadPool.QueueUserWorkItem(state => { PluginManager.ExecutePluginQuery(localPair, query); }); } } }
public void QueryBuildShouldGenerateSameSearchQueryWithOrWithoutSpaceAfterActionKeyword() { // Arrange var plugin = new PluginPair { Metadata = new PluginMetadata() { ActionKeyword = "a" } }; PluginManager.SetAllPlugins(new List <PluginPair>() { plugin, }); var firstQueryText = "asearch"; var secondQueryText = "a search"; // Act var firstPluginQueryPair = QueryBuilder.Build(firstQueryText); var firstQuery = firstPluginQueryPair.GetValueOrDefault(plugin); var secondPluginQueryPairs = QueryBuilder.Build(secondQueryText); var secondQuery = secondPluginQueryPairs.GetValueOrDefault(plugin); // Assert // Using Ordinal since this is used internally Assert.IsTrue(firstQuery.Search.Equals(secondQuery.Search, StringComparison.Ordinal)); Assert.IsTrue(firstQuery.ActionKeyword.Equals(secondQuery.ActionKeyword, StringComparison.Ordinal)); }
public void QueryBuilderShouldReturnAllPluginsWithTheActionWord() { // Arrange string searchQuery = "!efgh"; var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "!", ID = "plugin1" } }; var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "!", ID = "plugin2" } }; PluginManager.SetAllPlugins(new List <PluginPair>() { firstPlugin, secondPlugin, }); // Act var pluginQueryPairs = QueryBuilder.Build(searchQuery); // Assert Assert.AreEqual(2, pluginQueryPairs.Count); }
/// <summary> /// Check if a query contains valid action keyword /// </summary> /// <param name="query"></param> /// <returns></returns> public static bool IsActionKeywordQuery(Query query) { if (string.IsNullOrEmpty(query.RawQuery)) { return(false); } var strings = query.RawQuery.Split(' '); if (strings.Length == 1) { return(false); } var actionKeyword = strings[0].Trim(); if (string.IsNullOrEmpty(actionKeyword)) { return(false); } PluginPair pair = plugins.FirstOrDefault(o => o.Metadata.ActionKeyword == actionKeyword); if (pair != null) { var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pair.Metadata.ID); if (customizedPluginConfig != null && customizedPluginConfig.Disabled) { return(false); } return(true); } return(false); }
public void QueryBuilderShouldSetTermsCorrectlyWhenCalled() { // Arrange string searchQuery = "abcd efgh"; var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" } }; var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" } }; PluginManager.SetAllPlugins(new List <PluginPair>() { firstPlugin, secondPlugin, }); // Act var pluginQueryPairs = QueryBuilder.Build(searchQuery); var firstQuery = pluginQueryPairs.GetValueOrDefault(firstPlugin); var secondQuery = pluginQueryPairs.GetValueOrDefault(secondPlugin); // Assert // Using Ordinal since this is used internally Assert.IsTrue(firstQuery.Terms[0].Equals("cd", StringComparison.Ordinal) && firstQuery.Terms[1].Equals("efgh", StringComparison.Ordinal) && firstQuery.Terms.Count == 2); Assert.IsTrue(secondQuery.Terms[0].Equals("efgh", StringComparison.Ordinal) && secondQuery.Terms.Count == 1); }
public override void Dispatch(Query query) { PluginPair thirdPlugin = Plugins.AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionName); if (thirdPlugin != null && !string.IsNullOrEmpty(thirdPlugin.Metadata.ActionKeyword)) { var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == thirdPlugin.Metadata.ID); if (customizedPluginConfig != null && customizedPluginConfig.Disabled) { //need to stop the loading animation UpdateResultView(null); return; } ThreadPool.QueueUserWorkItem(t => { try { List <Result> results = thirdPlugin.Plugin.Query(query) ?? new List <Result>(); App.Window.PushResults(query, thirdPlugin.Metadata, results); } catch (Exception queryException) { Log.Error(string.Format("Plugin {0} query failed: {1}", thirdPlugin.Metadata.Name, queryException.Message)); #if (DEBUG) { throw; } #endif } }); } }
public static List <Result> GetContextMenusForPlugin(Result result) { PluginPair pluginPair = _contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID); if (pluginPair != null) { PluginMetadata metadata = pluginPair.Metadata; IContextMenu plugin = (IContextMenu)pluginPair.Plugin; try { List <Result> results = plugin.LoadContextMenus(result); foreach (Result r in results) { r.PluginDirectory = metadata.PluginDirectory; r.PluginID = 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 <Result>()); } } return(new List <Result>()); }
public void QueryBuilderShouldSetTermsCorrentlyWhenCalled() { // Arrange string searchQuery = "abcd efgh"; var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" } }; var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" } }; var nonGlobalPlugins = new Dictionary <string, PluginPair> { { "ab", firstPlugin }, { "abcd", secondPlugin }, }; // Act var pluginQueryPairs = QueryBuilder.Build(ref searchQuery, nonGlobalPlugins); var firstQuery = pluginQueryPairs.GetValueOrDefault(firstPlugin); var secondQuery = pluginQueryPairs.GetValueOrDefault(secondPlugin); // Assert // Using Ordinal since this is used internally Assert.IsTrue(firstQuery.Terms[0].Equals("cd", StringComparison.Ordinal) && firstQuery.Terms[1].Equals("efgh", StringComparison.Ordinal) && firstQuery.Terms.Count == 2); Assert.IsTrue(secondQuery.Terms[0].Equals("efgh", StringComparison.Ordinal) && secondQuery.Terms.Count == 1); }
public void QueryBuildShouldGenerateSameSearchQueryWithOrWithoutSpaceAfterActionKeyword() { // Arrange var plugin = new PluginPair { Metadata = new PluginMetadata(new List <string> { "a" }) }; var nonGlobalPlugins = new Dictionary <string, PluginPair> { { "a", plugin }, }; var firstQueryText = "asearch"; var secondQueryText = "a search"; // Act var firstPluginQueryPair = QueryBuilder.Build(ref firstQueryText, nonGlobalPlugins); var firstQuery = firstPluginQueryPair.GetValueOrDefault(plugin); var secondPluginQueryPairs = QueryBuilder.Build(ref secondQueryText, nonGlobalPlugins); var secondQuery = secondPluginQueryPairs.GetValueOrDefault(plugin); // Assert // Using Ordinal since this is used internally Assert.IsTrue(firstQuery.Search.Equals(secondQuery.Search, StringComparison.Ordinal)); Assert.IsTrue(firstQuery.ActionKeyword.Equals(secondQuery.ActionKeyword, StringComparison.Ordinal)); }
public void QueryBuildShouldGenerateCorrectQueryForPluginsWhoseActionKeywordsHaveSamePrefix() { // Arrange string searchQuery = "abcdefgh"; var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" } }; var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" } }; var nonGlobalPlugins = new Dictionary <string, PluginPair> { { "ab", firstPlugin }, { "abcd", secondPlugin }, }; // Act var pluginQueryPairs = QueryBuilder.Build(ref searchQuery, nonGlobalPlugins); var firstQuery = pluginQueryPairs.GetValueOrDefault(firstPlugin); var secondQuery = pluginQueryPairs.GetValueOrDefault(secondPlugin); // Assert Assert.IsTrue(AreEqual(firstQuery, new Query { RawQuery = searchQuery, Search = searchQuery.Substring(firstPlugin.Metadata.ActionKeyword.Length), ActionKeyword = firstPlugin.Metadata.ActionKeyword })); Assert.IsTrue(AreEqual(secondQuery, new Query { RawQuery = searchQuery, Search = searchQuery.Substring(secondPlugin.Metadata.ActionKeyword.Length), ActionKeyword = secondPlugin.Metadata.ActionKeyword })); }
public override void Dispatch(Query query) { var allSytemPlugins = Plugins.AllPlugins.Where(o => o.Metadata.PluginType == PluginType.System); if (UserSettingStorage.Instance.WebSearches.Exists(o => o.ActionWord == query.ActionName && o.Enabled)) { //websearch mode allSytemPlugins = new List <PluginPair>() { allSytemPlugins.First(o => ((ISystemPlugin)o.Plugin).ID == "565B73353DBF4806919830B9202EE3BF") }; } foreach (PluginPair pair in allSytemPlugins) { PluginPair pair1 = pair; ThreadPool.QueueUserWorkItem(state => { List <Result> results = pair1.Plugin.Query(query); results.ForEach(o => { o.AutoAjustScore = true; }); App.Window.PushResults(query, pair1.Metadata, results); }); } }
public void QueryBuilderShouldGenerateCorrectQueriesForPluginsWithMultipleActionKeywords() { // Arrange var plugin = new PluginPair { Metadata = new PluginMetadata(new List <string> { "a", "b" }) }; var nonGlobalPlugins = new Dictionary <string, PluginPair> { { "a", plugin }, { "b", plugin }, }; var firstQueryText = "asearch"; var secondQueryText = "bsearch"; // Act var firstPluginQueryPair = QueryBuilder.Build(ref firstQueryText, nonGlobalPlugins); var firstQuery = firstPluginQueryPair.GetValueOrDefault(plugin); var secondPluginQueryPairs = QueryBuilder.Build(ref secondQueryText, nonGlobalPlugins); var secondQuery = secondPluginQueryPairs.GetValueOrDefault(plugin); // Assert Assert.IsTrue(AreEqual(firstQuery, new Query { ActionKeyword = "a", RawQuery = "asearch", Search = "search" })); Assert.IsTrue(AreEqual(secondQuery, new Query { ActionKeyword = "b", RawQuery = "bsearch", Search = "search" })); }
public void QueryBuildShouldGenerateCorrectQueryForPluginsWhoseActionKeywordsHaveSamePrefix() { // Arrange string searchQuery = "abcdefgh"; var firstPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "ab", ID = "plugin1" } }; var secondPlugin = new PluginPair { Metadata = new PluginMetadata { ActionKeyword = "abcd", ID = "plugin2" } }; PluginManager.SetAllPlugins(new List <PluginPair>() { firstPlugin, secondPlugin, }); // Act var pluginQueryPairs = QueryBuilder.Build(searchQuery); var firstQuery = pluginQueryPairs.GetValueOrDefault(firstPlugin); var secondQuery = pluginQueryPairs.GetValueOrDefault(secondPlugin); // Assert Assert.IsTrue(AreEqual(firstQuery, new Query(searchQuery, firstPlugin.Metadata.ActionKeyword))); Assert.IsTrue(AreEqual(secondQuery, new Query(searchQuery, secondPlugin.Metadata.ActionKeyword))); }
private static bool IsInstantQueryPlugin(PluginPair plugin) { //any plugin that takes more than 200ms for AvgQueryTime won't be treated as IInstantQuery plugin anymore. return(plugin.AvgQueryTime < 200 && plugin.Plugin is IInstantQuery && InstantQueryPlugins.Any(p => p.Metadata.ID == plugin.Metadata.ID)); }
public static List <Result> QueryForPlugin(PluginPair pair, Query query) { var results = new List <Result>(); try { var milliseconds = Stopwatch.Normal($"Plugin.Query cost for {pair.Metadata.Name}", () => { results = pair.Plugin.Query(query) ?? results; results.ForEach(o => { o.PluginDirectory = pair.Metadata.PluginDirectory; o.PluginID = pair.Metadata.ID; o.OriginQuery = query; }); }); pair.QueryCount += 1; pair.AvgQueryTime = pair.QueryCount == 1 ? milliseconds : (pair.AvgQueryTime + milliseconds) / 2; } catch (Exception e) { throw new WoxPluginException(pair.Metadata.Name, $"QueryForPlugin failed", e); } return(results); }
public static IEnumerable <PluginPair> CSharpPlugins(List <PluginMetadata> source) { var plugins = new List <PluginPair>(); var metadatas = source.Where(o => o.Language.ToUpper() == AllowedLanguage.CSharp); foreach (var metadata in metadatas) { var milliseconds = Stopwatch.Debug($"|PluginsLoader.CSharpPlugins|Constructor init cost for {metadata.Name}", () => { #if DEBUG var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath); var types = assembly.GetTypes(); var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); var plugin = (IPlugin)Activator.CreateInstance(type); #else Assembly assembly; try { assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(metadata.ExecuteFilePath); } catch (Exception e) { Log.Exception($"|PluginsLoader.CSharpPlugins|Couldn't load assembly for {metadata.Name}", e); return; } var types = assembly.GetTypes(); Type type; try { type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); } catch (InvalidOperationException e) { Log.Exception($"|PluginsLoader.CSharpPlugins|Can't find class implement IPlugin for <{metadata.Name}>", e); return; } IPlugin plugin; try { plugin = (IPlugin)Activator.CreateInstance(type); } catch (Exception e) { Log.Exception($"|PluginsLoader.CSharpPlugins|Can't create instance for <{metadata.Name}>", e); return; } #endif PluginPair pair = new PluginPair { Plugin = plugin, Metadata = metadata }; plugins.Add(pair); }); metadata.InitTime += milliseconds; } return(plugins); }
/// <summary> /// Load and init all Wox plugins /// </summary> public static void Init(IPublicAPI api) { if (api == null) { throw new WoxFatalException("api is null"); } SetupPluginDirectories(); API = api; var metadatas = PluginConfig.Parse(pluginDirectories); AllPlugins = (new CSharpPluginLoader().LoadPlugin(metadatas)). Concat(new JsonRPCPluginLoader <PythonPlugin>().LoadPlugin(metadatas)); //load plugin i18n languages ResourceMerger.UpdatePluginLanguages(); foreach (PluginPair pluginPair in AllPlugins) { PluginPair pair = pluginPair; ThreadPool.QueueUserWorkItem(o => { var milliseconds = Stopwatch.Normal($"Plugin init: {pair.Metadata.Name}", () => { pair.Plugin.Init(new PluginInitContext { CurrentPluginMetadata = pair.Metadata, Proxy = HttpProxy.Instance, API = API }); }); pair.InitTime = milliseconds; InternationalizationManager.Instance.UpdatePluginMetadataTranslations(pair); }); } ThreadPool.QueueUserWorkItem(o => { InstantQueryPlugins = GetPluginsForInterface <IInstantQuery>(); contextMenuPlugins = GetPluginsForInterface <IContextMenu>(); foreach (var plugin in AllPlugins) { if (IsGlobalPlugin(plugin.Metadata)) { GlobalPlugins.Add(plugin); } else { foreach (string actionKeyword in plugin.Metadata.ActionKeywords) { NonGlobalPlugins[actionKeyword] = plugin; } } } }); }
public static void UpdateActionKeywordForPlugin(PluginPair plugin, string oldActionKeyword, string newActionKeyword) { var actionKeywords = plugin.Metadata.ActionKeywords; if (string.IsNullOrEmpty(newActionKeyword)) { string msg = InternationalizationManager.Instance.GetTranslation("newActionKeywordsCannotBeEmpty"); throw new WoxPluginException(plugin.Metadata.Name, msg); } // do nothing if they are same if (oldActionKeyword == newActionKeyword) { return; } if (NonGlobalPlugins.ContainsKey(newActionKeyword)) { string msg = InternationalizationManager.Instance.GetTranslation("newActionKeywordsHasBeenAssigned"); throw new WoxPluginException(plugin.Metadata.Name, msg); } // add new action keyword if (string.IsNullOrEmpty(oldActionKeyword)) { actionKeywords.Add(newActionKeyword); if (newActionKeyword == Query.GlobalPluginWildcardSign) { GlobalPlugins.Add(plugin); } else { NonGlobalPlugins[newActionKeyword] = plugin; } } // update existing action keyword else { int index = actionKeywords.IndexOf(oldActionKeyword); actionKeywords[index] = newActionKeyword; if (oldActionKeyword == Query.GlobalPluginWildcardSign) { GlobalPlugins.Remove(plugin); } else { NonGlobalPlugins.Remove(oldActionKeyword); } if (newActionKeyword == Query.GlobalPluginWildcardSign) { GlobalPlugins.Add(plugin); } else { NonGlobalPlugins[newActionKeyword] = plugin; } } }
public ActionKeywords(string pluginId) { InitializeComponent(); _plugin = PluginManager.GetPluginForId(pluginId); if (_plugin == null) { MessageBox.Show(InternationalizationManager.Instance.GetTranslation("cannotFindSpecifiedPlugin")); Close(); } }
public ActionKeywords(string pluginId, Settings settings) { InitializeComponent(); _plugin = PluginManager.GetPluginForId(pluginId); _settings = settings; if (_plugin == null) { MessageBox.Show(_translator.GetTranslation("cannotFindSpecifiedPlugin")); Close(); } }
public static IEnumerable <PluginPair> CSharpPlugins(List <PluginMetadata> source) { var plugins = new List <PluginPair>(); var metadatas = source.Where(o => o.Language.ToUpper() == AllowedLanguage.CSharp); foreach (var metadata in metadatas) { #if DEBUG var assembly = Assembly.Load(AssemblyName.GetAssemblyName(metadata.ExecuteFilePath)); var types = assembly.GetTypes(); var type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); var plugin = (IPlugin)Activator.CreateInstance(type); #else Assembly assembly; try { assembly = Assembly.Load(AssemblyName.GetAssemblyName(metadata.ExecuteFilePath)); } catch (Exception e) { Log.Exception(new WoxPluginException(metadata.Name, "Couldn't load assembly", e)); continue; } var types = assembly.GetTypes(); Type type; try { type = types.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Contains(typeof(IPlugin))); } catch (InvalidOperationException e) { Log.Exception(new WoxPluginException(metadata.Name, "Can't find class implement IPlugin", e)); continue; } IPlugin plugin; try { plugin = (IPlugin)Activator.CreateInstance(type); } catch (Exception e) { Log.Exception(new WoxPluginException(metadata.Name, "Can't create instance", e)); continue; } #endif PluginPair pair = new PluginPair { Plugin = plugin, Metadata = metadata }; plugins.Add(pair); } return(plugins); }
public PriorityChangeWindow(string pluginId, Settings settings, PluginViewModel pluginViewModel) { InitializeComponent(); plugin = PluginManager.GetPluginForId(pluginId); this.settings = settings; this.pluginViewModel = pluginViewModel; if (plugin == null) { MessageBox.Show(translater.GetTranslation("cannotFindSpecifiedPlugin")); Close(); } }