diff --git a/Plugins/Wox.Plugin.CMD/CMD.cs b/Plugins/Wox.Plugin.CMD/CMD.cs index cde0bb6f89..557729f95f 100644 --- a/Plugins/Wox.Plugin.CMD/CMD.cs +++ b/Plugins/Wox.Plugin.CMD/CMD.cs @@ -21,14 +21,14 @@ namespace Wox.Plugin.CMD { List results = new List(); List pushedResults = new List(); - if (query.RawQuery == ">") + if (query.Search == ">") { return GetAllHistoryCmds(); } - if (query.RawQuery.StartsWith(">") && query.RawQuery.Length > 1) + if (query.Search.StartsWith(">") && query.Search.Length > 1) { - string cmd = query.RawQuery.Substring(1); + string cmd = query.Search.Substring(1); var queryCmd = GetCurrentCmd(cmd); context.API.PushResults(query, context.CurrentPluginMetadata, new List() { queryCmd }); pushedResults.Add(queryCmd); diff --git a/Plugins/Wox.Plugin.Caculator/Calculator.cs b/Plugins/Wox.Plugin.Caculator/Calculator.cs index 55ddbc8a67..da5e580a7b 100644 --- a/Plugins/Wox.Plugin.Caculator/Calculator.cs +++ b/Plugins/Wox.Plugin.Caculator/Calculator.cs @@ -28,13 +28,13 @@ namespace Wox.Plugin.Caculator public List Query(Query query) { - if (query.RawQuery.Length <= 2 // don't affect when user only input "e" or "i" keyword - || !regValidExpressChar.IsMatch(query.RawQuery) - || !IsBracketComplete(query.RawQuery)) return new List(); + if (query.Search.Length <= 2 // don't affect when user only input "e" or "i" keyword + || !regValidExpressChar.IsMatch(query.Search) + || !IsBracketComplete(query.Search)) return new List(); try { - var result = yampContext.Run(query.RawQuery); + var result = yampContext.Run(query.Search); if (result.Output != null && !string.IsNullOrEmpty(result.Result)) { return new List() { new Result() { diff --git a/Plugins/Wox.Plugin.Color/Color.cs b/Plugins/Wox.Plugin.Color/Color.cs index ab5a70cc19..36581cca94 100644 --- a/Plugins/Wox.Plugin.Color/Color.cs +++ b/Plugins/Wox.Plugin.Color/Color.cs @@ -29,7 +29,7 @@ namespace Wox.Plugin.Color public List Query(Query query) { - var raw = query.RawQuery; + var raw = query.Search; if (!IsAvailable(raw)) return new List(0); try { diff --git a/Plugins/Wox.Plugin.ControlPanel/ControlPanel.cs b/Plugins/Wox.Plugin.ControlPanel/ControlPanel.cs index e3f5918a4a..479368c9e3 100644 --- a/Plugins/Wox.Plugin.ControlPanel/ControlPanel.cs +++ b/Plugins/Wox.Plugin.ControlPanel/ControlPanel.cs @@ -38,9 +38,7 @@ namespace Wox.Plugin.ControlPanel public List Query(Query query) { - if (query.RawQuery.EndsWith(" ") || query.RawQuery.Length <= 1) return new List(); - string myQuery = query.RawQuery.Trim(); - + string myQuery = query.Search.Trim(); List results = new List(); foreach (var item in controlPanelItems) diff --git a/Plugins/Wox.Plugin.Folder/FolderPlugin.cs b/Plugins/Wox.Plugin.Folder/FolderPlugin.cs index 32b41578f5..ed9127509c 100644 --- a/Plugins/Wox.Plugin.Folder/FolderPlugin.cs +++ b/Plugins/Wox.Plugin.Folder/FolderPlugin.cs @@ -53,8 +53,7 @@ namespace Wox.Plugin.Folder public List Query(Query query) { - if(string.IsNullOrEmpty(query.RawQuery)) return new List(); - string input = query.RawQuery.ToLower(); + string input = query.Search.ToLower(); List userFolderLinks = FolderStorage.Instance.FolderLinks.Where( x => x.Nickname.StartsWith(input, StringComparison.OrdinalIgnoreCase)).ToList(); diff --git a/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs b/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs index a3df11cc87..fbf514333e 100644 --- a/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs +++ b/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs @@ -13,16 +13,14 @@ namespace Wox.Plugin.PluginIndicator public List Query(Query query) { List results = new List(); - if (string.IsNullOrEmpty(query.RawQuery)) return results; - if (allPlugins.Count == 0) { - allPlugins = context.API.GetAllPlugins().Where(o => !PluginManager.IsWildcardPlugin(o.Metadata)).ToList(); + allPlugins = context.API.GetAllPlugins().Where(o => !PluginManager.IsSystemPlugin(o.Metadata)).ToList(); } foreach (PluginMetadata metadata in allPlugins.Select(o => o.Metadata)) { - if (metadata.ActionKeyword.StartsWith(query.RawQuery)) + if (metadata.ActionKeyword.StartsWith(query.Search)) { PluginMetadata metadataCopy = metadata; var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == metadataCopy.ID); @@ -47,7 +45,7 @@ namespace Wox.Plugin.PluginIndicator } } - results.AddRange(UserSettingStorage.Instance.WebSearches.Where(o => o.ActionWord.StartsWith(query.RawQuery) && o.Enabled).Select(n => new Result() + results.AddRange(UserSettingStorage.Instance.WebSearches.Where(o => o.ActionWord.StartsWith(query.Search) && o.Enabled).Select(n => new Result() { Title = n.ActionWord, SubTitle = string.Format("Activate {0} web search", n.ActionWord), diff --git a/Plugins/Wox.Plugin.PluginManagement/Main.cs b/Plugins/Wox.Plugin.PluginManagement/Main.cs index fcdb5ae863..48e47a7a67 100644 --- a/Plugins/Wox.Plugin.PluginManagement/Main.cs +++ b/Plugins/Wox.Plugin.PluginManagement/Main.cs @@ -10,59 +10,37 @@ using Newtonsoft.Json; namespace Wox.Plugin.PluginManagement { - public class WoxPluginResult - { - public string plugin_file; - public string description; - public int liked_count; - public string name; - public string version; - } - public class Main : IPlugin { private static string APIBASE = "https://api.getwox.com"; - private static string PluginPath = AppDomain.CurrentDomain.BaseDirectory + "Plugins"; private static string PluginConfigName = "plugin.json"; - private static string pluginSearchUrl = APIBASE +"/plugin/search/"; + private static string pluginSearchUrl = APIBASE + "/plugin/search/"; private PluginInitContext context; public List Query(Query query) { List results = new List(); - if (query.ActionParameters.Count == 0) + if (string.IsNullOrEmpty(query.Search)) { - results.Add(new Result("wpm install ", "Images\\plugin.png", "search and install wox plugins") + results.Add(new Result("install ", "Images\\plugin.png", "search and install wox plugins") { - Action = e => - { - context.API.ChangeQuery("wpm install "); - return false; - } + Action = e => ChangeToInstallCommand() }); - results.Add(new Result("wpm uninstall ", "Images\\plugin.png", "uninstall plugin") + results.Add(new Result("uninstall ", "Images\\plugin.png", "uninstall plugin") { - Action = e => - { - context.API.ChangeQuery("wpm uninstall "); - return false; - } + Action = e => ChangeToUninstallCommand() }); - results.Add(new Result("wpm list", "Images\\plugin.png", "list plugins installed") + results.Add(new Result("list", "Images\\plugin.png", "list plugins installed") { - Action = e => - { - context.API.ChangeQuery("wpm list"); - return false; - } + Action = e => ChangeToListCommand() }); return results; } - if (query.ActionParameters.Count > 0) + if (!string.IsNullOrEmpty(query.FirstSearch)) { bool hit = false; - switch (query.ActionParameters[0].ToLower()) + switch (query.FirstSearch.ToLower()) { case "list": hit = true; @@ -71,51 +49,39 @@ namespace Wox.Plugin.PluginManagement case "uninstall": hit = true; - results = ListUnInstalledPlugins(query); + results = UnInstallPlugins(query); break; case "install": hit = true; - if (query.ActionParameters.Count > 1) + if (!string.IsNullOrEmpty(query.SecondSearch)) { - results = InstallPlugin(query); + results = InstallPlugin(query.SecondSearch); } break; } if (!hit) { - if ("install".Contains(query.ActionParameters[0].ToLower())) + if ("install".Contains(query.FirstSearch.ToLower())) { - results.Add(new Result("wpm install ", "Images\\plugin.png", "search and install wox plugins") + results.Add(new Result("install ", "Images\\plugin.png", "search and install wox plugins") { - Action = e => - { - context.API.ChangeQuery("wpm install "); - return false; - } + Action = e => ChangeToInstallCommand() }); } - if ("uninstall".Contains(query.ActionParameters[0].ToLower())) + if ("uninstall".Contains(query.FirstSearch.ToLower())) { - results.Add(new Result("wpm uninstall ", "Images\\plugin.png", "uninstall plugin") + results.Add(new Result("uninstall ", "Images\\plugin.png", "uninstall plugin") { - Action = e => - { - context.API.ChangeQuery("wpm uninstall "); - return false; - } + Action = e => ChangeToUninstallCommand() }); } - if ("list".Contains(query.ActionParameters[0].ToLower())) + if ("list".Contains(query.FirstSearch.ToLower())) { - results.Add(new Result("wpm list", "Images\\plugin.png", "list plugins installed") + results.Add(new Result("list", "Images\\plugin.png", "list plugins installed") { - Action = e => - { - context.API.ChangeQuery("wpm list"); - return false; - } + Action = e => ChangeToListCommand() }); } } @@ -124,10 +90,49 @@ namespace Wox.Plugin.PluginManagement return results; } - private List InstallPlugin(Query query) + private bool ChangeToListCommand() + { + if (context.CurrentPluginMetadata.ActionKeyword == "*") + { + context.API.ChangeQuery("list "); + } + else + { + context.API.ChangeQuery(string.Format("{0} list ", context.CurrentPluginMetadata.ActionKeyword)); + } + return false; + } + + private bool ChangeToUninstallCommand() + { + if (context.CurrentPluginMetadata.ActionKeyword == "*") + { + context.API.ChangeQuery("uninstall "); + } + else + { + context.API.ChangeQuery(string.Format("{0} uninstall ", context.CurrentPluginMetadata.ActionKeyword)); + } + return false; + } + + private bool ChangeToInstallCommand() + { + if (context.CurrentPluginMetadata.ActionKeyword == "*") + { + context.API.ChangeQuery("install "); + } + else + { + context.API.ChangeQuery(string.Format("{0} install ", context.CurrentPluginMetadata.ActionKeyword)); + } + return false; + } + + private List InstallPlugin(string queryPluginName) { List results = new List(); - HttpWebResponse response = HttpRequest.CreateGetHttpResponse(pluginSearchUrl + query.ActionParameters[1], context.Proxy); + HttpWebResponse response = HttpRequest.CreateGetHttpResponse(pluginSearchUrl + queryPluginName, context.Proxy); Stream s = response.GetResponseStream(); if (s != null) { @@ -140,7 +145,7 @@ namespace Wox.Plugin.PluginManagement } catch { - context.API.ShowMsg("Coundn't parse api search results", "Please update your Wox!",string.Empty); + context.API.ShowMsg("Coundn't parse api search results", "Please update your Wox!", string.Empty); return results; } @@ -194,19 +199,19 @@ namespace Wox.Plugin.PluginManagement return results; } - private List ListUnInstalledPlugins(Query query) + private List UnInstallPlugins(Query query) { List results = new List(); - List allInstalledPlugins = ParseRegularPlugins(); - if (query.ActionParameters.Count > 1) + List allInstalledPlugins = context.API.GetAllPlugins().Select(o => o.Metadata).ToList(); + if (!string.IsNullOrEmpty(query.SecondSearch)) { - string pluginName = query.ActionParameters[1]; allInstalledPlugins = - allInstalledPlugins.Where(o => o.Name.ToLower().Contains(pluginName.ToLower())).ToList(); + allInstalledPlugins.Where(o => o.Name.ToLower().Contains(query.SecondSearch.ToLower())).ToList(); } foreach (PluginMetadata plugin in allInstalledPlugins) { + var plugin1 = plugin; results.Add(new Result() { Title = plugin.Name, @@ -214,7 +219,7 @@ namespace Wox.Plugin.PluginManagement IcoPath = plugin.FullIcoPath, Action = e => { - UnInstalledPlugins(plugin); + UnInstallPlugin(plugin1); return false; } }); @@ -222,7 +227,7 @@ namespace Wox.Plugin.PluginManagement return results; } - private void UnInstalledPlugins(PluginMetadata plugin) + private void UnInstallPlugin(PluginMetadata plugin) { string content = string.Format("Do you want to uninstall following plugin?\r\n\r\nName: {0}\r\nVersion: {1}\r\nAuthor: {2}", plugin.Name, plugin.Version, plugin.Author); if (MessageBox.Show(content, "Wox", MessageBoxButtons.YesNo) == DialogResult.Yes) @@ -235,7 +240,7 @@ namespace Wox.Plugin.PluginManagement private List ListInstalledPlugins() { List results = new List(); - foreach (PluginMetadata plugin in ParseRegularPlugins()) + foreach (PluginMetadata plugin in context.API.GetAllPlugins().Select(o => o.Metadata)) { results.Add(new Result() { @@ -247,61 +252,6 @@ namespace Wox.Plugin.PluginManagement return results; } - private static List ParseRegularPlugins() - { - List pluginMetadatas = new List(); - if (!Directory.Exists(PluginPath)) - Directory.CreateDirectory(PluginPath); - - string[] directories = Directory.GetDirectories(PluginPath); - foreach (string directory in directories) - { - PluginMetadata metadata = GetMetadataFromJson(directory); - if (metadata != null) pluginMetadatas.Add(metadata); - } - - return pluginMetadatas; - } - - private static PluginMetadata GetMetadataFromJson(string pluginDirectory) - { - string configPath = Path.Combine(pluginDirectory, PluginConfigName); - PluginMetadata metadata; - - if (!File.Exists(configPath)) - { - return null; - } - - try - { - metadata = JsonConvert.DeserializeObject(File.ReadAllText(configPath)); - metadata.PluginType = PluginType.User; - metadata.PluginDirectory = pluginDirectory; - } - catch (Exception) - { - string error = string.Format("Parse plugin config {0} failed: json format is not valid", configPath); - return null; - } - - - if (!AllowedLanguage.IsAllowed(metadata.Language)) - { - string error = string.Format("Parse plugin config {0} failed: invalid language {1}", configPath, - metadata.Language); - return null; - } - if (!File.Exists(metadata.ExecuteFilePath)) - { - string error = string.Format("Parse plugin config {0} failed: ExecuteFile {1} didn't exist", configPath, - metadata.ExecuteFilePath); - return null; - } - - return metadata; - } - public void Init(PluginInitContext context) { this.context = context; diff --git a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj index b7e35ad144..e201326443 100644 --- a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj +++ b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj @@ -1,91 +1,92 @@ - - - - - Debug - AnyCPU - {049490F0-ECD2-4148-9B39-2135EC346EBE} - Library - Properties - Wox.Plugin.PluginManagement - Wox.Plugin.PluginManagement - v3.5 - 512 - ..\..\ - true - - - - true - full - false - ..\..\Output\Debug\Plugins\Wox.Plugin.PluginManagement\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - ..\..\Output\Release\Plugins\Wox.Plugin.PluginManagement\ - TRACE - prompt - 4 - false - - - - ..\..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll - True - - - - - - - - - - - - - - - - - {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} - Wox.Plugin - - - - - - PreserveNewest - - - - - PreserveNewest - - - - - - - - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - + + + + + Debug + AnyCPU + {049490F0-ECD2-4148-9B39-2135EC346EBE} + Library + Properties + Wox.Plugin.PluginManagement + Wox.Plugin.PluginManagement + v3.5 + 512 + ..\..\ + true + + + + true + full + false + ..\..\Output\Debug\Plugins\Wox.Plugin.PluginManagement\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + ..\..\Output\Release\Plugins\Wox.Plugin.PluginManagement\ + TRACE + prompt + 4 + false + + + + ..\..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll + True + + + + + + + + + + + + + + + + + + {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} + Wox.Plugin + + + + + + PreserveNewest + + + + + PreserveNewest + + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + --> \ No newline at end of file diff --git a/Plugins/Wox.Plugin.PluginManagement/WoxPluginResult.cs b/Plugins/Wox.Plugin.PluginManagement/WoxPluginResult.cs new file mode 100644 index 0000000000..a7fcd513e2 --- /dev/null +++ b/Plugins/Wox.Plugin.PluginManagement/WoxPluginResult.cs @@ -0,0 +1,11 @@ +namespace Wox.Plugin.PluginManagement +{ + public class WoxPluginResult + { + public string plugin_file; + public string description; + public int liked_count; + public string name; + public string version; + } +} \ No newline at end of file diff --git a/Plugins/Wox.Plugin.Program/Programs.cs b/Plugins/Wox.Plugin.Program/Programs.cs index 9c4d2d423d..31f8d9b53a 100644 --- a/Plugins/Wox.Plugin.Program/Programs.cs +++ b/Plugins/Wox.Plugin.Program/Programs.cs @@ -26,9 +26,7 @@ namespace Wox.Plugin.Program public List Query(Query query) { - if (query.RawQuery.Trim().Length <= 1) return new List(); - - var fuzzyMather = FuzzyMatcher.Create(query.RawQuery); + var fuzzyMather = FuzzyMatcher.Create(query.Search); List returnList = programs.Where(o => MatchProgram(o, fuzzyMather)).ToList(); returnList.ForEach(ScoreFilter); returnList = returnList.OrderByDescending(o => o.Score).ToList(); diff --git a/Plugins/Wox.Plugin.QueryHistory/QueryHistory.cs b/Plugins/Wox.Plugin.QueryHistory/QueryHistory.cs index 6a77964e18..7f74a9e0bd 100644 --- a/Plugins/Wox.Plugin.QueryHistory/QueryHistory.cs +++ b/Plugins/Wox.Plugin.QueryHistory/QueryHistory.cs @@ -13,7 +13,7 @@ namespace Wox.Plugin.QueryHistory public List Query(Query query) { var histories = QueryHistoryStorage.Instance.GetHistory(); - string filter = query.GetAllRemainingParameter(); + string filter = query.Search; if (!string.IsNullOrEmpty(filter)) { histories = histories.Where(o => o.Query.Contains(filter)).ToList(); diff --git a/Plugins/Wox.Plugin.Sys/Sys.cs b/Plugins/Wox.Plugin.Sys/Sys.cs index 2351f55735..80132b29ed 100644 --- a/Plugins/Wox.Plugin.Sys/Sys.cs +++ b/Plugins/Wox.Plugin.Sys/Sys.cs @@ -34,7 +34,6 @@ namespace Wox.Plugin.Sys public List Query(Query query) { - if (query.RawQuery.EndsWith(" ") || query.RawQuery.Length <= 1) return new List(); if (availableResults.Count == 0) { LoadCommands(); @@ -43,7 +42,7 @@ namespace Wox.Plugin.Sys List results = new List(); foreach (Result availableResult in availableResults) { - if (availableResult.Title.ToLower().StartsWith(query.RawQuery.ToLower())) + if (availableResult.Title.ToLower().StartsWith(query.Search.ToLower())) { results.Add(availableResult); } diff --git a/Plugins/Wox.Plugin.Url/UrlPlugin.cs b/Plugins/Wox.Plugin.Url/UrlPlugin.cs index e578e7c253..b769a720bb 100644 --- a/Plugins/Wox.Plugin.Url/UrlPlugin.cs +++ b/Plugins/Wox.Plugin.Url/UrlPlugin.cs @@ -45,9 +45,7 @@ namespace Wox.Plugin.Url public List Query(Query query) { - if(string.IsNullOrEmpty(query.RawQuery)) return new List(); - - var raw = query.RawQuery; + var raw = query.Search; if (IsURL(raw)) { return new List diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs index 11989fb32c..aa327f6674 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebSearchPlugin.cs @@ -18,11 +18,11 @@ namespace Wox.Plugin.WebSearch List results = new List(); Core.UserSettings.WebSearch webSearch = - UserSettingStorage.Instance.WebSearches.FirstOrDefault(o => o.ActionWord == query.ActionName && o.Enabled); + UserSettingStorage.Instance.WebSearches.FirstOrDefault(o => o.ActionWord == query.FirstSearch.Trim() && o.Enabled); if (webSearch != null) { - string keyword = query.ActionParameters.Count > 0 ? query.GetAllRemainingParameter() : ""; + string keyword = query.SecondToEndSearch; string title = keyword; string subtitle = "Search " + webSearch.Title; if (string.IsNullOrEmpty(keyword)) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 886bc7cb89..975c8a7bf5 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -19,7 +19,7 @@ namespace Wox.Core.Plugin /// public static class PluginManager { - public const string ActionKeywordWildcard = "*"; + public const string ActionKeywordWildcardSign = "*"; public static String DebuggerMode { get; private set; } public static IPublicAPI API { get; private set; } @@ -104,7 +104,10 @@ namespace Wox.Core.Plugin public static void Query(Query query) { - QueryDispatcher.QueryDispatcher.Dispatch(query); + if (!string.IsNullOrEmpty(query.RawQuery.Trim())) + { + QueryDispatcher.QueryDispatcher.Dispatch(query); + } } public static List AllPlugins @@ -115,16 +118,24 @@ namespace Wox.Core.Plugin } } - public static bool IsRegularPluginQuery(Query query) + public static bool IsUserPluginQuery(Query query) { - if (string.IsNullOrEmpty(query.ActionName)) return false; + if (string.IsNullOrEmpty(query.RawQuery)) return false; - return plugins.Any(o => o.Metadata.PluginType == PluginType.User && o.Metadata.ActionKeyword == query.ActionName); + var strings = query.RawQuery.Split(' '); + var actionKeyword = string.Empty; + if (strings.Length > 0) + { + actionKeyword = strings[0].Trim(); + } + if (string.IsNullOrEmpty(actionKeyword)) return false; + + return plugins.Any(o => o.Metadata.PluginType == PluginType.User && o.Metadata.ActionKeyword == actionKeyword); } - public static bool IsWildcardPlugin(PluginMetadata metadata) + public static bool IsSystemPlugin(PluginMetadata metadata) { - return metadata.ActionKeyword == ActionKeywordWildcard; + return metadata.ActionKeyword == ActionKeywordWildcardSign; } public static void ActivatePluginDebugger(string path) diff --git a/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs index 6e50c81663..e5f5b76bf4 100644 --- a/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs @@ -3,18 +3,20 @@ namespace Wox.Core.Plugin.QueryDispatcher { internal static class QueryDispatcher { - private static IQueryDispatcher regularDispatcher = new RegularPluginQueryDispatcher(); - private static IQueryDispatcher wildcardDispatcher = new WildcardPluginQueryDispatcher(); + private static readonly IQueryDispatcher UserPluginDispatcher = new UserPluginQueryDispatcher(); + private static readonly IQueryDispatcher SystemPluginDispatcher = new SystemPluginQueryDispatcher(); public static void Dispatch(Wox.Plugin.Query query) { - if (PluginManager.IsRegularPluginQuery(query)) + if (PluginManager.IsUserPluginQuery(query)) { - regularDispatcher.Dispatch(query); + query.Search = query.RawQuery.Substring(query.RawQuery.IndexOf(' ') + 1); + UserPluginDispatcher.Dispatch(query); } else { - wildcardDispatcher.Dispatch(query); + query.Search = query.RawQuery; + SystemPluginDispatcher.Dispatch(query); } } } diff --git a/Wox.Core/Plugin/QueryDispatcher/WildcardPluginQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/SystemPluginQueryDispatcher.cs similarity index 89% rename from Wox.Core/Plugin/QueryDispatcher/WildcardPluginQueryDispatcher.cs rename to Wox.Core/Plugin/QueryDispatcher/SystemPluginQueryDispatcher.cs index f57c41ae58..5cda7d3e34 100644 --- a/Wox.Core/Plugin/QueryDispatcher/WildcardPluginQueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/SystemPluginQueryDispatcher.cs @@ -8,9 +8,9 @@ using Wox.Plugin; namespace Wox.Core.Plugin.QueryDispatcher { - public class WildcardPluginQueryDispatcher : IQueryDispatcher + public class SystemPluginQueryDispatcher : IQueryDispatcher { - private IEnumerable allSytemPlugins = PluginManager.AllPlugins.Where(o => PluginManager.IsWildcardPlugin(o.Metadata)); + private IEnumerable allSytemPlugins = PluginManager.AllPlugins.Where(o => PluginManager.IsSystemPlugin(o.Metadata)); public void Dispatch(Query query) { diff --git a/Wox.Core/Plugin/QueryDispatcher/RegularPluginQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/UserPluginQueryDispatcher.cs similarity index 58% rename from Wox.Core/Plugin/QueryDispatcher/RegularPluginQueryDispatcher.cs rename to Wox.Core/Plugin/QueryDispatcher/UserPluginQueryDispatcher.cs index b1cc26e424..c50344296e 100644 --- a/Wox.Core/Plugin/QueryDispatcher/RegularPluginQueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/UserPluginQueryDispatcher.cs @@ -9,14 +9,14 @@ using Wox.Plugin; namespace Wox.Core.Plugin.QueryDispatcher { - public class RegularPluginQueryDispatcher : IQueryDispatcher + public class UserPluginQueryDispatcher : IQueryDispatcher { public void Dispatch(Query query) { - PluginPair regularPlugin = PluginManager.AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionName); - if (regularPlugin != null && !string.IsNullOrEmpty(regularPlugin.Metadata.ActionKeyword)) + PluginPair userPlugin = PluginManager.AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.GetActionKeyword()); + if (userPlugin != null && !string.IsNullOrEmpty(userPlugin.Metadata.ActionKeyword)) { - var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == regularPlugin.Metadata.ID); + var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == userPlugin.Metadata.ID); if (customizedPluginConfig != null && customizedPluginConfig.Disabled) { //need to stop the loading animation @@ -28,16 +28,16 @@ namespace Wox.Core.Plugin.QueryDispatcher { try { - List results = regularPlugin.Plugin.Query(query) ?? new List(); + List results = userPlugin.Plugin.Query(query) ?? new List(); results.ForEach(o => { - o.PluginID = regularPlugin.Metadata.ID; + o.PluginID = userPlugin.Metadata.ID; }); - PluginManager.API.PushResults(query, regularPlugin.Metadata, results); + PluginManager.API.PushResults(query, userPlugin.Metadata, results); } catch (System.Exception e) { - throw new WoxPluginException(regularPlugin.Metadata.Name, e); + throw new WoxPluginException(userPlugin.Metadata.Name, e); } }); } diff --git a/Wox.Core/README.md b/Wox.Core/README.md index 337b0a463d..b2e9b83de3 100644 --- a/Wox.Core/README.md +++ b/Wox.Core/README.md @@ -2,6 +2,8 @@ ===== * Handle Query +* Define Wox exceptions * Manage Plugins (including system plugin and user plugin) * Manage Themes -* Manage i18n \ No newline at end of file +* Manage i18n +* Manage Update and version \ No newline at end of file diff --git a/Wox.Core/Wox.Core.csproj b/Wox.Core/Wox.Core.csproj index 570038c14c..b9b40bb80a 100644 --- a/Wox.Core/Wox.Core.csproj +++ b/Wox.Core/Wox.Core.csproj @@ -83,8 +83,8 @@ - - + + diff --git a/Wox.Plugin/PluginMetadata.cs b/Wox.Plugin/PluginMetadata.cs index 97e4ea15ee..406257f869 100644 --- a/Wox.Plugin/PluginMetadata.cs +++ b/Wox.Plugin/PluginMetadata.cs @@ -31,6 +31,11 @@ namespace Wox.Plugin public string IcoPath { get; set; } + public override string ToString() + { + return Name; + } + public string FullIcoPath { get diff --git a/Wox.Plugin/PluginPair.cs b/Wox.Plugin/PluginPair.cs index 9d09f7d105..b3053c0571 100644 --- a/Wox.Plugin/PluginPair.cs +++ b/Wox.Plugin/PluginPair.cs @@ -9,5 +9,10 @@ namespace Wox.Plugin { public IPlugin Plugin { get; set; } public PluginMetadata Metadata { get; set; } + + public override string ToString() + { + return Metadata.Name; + } } } diff --git a/Wox.Plugin/Properties/AssemblyInfo.cs b/Wox.Plugin/Properties/AssemblyInfo.cs index 80837687cd..a0913e1a59 100644 --- a/Wox.Plugin/Properties/AssemblyInfo.cs +++ b/Wox.Plugin/Properties/AssemblyInfo.cs @@ -16,4 +16,5 @@ using System.Runtime.InteropServices; [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: InternalsVisibleTo("Wox")] -[assembly: InternalsVisibleTo("Wox.Core")] \ No newline at end of file +[assembly: InternalsVisibleTo("Wox.Core")] +[assembly: InternalsVisibleTo("Wox.Test")] \ No newline at end of file diff --git a/Wox.Plugin/Query.cs b/Wox.Plugin/Query.cs index 1717f014a0..4a01199142 100644 --- a/Wox.Plugin/Query.cs +++ b/Wox.Plugin/Query.cs @@ -1,11 +1,112 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace Wox.Plugin { public class Query { - public string RawQuery { get; set; } + /// + /// Raw query, this includes action keyword if it has + /// We didn't recommend use this property directly. You should always use Search property. + /// + public string RawQuery { get; internal set; } + + /// + /// Search part of a query. + /// This will not include action keyword if regular plugin gets it, and if a system plugin gets it, it should be same as RawQuery. + /// Since we allow user to switch a regular plugin to system plugin, so this property will always give you the "real" query part of + /// the query + /// + public string Search { get; internal set; } + + internal string GetActionKeyword() + { + if (!string.IsNullOrEmpty(RawQuery)) + { + var strings = RawQuery.Split(' '); + if (strings.Length > 0) + { + return strings[0]; + } + } + + return string.Empty; + } + + /// + /// Return first search split by space if it has + /// + public string FirstSearch + { + get + { + return SplitSearch(0); + } + } + + /// + /// strings from second search (including) to last search + /// + public string SecondToEndSearch + { + get + { + if (string.IsNullOrEmpty(Search)) return string.Empty; + + var strings = Search.Split(' '); + if (strings.Length > 1) + { + return Search.Substring(Search.IndexOf(' ') + 1); + } + return string.Empty; + } + } + + /// + /// Return second search split by space if it has + /// + public string SecondSearch + { + get + { + return SplitSearch(1); + } + } + + /// + /// Return third search split by space if it has + /// + public string ThirdSearch + { + get + { + return SplitSearch(2); + } + } + + private string SplitSearch(int index) + { + if (string.IsNullOrEmpty(Search)) return string.Empty; + + var strings = Search.Split(' '); + if (strings.Length > index) + { + return strings[index]; + } + + return string.Empty; + } + + public override string ToString() + { + return RawQuery; + } + + [Obsolete("Use Search instead, A plugin developer shouldn't care about action name, as it may changed by users. " + + "this property will be removed in v1.3.0")] public string ActionName { get; private set; } + + [Obsolete("Use Search instead, this property will be removed in v1.3.0")] public List ActionParameters { get; private set; } public Query(string rawQuery) @@ -33,10 +134,11 @@ namespace Wox.Plugin } } + [Obsolete("Use Search instead, this method will be removed in v1.3.0")] public string GetAllRemainingParameter() { - string[] strings = RawQuery.Split(new char[]{ ' ' }, 2, System.StringSplitOptions.None); + string[] strings = RawQuery.Split(new char[] { ' ' }, 2, System.StringSplitOptions.None); if (strings.Length > 1) { return strings[1]; diff --git a/Wox.Test/QueryTest.cs b/Wox.Test/QueryTest.cs index f1d8d2806b..e1c6cb20a8 100644 --- a/Wox.Test/QueryTest.cs +++ b/Wox.Test/QueryTest.cs @@ -10,22 +10,27 @@ namespace Wox.Test public class QueryTest { [Test] - public void QueryActionTest() + public void UserPluginQueryTest() { - Query q = new Query("this"); + Query q = new Query("f file.txt file2 file3"); + q.Search = "file.txt file2 file3"; - q = new Query("ev file.txt"); - Assert.AreEqual(q.ActionName,"ev"); - Assert.AreEqual(q.ActionParameters.Count,1); - Assert.AreEqual(q.ActionParameters[0],"file.txt"); + Assert.AreEqual(q.FirstSearch, "file.txt"); + Assert.AreEqual(q.SecondSearch, "file2"); + Assert.AreEqual(q.ThirdSearch, "file3"); + Assert.AreEqual(q.SecondToEndSearch, "file2 file3"); + } - q = new Query("ev file.txt file2.txt"); - Assert.AreEqual(q.ActionName,"ev"); - Assert.AreEqual(q.ActionParameters.Count,2); - Assert.AreEqual(q.ActionParameters[1],"file2.txt"); + [Test] + public void SystemPluginQueryTest() + { + Query q = new Query("file.txt file2 file3"); + q.Search = q.RawQuery; - q = new Query("ev file.txt file2.tx st"); - Assert.AreEqual(q.GetAllRemainingParameter(), "file.txt file2.tx st"); + Assert.AreEqual(q.FirstSearch, "file.txt"); + Assert.AreEqual(q.SecondSearch, "file2"); + Assert.AreEqual(q.ThirdSearch, "file3"); + Assert.AreEqual(q.SecondToEndSearch, "file2 file3"); } } } diff --git a/Wox.sln b/Wox.sln index 3125875e5f..1759a11e0a 100644 --- a/Wox.sln +++ b/Wox.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 +VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Test", "Wox.Test\Wox.Test.csproj", "{FF742965-9A80-41A5-B042-D6C7D3A21708}" EndProject @@ -43,6 +43,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.QueryHistory", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.UpdateFeedGenerator", "Wox.UpdateFeedGenerator\Wox.UpdateFeedGenerator.csproj", "{D120E62B-EC59-4FB4-8129-EFDD4C446A5F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Everything", "Plugins\Wox.Plugin.Everything\Wox.Plugin.Everything.csproj", "{230AE83F-E92E-4E69-8355-426B305DA9C0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -125,6 +127,10 @@ Global {D120E62B-EC59-4FB4-8129-EFDD4C446A5F}.Debug|Any CPU.Build.0 = Debug|Any CPU {D120E62B-EC59-4FB4-8129-EFDD4C446A5F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D120E62B-EC59-4FB4-8129-EFDD4C446A5F}.Release|Any CPU.Build.0 = Release|Any CPU + {230AE83F-E92E-4E69-8355-426B305DA9C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {230AE83F-E92E-4E69-8355-426B305DA9C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {230AE83F-E92E-4E69-8355-426B305DA9C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {230AE83F-E92E-4E69-8355-426B305DA9C0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -142,5 +148,6 @@ Global {A3DCCBCA-ACC1-421D-B16E-210896234C26} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {F35190AA-4758-4D9E-A193-E3BDF6AD3567} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {B552DCB6-692E-4B1D-9E0B-9096A2A7E6B0} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} + {230AE83F-E92E-4E69-8355-426B305DA9C0} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} EndGlobalSection EndGlobal diff --git a/Wox/ActionKeyword.xaml.cs b/Wox/ActionKeyword.xaml.cs index 5a05015090..bc74e381e8 100644 --- a/Wox/ActionKeyword.xaml.cs +++ b/Wox/ActionKeyword.xaml.cs @@ -57,7 +57,7 @@ namespace Wox } //check new action keyword didn't used by other plugin - if (tbAction.Text.Trim() != PluginManager.ActionKeywordWildcard && PluginManager.AllPlugins.Exists(o => o.Metadata.ActionKeyword == tbAction.Text.Trim())) + if (tbAction.Text.Trim() != PluginManager.ActionKeywordWildcardSign && PluginManager.AllPlugins.Exists(o => o.Metadata.ActionKeyword == tbAction.Text.Trim())) { MessageBox.Show(InternationalizationManager.Instance.GetTranslation("newActionKeywordHasBeenAssigned")); return; diff --git a/Wox/MainWindow.xaml b/Wox/MainWindow.xaml index 448680b218..61cf46742e 100644 --- a/Wox/MainWindow.xaml +++ b/Wox/MainWindow.xaml @@ -18,7 +18,7 @@ - + diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 0680bb11da..366134aa71 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -406,16 +406,6 @@ namespace Wox pnlContextMenu.Visibility = Visibility.Collapsed; } - private bool IsWebSearchMode - { - get - { - Query q = new Query(tbQuery.Text); - return !UserSettingStorage.Instance.EnableWebSearchSuggestion && - UserSettingStorage.Instance.WebSearches.Exists(o => o.ActionWord == q.ActionName && o.Enabled); - } - } - private void Border_OnMouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) DragMove();