diff --git a/Wox.Plugin.System/CMD/CMD.cs b/Wox.Plugin.System/CMD/CMD.cs index bdc3dfbd9..f554fb35a 100644 --- a/Wox.Plugin.System/CMD/CMD.cs +++ b/Wox.Plugin.System/CMD/CMD.cs @@ -31,8 +31,7 @@ namespace Wox.Plugin.System.CMD results.AddRange(history); } - - if (query.RawQuery.StartsWith(">") && query.RawQuery.Length > 1) + else { string cmd = query.RawQuery.Substring(1); Result result = new Result @@ -57,7 +56,7 @@ namespace Wox.Plugin.System.CMD } catch (Exception) { } - results.Add(result); + context.PushResults(new List() { result }); IEnumerable history = CMDStorage.Instance.CMDHistory.Where(o => o.Key.Contains(cmd)) .OrderByDescending(o => o.Value) @@ -92,7 +91,8 @@ namespace Wox.Plugin.System.CMD return ret; }).Where(o => o != null).Take(4); - results.AddRange(history); + context.PushResults(history.ToList()); + try { string basedir = null; diff --git a/Wox.Plugin/PluginInitContext.cs b/Wox.Plugin/PluginInitContext.cs index a29448ba3..7169132de 100644 --- a/Wox.Plugin/PluginInitContext.cs +++ b/Wox.Plugin/PluginInitContext.cs @@ -31,5 +31,7 @@ namespace Wox.Plugin public Action StopLoadingBar { get; set; } public Func ShellRun { get; set; } + + public Action> PushResults { get; set; } } } diff --git a/Wox.Plugin/PluginPair.cs b/Wox.Plugin/PluginPair.cs index 9d09f7d10..7ec5796d6 100644 --- a/Wox.Plugin/PluginPair.cs +++ b/Wox.Plugin/PluginPair.cs @@ -9,5 +9,6 @@ namespace Wox.Plugin { public IPlugin Plugin { get; set; } public PluginMetadata Metadata { get; set; } + public PluginInitContext InitContext { get; set; } } } diff --git a/Wox/Commands/PluginCommand.cs b/Wox/Commands/PluginCommand.cs index 513e86569..8a29e4a7e 100644 --- a/Wox/Commands/PluginCommand.cs +++ b/Wox/Commands/PluginCommand.cs @@ -27,13 +27,17 @@ namespace Wox.Commands { try { - List r = thirdPlugin.Plugin.Query(q) ?? new List(); - r.ForEach(o => + thirdPlugin.InitContext.PushResults = r => { - o.PluginDirectory = thirdPlugin.Metadata.PluginDirecotry; - o.OriginQuery = q; - }); - UpdateResultView(r); + r.ForEach(o => + { + o.PluginDirectory = thirdPlugin.Metadata.PluginDirecotry; + o.OriginQuery = q; + }); + UpdateResultView(r); + }; + List results = thirdPlugin.Plugin.Query(q) ?? new List(); + thirdPlugin.InitContext.PushResults(results); } catch (Exception queryException) { diff --git a/Wox/Commands/SystemCommand.cs b/Wox/Commands/SystemCommand.cs index e9ae34a85..0d90c0a90 100644 --- a/Wox/Commands/SystemCommand.cs +++ b/Wox/Commands/SystemCommand.cs @@ -17,14 +17,20 @@ namespace Wox.Commands PluginPair pair1 = pair; ThreadPool.QueueUserWorkItem(state => { - List results = pair1.Plugin.Query(query); - foreach (Result result in results) + pair1.InitContext.PushResults = r => { - result.PluginDirectory = pair1.Metadata.PluginDirecotry; - result.OriginQuery = query; - result.AutoAjustScore = true; - } - if(results.Count > 0) UpdateResultView(results); + if (r == null || r.Count == 0) return; + foreach (Result result in r) + { + result.PluginDirectory = pair1.Metadata.PluginDirecotry; + result.OriginQuery = query; + result.AutoAjustScore = true; + } + UpdateResultView(r); + }; + + List results = pair1.Plugin.Query(query); + pair1.InitContext.PushResults(results); }); } } diff --git a/Wox/PluginLoader/Plugins.cs b/Wox/PluginLoader/Plugins.cs index 9d2b8b2d5..d42335e6d 100644 --- a/Wox/PluginLoader/Plugins.cs +++ b/Wox/PluginLoader/Plugins.cs @@ -40,7 +40,7 @@ namespace Wox.PluginLoader if (pluginPair != null) { PluginMetadata metadata = pluginPair.Metadata; - forker.Fork(() => plugin1.Init(new PluginInitContext() + pluginPair.InitContext = new PluginInitContext() { Plugins = plugins, CurrentPluginMetadata = metadata, @@ -60,7 +60,8 @@ namespace Wox.PluginLoader StartLoadingBar = () => App.Window.Dispatcher.Invoke(new Action(() => App.Window.StartLoadingBar())), StopLoadingBar = () => App.Window.Dispatcher.Invoke(new Action(() => App.Window.StopLoadingBar())), ShellRun = (cmd) => (bool) App.Window.Dispatcher.Invoke(new Func(() => App.Window.ShellRun(cmd))), - })); + }; + forker.Fork(() => plugin1.Init(pluginPair.InitContext)); } }