From 618ba376b2aaecbea240c4fd04fa7f3725a7c241 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Fri, 17 Jul 2015 15:23:38 +0800 Subject: [PATCH 01/75] Ajust maxium result item UI --- Wox/Languages/en.xaml | 2 +- Wox/Languages/zh-cn.xaml | 1 + Wox/Languages/zh-tw.xaml | 1 + Wox/SettingWindow.xaml | 6 +++--- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Wox/Languages/en.xaml b/Wox/Languages/en.xaml index 262e57555a..3d0946aa3b 100644 --- a/Wox/Languages/en.xaml +++ b/Wox/Languages/en.xaml @@ -22,8 +22,8 @@ Don't show upgrade msg if new version available Remember last launch location Language + Maximum show results - Plugin Browse more plugins diff --git a/Wox/Languages/zh-cn.xaml b/Wox/Languages/zh-cn.xaml index a0614e2385..0bf2be00e1 100644 --- a/Wox/Languages/zh-cn.xaml +++ b/Wox/Languages/zh-cn.xaml @@ -22,6 +22,7 @@ 不显示新版本提示 记住上次启动位置 语言 + 最大结果显示个数 插件 diff --git a/Wox/Languages/zh-tw.xaml b/Wox/Languages/zh-tw.xaml index 0c07eed870..c0fd4a63b5 100644 --- a/Wox/Languages/zh-tw.xaml +++ b/Wox/Languages/zh-tw.xaml @@ -22,6 +22,7 @@ 不顯示新版本提示 记住上次启动位置 語言 + 最大結果顯示個數 插件 diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index 07ab2b8a8e..a28126a8d1 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -37,11 +37,11 @@ - + - - + + From 630456f7009987ee36cf764f3cbed4fa88b8e539 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Fri, 17 Jul 2015 15:38:50 +0800 Subject: [PATCH 02/75] add missing sleep images and translations --- Plugins/Wox.Plugin.Sys/Images/sleep.png | Bin 0 -> 1240 bytes Plugins/Wox.Plugin.Sys/Languages/en.xaml | 1 + Plugins/Wox.Plugin.Sys/Languages/zh-cn.xaml | 1 + Plugins/Wox.Plugin.Sys/Languages/zh-tw.xaml | 1 + Plugins/Wox.Plugin.Sys/Sys.cs | 2 +- Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj | 3 +++ 6 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Plugins/Wox.Plugin.Sys/Images/sleep.png diff --git a/Plugins/Wox.Plugin.Sys/Images/sleep.png b/Plugins/Wox.Plugin.Sys/Images/sleep.png new file mode 100644 index 0000000000000000000000000000000000000000..c7668e7f2911ad1e642b469eb03c8c5fde56e357 GIT binary patch literal 1240 zcmV;}1Sk86P)$CL61Eo8q|Z(OB3o-4;Dly z6x2fmQi05rC1herm?hL`p;Bs!CgbRQHO|L9XYaLoxX$<7`Eu-k*l-SO@BRPpwHAA= zV;F}WdwU*95;o^N4XTtFP!<6S#ux_Ej^8ql-7U=(M@MXCk6u{#`5 zG2CMAQ7B-nvZ5+l<8p~^NfO0HixluV!Y4{D)-7&0(RxJ)^JLG(%0R53U=2hT(kVm6 z8Rp_j0fu5*?~{Aq%6>Yp4xoXoMmeSngTp(tf%-bWP? zEjF7z>^##q;P0~YO#OjepgbG#@s=74FSNAU8^EUUVtD7VS!INrTlpMI-R|KiioxMW_jZNVg_SBWt|`d5o{1egXYt6fg_u? zwEo;TZLHsTu7>Nw0Syz^Xi!8H7lI%vdBXw`8Rf)PtEFM?XdBv1HBPh&MbS zq6*`Axjwf>DITa`QFK(s+i6|Kt6|}Efks(e3$T$vFLXaCF5W(Dp zfFudry}Y=f-MI+w10rJ~P*r5H1oRJj)<0N2;~bGZ&v*fg;(<63?pT)Mfx2wLIk_Z& z78DSWurL8WC_UE`T3c4mIPdtmK_c=lA1?p`F7W{?VcJ?WloQg<5>3i45g5z`#2CKW zv5IVwn^C~NqgQcOkTCADQb^Qby$=Kte9#G_f6%jOeJ#ca9bGxP`eM5KVmfoD=oI{ZoPo2@OpFIyvRTO_7dAaIYUil20w*7e_Zbsmw1me zQm`Sc${IdsJI~?c*Z62_0~KYd8HtDEz$-i3IeM~}>Ln>Onf{7a14&|W-Ukz`pffab zONuRjU+Sm+<%2wSUlq-dFXy3^71S;(!CIxGE61;Y_OkczWeyy>N=2DtX*R-3;RLLlkNM2bBsmPK^TdJ2v7^7&I+8<2t01$f}a&a!S zi(}PXt8ruvB}EZ1eenr0xAxisaW1sGq2aJAo6(o7vH#zXfq_JY;T*dRK<(3Cx7L(v zqv*`7^kTsp;YzP*>)5xxX*Bb0d-AK+$}(+qkwta!ongqg96ktL|C+YW{m+d3oQ|M! zUE69G>E@K99z)4u1x4~nKbUyhePDO@cTGQy*!}~5elSy^H(d1q0000Close Wox Restart Wox Tweak this app + Put computer to sleep System Commands Provide System related commands. e.g. shutdown,lock,setting etc. diff --git a/Plugins/Wox.Plugin.Sys/Languages/zh-cn.xaml b/Plugins/Wox.Plugin.Sys/Languages/zh-cn.xaml index d9e10231f8..099003ebb1 100644 --- a/Plugins/Wox.Plugin.Sys/Languages/zh-cn.xaml +++ b/Plugins/Wox.Plugin.Sys/Languages/zh-cn.xaml @@ -11,6 +11,7 @@ 退出Wox 重启Wox 设置 + 休眠这台电脑 系统命令 系统系统相关的命令。例如,关机,锁定,设置等 diff --git a/Plugins/Wox.Plugin.Sys/Languages/zh-tw.xaml b/Plugins/Wox.Plugin.Sys/Languages/zh-tw.xaml index 75c93a0d1a..0fa2694af7 100644 --- a/Plugins/Wox.Plugin.Sys/Languages/zh-tw.xaml +++ b/Plugins/Wox.Plugin.Sys/Languages/zh-tw.xaml @@ -11,6 +11,7 @@ 退出Wox 重啟Wox 設置 + 休眠这台电脑 系統命令 系統系統相關的命令。例如,關機,鎖定,設置等 diff --git a/Plugins/Wox.Plugin.Sys/Sys.cs b/Plugins/Wox.Plugin.Sys/Sys.cs index f547e86e57..374bd2a64b 100644 --- a/Plugins/Wox.Plugin.Sys/Sys.cs +++ b/Plugins/Wox.Plugin.Sys/Sys.cs @@ -95,7 +95,7 @@ namespace Wox.Plugin.Sys new Result { Title = "Sleep", - SubTitle = "Put computer to sleep", + SubTitle = context.API.GetTranslation("wox_plugin_sys_sleep"), Score = 100, IcoPath = "Images\\sleep.png", Action = (c) => Application.SetSuspendState(PowerState.Suspend, false, false) diff --git a/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj b/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj index 271194ab0a..d40486dbe5 100644 --- a/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj +++ b/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj @@ -65,6 +65,9 @@ + + PreserveNewest + MSBuild:Compile Designer From 2a0e641de7b0d6c6aaef53fae13a0dbd540e7239 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Sun, 19 Jul 2015 23:08:13 +0800 Subject: [PATCH 03/75] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 53e7eff0ee..993682da9f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Wox [![Build status](https://ci.appveyor.com/api/projects/status/bfktntbivg32e103)](https://ci.appveyor.com/project/qianlifeng/wox) [![Bountysource](https://www.bountysource.com/badge/team?team_id=39433&style=raised)](https://www.bountysource.com/teams/wox?utm_source=Wox&utm_medium=shield&utm_campaign=raised) [![Alipay](https://i.alipayobjects.com/i/localhost/png/201406/2m8C9z7xQ5_src.png)](http://meiweihezi.com/dashang/dashang.php?id=ZGsyNDI=) +Wox [![Build status](https://ci.appveyor.com/api/projects/status/bfktntbivg32e103)](https://ci.appveyor.com/project/qianlifeng/wox) [![Bountysource](https://www.bountysource.com/badge/team?team_id=39433&style=raised)](https://www.bountysource.com/teams/wox?utm_source=Wox&utm_medium=shield&utm_campaign=raised) ========= [Wox](http://www.getwox.com) is a launcher for windows, which was inspired by [Alfred](http://www.alfredapp.com/) and [Launchy](http://www.launchy.net/). Wox provide an entry to search everything you want. From cf76c943b8f1254ac3ad600f2ded38ff84e38d16 Mon Sep 17 00:00:00 2001 From: junjie020 Date: Mon, 17 Aug 2015 11:22:45 +0800 Subject: [PATCH 04/75] Fix ShellExecCmdLine fucntion. Using global::System.Diagnostics.Process.Start to run program without working directory specifying. --- Wox.Infrastructure/WindowsShellRun.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wox.Infrastructure/WindowsShellRun.cs b/Wox.Infrastructure/WindowsShellRun.cs index ba5d2673ab..c0d8f23a8c 100644 --- a/Wox.Infrastructure/WindowsShellRun.cs +++ b/Wox.Infrastructure/WindowsShellRun.cs @@ -146,7 +146,7 @@ namespace Wox.Infrastructure startInfo.WindowStyle = global::System.Diagnostics.ProcessWindowStyle.Normal; startInfo.ErrorDialog = (dwSeclFlags | ShellExecCmdLineFlags.SECL_NO_UI) == 0; startInfo.ErrorDialogParentHandle = hwnd; - + startInfo.WorkingDirectory = startDir; try { global::System.Diagnostics.Process.Start(startInfo); From 99ce74772099bf2cbf28ff68239e6e8aa452deb2 Mon Sep 17 00:00:00 2001 From: Dario Ruellan Date: Sun, 23 Aug 2015 12:38:11 -0300 Subject: [PATCH 05/75] readme.md corrections and suggestions on the redaction --- README.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 993682da9f..6c51e88f4b 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ Wox [![Build status](https://ci.appveyor.com/api/projects/status/bfktntbivg32e103)](https://ci.appveyor.com/project/qianlifeng/wox) [![Bountysource](https://www.bountysource.com/badge/team?team_id=39433&style=raised)](https://www.bountysource.com/teams/wox?utm_source=Wox&utm_medium=shield&utm_campaign=raised) ========= -[Wox](http://www.getwox.com) is a launcher for windows, which was inspired by [Alfred](http://www.alfredapp.com/) and [Launchy](http://www.launchy.net/). Wox provide an entry to search everything you want. +[Wox](http://www.getwox.com) is a launcher for windows, inspired by [Alfred](http://www.alfredapp.com/) and [Launchy](http://www.launchy.net/). Wox indexes your programs, your documents, project files, folders, and bookmarks. You can launch everything with just a few keystrokes!. Features ========= -1. Search applications, files and browser bookmarks (via plugin) -2. Search web contents with shortcuts (e.g. search google with `g keyword` or `youtube keyword`) +1. Search for applications, folders, files and in the browser bookmarks (using a plugin) +2. Search the web using shortcuts (e.g. search google with `g keyword` or Youtube `youtube keyword`) 3. Themes support, get more themes from [http://www.getwox.com/theme/builder](http://www.getwox.com/theme/builder) 4. Plugin support, get more plugins from [http://www.getwox.com/plugin](http://www.getwox.com/plugin) @@ -18,24 +18,21 @@ Screenshot Download ========= -Download from [release page](https://github.com/qianlifeng/Wox/releases). +You can download the latest version on the [release page](https://github.com/qianlifeng/Wox/releases). Contribute ========= -If you are a developer, feel free to send a pull request to **Dev** branch. We still have a lot functions and bugs need to do now. Just pick one from [issues page](https://github.com/qianlifeng/Wox/issues) that you think you can fix. +If you are a developer, feel free to send a pull request to the **Dev** branch. We still have a lot of features and bugs to resolve. Take a look at [issues page](https://github.com/qianlifeng/Wox/issues) if you want to contribute :) -If you are not a developer, you can also help Wox by contributing the [Wox doc](http://doc.getwox.com). +If you are not a developer, you can still contribute to the project. Install the beta version, test things and help us with new entries and corrections to the docs [Wox doc](http://doc.getwox.com). Feedback is always welcome! - - -Doc +Docs ========= -If you have any questions about how to use Wox, please read [Wox Documentation](http://doc.getwox.com) first. Wox documentation is a good place for users to understand Wox. - +Full documentation can be found here [Wox Documentation](http://doc.getwox.com). This is a good place to start if you are installing Wox for the first time. Feel free to contribute if you want to improve, correct or translate the documentation. Discussion ========= -We build a [Wox Fourms](http://discussion.getwox.com), so users can talk about everything about Wox there. +Do you have a question or an idea for a killer feature? Discuss things with our community at the [Wox Fourms](http://discussion.getwox.com). From 2f7b5dd041475456d8503af0dbba51ac32df7f9f Mon Sep 17 00:00:00 2001 From: renzhn Date: Thu, 27 Aug 2015 19:35:56 +0800 Subject: [PATCH 06/75] update plugin program translation --- Plugins/Wox.Plugin.Program/Languages/zh-cn.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Wox.Plugin.Program/Languages/zh-cn.xaml b/Plugins/Wox.Plugin.Program/Languages/zh-cn.xaml index ee397b26be..16e4639317 100644 --- a/Plugins/Wox.Plugin.Program/Languages/zh-cn.xaml +++ b/Plugins/Wox.Plugin.Program/Languages/zh-cn.xaml @@ -10,8 +10,8 @@ 索引文件后缀 重新索引 索引中 - 指数开始菜单 - 指数注册 + 索引开始菜单 + 索引注册表 后缀 最大深度 From d9b9e02412b2f63608e3ce9cd3ebb643bfea0c32 Mon Sep 17 00:00:00 2001 From: renzhn Date: Thu, 27 Aug 2015 19:38:07 +0800 Subject: [PATCH 07/75] set port number if not zero --- Wox/SettingWindow.xaml.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index 5395de12ba..319c45bc48 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -111,7 +111,9 @@ namespace Wox cbEnableProxy.Unchecked += (o, e) => DisableProxy(); cbEnableProxy.IsChecked = UserSettingStorage.Instance.ProxyEnabled; tbProxyServer.Text = UserSettingStorage.Instance.ProxyServer; - tbProxyPort.Text = UserSettingStorage.Instance.ProxyPort.ToString(); + if (UserSettingStorage.Instance.ProxyPort != 0) { + tbProxyPort.Text = UserSettingStorage.Instance.ProxyPort.ToString(); + } tbProxyUserName.Text = UserSettingStorage.Instance.ProxyUserName; tbProxyPassword.Password = UserSettingStorage.Instance.ProxyPassword; if (UserSettingStorage.Instance.ProxyEnabled) From bc86c9b57dbf64df7eb993f7f13f581d3533cf7f Mon Sep 17 00:00:00 2001 From: renzhn Date: Thu, 27 Aug 2015 19:51:31 +0800 Subject: [PATCH 08/75] setting window: plugin --- Wox/Languages/zh-cn.xaml | 4 ++-- Wox/SettingWindow.xaml | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Wox/Languages/zh-cn.xaml b/Wox/Languages/zh-cn.xaml index 0bf2be00e1..e2ab87c4b2 100644 --- a/Wox/Languages/zh-cn.xaml +++ b/Wox/Languages/zh-cn.xaml @@ -31,8 +31,8 @@ 触发关键字 插件目录 作者 - 加载耗时:{0}ms - 查询耗时:{0}ms + 加载耗时 {0}ms + 查询耗时 {0}ms 主题 diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index a28126a8d1..4b5a39336f 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -99,16 +99,16 @@ - + - + - - - + + + From 9ce239dedbf84f730b51913f109fc64754f6eff5 Mon Sep 17 00:00:00 2001 From: renzhn Date: Thu, 27 Aug 2015 19:57:54 +0800 Subject: [PATCH 09/75] fix StringNullOrEmptyToVisibilityConverter has no 0 parameter constructor --- Wox/Converters/StringNullOrEmptyToVisibilityConverter.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Wox/Converters/StringNullOrEmptyToVisibilityConverter.cs b/Wox/Converters/StringNullOrEmptyToVisibilityConverter.cs index f536e74735..543fecd322 100644 --- a/Wox/Converters/StringNullOrEmptyToVisibilityConverter.cs +++ b/Wox/Converters/StringNullOrEmptyToVisibilityConverter.cs @@ -8,6 +8,8 @@ namespace Wox.Converters { public class StringNullOrEmptyToVisibilityConverter : ConvertorBase { + public StringNullOrEmptyToVisibilityConverter() { } + public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return string.IsNullOrEmpty(value as string) ? Visibility.Collapsed : Visibility.Visible; From 1bda9d5a26c5cdfae3cad65a29b2218889b224b4 Mon Sep 17 00:00:00 2001 From: renzhn Date: Thu, 27 Aug 2015 20:27:14 +0800 Subject: [PATCH 10/75] fix disable plugin not working --- Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs index 6c5c562c8c..b17875b6ef 100644 --- a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs @@ -6,6 +6,7 @@ using System.Text; using System.Threading; using Wox.Infrastructure; using Wox.Plugin; +using Wox.Core.UserSettings; namespace Wox.Core.Plugin.QueryDispatcher { @@ -17,6 +18,12 @@ namespace Wox.Core.Plugin.QueryDispatcher { 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)) { From 805b83da9c9c38165bba82c23c789df5c1ef68d7 Mon Sep 17 00:00:00 2001 From: Boris Makogonyuk Date: Fri, 4 Sep 2015 22:35:52 +0100 Subject: [PATCH 11/75] Added Russian translations to Wox --- Wox.Core/i18n/AvailableLanguages.cs | 4 +- Wox/Languages/ru.xaml | 127 ++++++++++++++++++++++++++++ Wox/Wox.csproj | 5 ++ 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 Wox/Languages/ru.xaml diff --git a/Wox.Core/i18n/AvailableLanguages.cs b/Wox.Core/i18n/AvailableLanguages.cs index ebf7de1b4d..e403f109a6 100644 --- a/Wox.Core/i18n/AvailableLanguages.cs +++ b/Wox.Core/i18n/AvailableLanguages.cs @@ -10,6 +10,7 @@ namespace Wox.Core.i18n public static Language English = new Language("en", "English"); public static Language Chinese = new Language("zh-cn", "中文"); public static Language Chinese_TW = new Language("zh-tw", "中文(繁体)"); + public static Language Russian = new Language("ru", "Russian"); public static List GetAvailableLanguages() { @@ -17,7 +18,8 @@ namespace Wox.Core.i18n { English, Chinese, - Chinese_TW + Chinese_TW, + Russian, }; return languages; } diff --git a/Wox/Languages/ru.xaml b/Wox/Languages/ru.xaml new file mode 100644 index 0000000000..efb3d9521a --- /dev/null +++ b/Wox/Languages/ru.xaml @@ -0,0 +1,127 @@ + + + Регистрация хоткея {0} не удалась + Не удалось запустить {0} + Неверный формат файла wox плагина + Отображать это окно выше всех при этом запросе + Не отображать это окно выше всех при этом запросе + Выполнить запрос:{0} + Последний раз выполнен в:{0} + Открыть + Настройки + О Wox + Закрыть + + + Настройки Wox + Общие + Запускать Wox при запуске системы + Скрывать Wox если потерян фокус + Не отображать сообщение об обновлении когда доступна новая версия + Запомнить последнее место запуска + Язык + Максимальное количество результатов + + + Плагины + Найти больше плагинов + Отключить + Ключевое слово + Папка + Автор + Инициализация: {0}ms + Запрос: {0}ms + + + Темы + Найти больше тем + Привет Wox + Шрифт запросов + Шрифт результатов + Оконный режим + Прозрачность + + + Горячие клавиши + Горячая клавиша Wox + Задаваемые горячие клавиши для запросов + Удалить + Изменить + Добавить + Сначала выберите элемент + Вы уверены что хотите удалить горячую клавишу для плагина {0}? + + + Прокси + Включить прокси + Сервер + Порт + Логин + Пароль + Проверить + Сохранить + Необходимо задать сервер + Необходимо задать порт + Неверный формат порта + Прокси успешно сохранён + Прокси сервер задан правильно + Подключение к прокси серверу не удалось + + + О Wox + Сайт + Версия + Вы воспользовались Wox уже {0} раз + + + Текущая горячая клавиша + Новая горячая клавиша + Отменить + Подтвердить + Не удалось найти заданный плагин + Новая горячая клавиша не может быть пустой + Новая горячая клавиша уже используется другим плагином. Пожалуйста, зайдайте новую + Сохранено + Используйте * в случае, если вы не хотите задавать конкретную горячую клавишу + + + + Проверить + Горячая клавиша недоступна. Пожалуйста, зайдайте новую + Недействительная горячая клавиша плагина + Изменить + + + Горячая клавиша недоступна + + + + Версия + Время + Пожалуйста, сообщите что произошло когда произошёл сбой в приложении, чтобы мы могли его исправить + Отправить отчёт + Отмена + Общие + Исключения + Тип исключения + Источник + Трессировка стека + Отправляем + Отчёт успешно отправлен + Не удалось отправить отчёт + Произошёл сбой в Wox + + + Доступна новая версия Wox V{0} + Произошла ошибка при попытке установить обновление + Обновить + Отмена + Это обновление перезапустит Wox + Следующие файлы будут обновлены + Обновить файлы + Описание обновления + + + \ No newline at end of file diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 238aa8ef11..3a83ac2cf4 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -214,6 +214,11 @@ Designer PreserveNewest + + MSBuild:Compile + Designer + PreserveNewest + MSBuild:Compile Designer From 878213887fc72ec4aaaf211fbd028bcd9e5e576c Mon Sep 17 00:00:00 2001 From: Boris Makogonyuk Date: Fri, 4 Sep 2015 22:38:28 +0100 Subject: [PATCH 12/75] =?UTF-8?q?Change=20Russian=20to=20=D0=A0=D1=83?= =?UTF-8?q?=D1=81=D1=81=D0=BA=D0=B8=D0=B9=20for=20the=20language=20selecto?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Wox.Core/i18n/AvailableLanguages.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wox.Core/i18n/AvailableLanguages.cs b/Wox.Core/i18n/AvailableLanguages.cs index e403f109a6..a9805e174e 100644 --- a/Wox.Core/i18n/AvailableLanguages.cs +++ b/Wox.Core/i18n/AvailableLanguages.cs @@ -10,7 +10,7 @@ namespace Wox.Core.i18n public static Language English = new Language("en", "English"); public static Language Chinese = new Language("zh-cn", "中文"); public static Language Chinese_TW = new Language("zh-tw", "中文(繁体)"); - public static Language Russian = new Language("ru", "Russian"); + public static Language Russian = new Language("ru", "Русский"); public static List GetAvailableLanguages() { From a1988f91c1ae916f082343d33a1bc5bc3d792095 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Fri, 25 Sep 2015 23:43:09 +0300 Subject: [PATCH 13/75] fix tab populating in settings (fixes #291) --- Wox/SettingWindow.xaml | 8 +++---- Wox/SettingWindow.xaml.cs | 50 ++++++++++++++------------------------- 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index 4b5a39336f..34582c8524 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -20,7 +20,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -201,7 +201,7 @@ - + diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index 319c45bc48..5c8a5dd3b2 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -164,6 +164,24 @@ namespace Wox } } + private void settingTab_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + // Update controls inside the selected tab + + if (tabPlugin.IsSelected) + { + OnPluginTabSelected(); + } + else if (tabTheme.IsSelected) + { + OnThemeTabSelected(); + } + else if (tabHotkey.IsSelected) + { + OnHotkeyTabSelected(); + } + } + #region General private void LoadLanguages() @@ -243,17 +261,6 @@ namespace Wox } } - - private void TabHotkey_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) - { - var tabItem = sender as TabItem; - var clickingBody = (tabItem.Content as UIElement).IsMouseOver; - if (!clickingBody) - { - OnHotkeyTabSelected(); - } - } - private void OnHotkeyTabSelected() { ctlHotkey.HotkeyChanged += ctlHotkey_OnHotkeyChanged; @@ -422,16 +429,6 @@ namespace Wox } - private void TabTheme_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) - { - var tabItem = sender as TabItem; - var clickingBody = (tabItem.Content as UIElement).IsMouseOver; - if (!clickingBody) - { - OnThemeTabSelected(); - } - } - private void ThemeComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { string themeName = themeComboBox.SelectedItem.ToString(); @@ -666,17 +663,6 @@ namespace Wox lbPlugins.SelectedIndex = 0; } - private void TabPlugin_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) - { - var tabItem = sender as TabItem; - var clickingBody = (tabItem.Content as UIElement).IsMouseOver; - if (!clickingBody) - { - OnPluginTabSelected(); - } - } - - #endregion #region Proxy From 860210628ef38bff49df04e3c84fea15b31a3fc9 Mon Sep 17 00:00:00 2001 From: Ioannis G Date: Sat, 26 Sep 2015 00:50:22 +0300 Subject: [PATCH 14/75] close settings with esc --- Wox/HotkeyControl.xaml.cs | 5 +++++ Wox/SettingWindow.xaml | 2 +- Wox/SettingWindow.xaml.cs | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Wox/HotkeyControl.xaml.cs b/Wox/HotkeyControl.xaml.cs index 73b16f033b..135769c743 100644 --- a/Wox/HotkeyControl.xaml.cs +++ b/Wox/HotkeyControl.xaml.cs @@ -108,5 +108,10 @@ namespace Wox return false; } + + public new bool IsFocused + { + get { return tbHotkey.IsFocused; } + } } } diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index 34582c8524..ac40627a54 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -11,7 +11,7 @@ Title="{DynamicResource woxsettings}" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" - Height="600" Width="800"> + Height="600" Width="800" PreviewKeyDown="Window_PreviewKeyDown"> Date: Tue, 6 Oct 2015 14:46:12 +0200 Subject: [PATCH 15/75] Fixed commit #334 multiple SelectionChanged firing --- Wox/SettingWindow.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index daa6d60d24..7ede741c6a 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -167,6 +167,7 @@ namespace Wox private void settingTab_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Update controls inside the selected tab + if (e.OriginalSource != settingTab) return; if (tabPlugin.IsSelected) { From 7273e1218a70265ca06408ee420b8b0f57906c13 Mon Sep 17 00:00:00 2001 From: Boris Makogonyuk Date: Thu, 8 Oct 2015 00:17:37 +0200 Subject: [PATCH 16/75] Wox now has an option to ignore hotkeys when the focused window is topmost. This will ignore not only the main Wox hotkey but also plugin hotkeys. ~ WindowIntelopHelper edited ~ User settings entry added ~ Checkbox added to General tab (as well as its events) ~ Language entries added for en/ru --- Wox.Core/UserSettings/UserSettingStorage.cs | 3 +++ Wox/Helper/WindowIntelopHelper.cs | 16 +++++++++++++++- Wox/Languages/en.xaml | 1 + Wox/Languages/ru.xaml | 1 + Wox/Languages/zh-cn.xaml | 1 + Wox/Languages/zh-tw.xaml | 1 + Wox/MainWindow.xaml.cs | 16 ++++++++++++++++ Wox/SettingWindow.xaml | 3 +++ Wox/SettingWindow.xaml.cs | 16 +++++++++++++++- 9 files changed, 56 insertions(+), 2 deletions(-) diff --git a/Wox.Core/UserSettings/UserSettingStorage.cs b/Wox.Core/UserSettings/UserSettingStorage.cs index c01538e623..75f00ce48a 100644 --- a/Wox.Core/UserSettings/UserSettingStorage.cs +++ b/Wox.Core/UserSettings/UserSettingStorage.cs @@ -86,6 +86,9 @@ namespace Wox.Core.UserSettings [JsonProperty] public bool RememberLastLaunchLocation { get; set; } + [JsonProperty] + public bool IgnoreHotkeysOnTopMostFocus { get; set; } + [JsonProperty] public string ProxyServer { get; set; } diff --git a/Wox/Helper/WindowIntelopHelper.cs b/Wox/Helper/WindowIntelopHelper.cs index 2e5179b7b4..caf7c2a89c 100644 --- a/Wox/Helper/WindowIntelopHelper.cs +++ b/Wox/Helper/WindowIntelopHelper.cs @@ -10,14 +10,28 @@ namespace Wox.Helper public class WindowIntelopHelper { private const int GWL_STYLE = -16; //WPF's Message code for Title Bar's Style + private const int GWL_EXSTYLE = -20; //Gets the exstyle of the window + private const int WS_EX_TOPMOST = 0x00000008; //Topmost flag private const int WS_SYSMENU = 0x80000; //WPF's Message code for System Menu - + [DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowLong(IntPtr hWnd, int nIndex); [DllImport("user32.dll")] private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); + [DllImport("user32.dll")] + private static extern IntPtr GetForegroundWindow(); + + /// + ///Checks if the foreground window is TopMost (even Wox) + /// + /// + public static bool IsForegroundWindowTopMost() + { + return (GetWindowLong(GetForegroundWindow(), GWL_EXSTYLE) & WS_EX_TOPMOST) == WS_EX_TOPMOST; + } + /// /// disable windows toolbar's control box /// this will also disable system menu with Alt+Space hotkey diff --git a/Wox/Languages/en.xaml b/Wox/Languages/en.xaml index 3d0946aa3b..5871b9fae2 100644 --- a/Wox/Languages/en.xaml +++ b/Wox/Languages/en.xaml @@ -23,6 +23,7 @@ Remember last launch location Language Maximum show results + Ignore hotkeys if foreground window is TopMost Plugin diff --git a/Wox/Languages/ru.xaml b/Wox/Languages/ru.xaml index efb3d9521a..ebf3f14886 100644 --- a/Wox/Languages/ru.xaml +++ b/Wox/Languages/ru.xaml @@ -23,6 +23,7 @@ Запомнить последнее место запуска Язык Максимальное количество результатов + Игнорировать горячие клавиши, если окно в фокусе самое верхнее Плагины diff --git a/Wox/Languages/zh-cn.xaml b/Wox/Languages/zh-cn.xaml index e2ab87c4b2..7768be27ee 100644 --- a/Wox/Languages/zh-cn.xaml +++ b/Wox/Languages/zh-cn.xaml @@ -23,6 +23,7 @@ 记住上次启动位置 语言 最大结果显示个数 + Ignore hotkeys if foreground window is TopMost 插件 diff --git a/Wox/Languages/zh-tw.xaml b/Wox/Languages/zh-tw.xaml index c0fd4a63b5..ae59971755 100644 --- a/Wox/Languages/zh-tw.xaml +++ b/Wox/Languages/zh-tw.xaml @@ -23,6 +23,7 @@ 记住上次启动位置 語言 最大結果顯示個數 + Ignore hotkeys if foreground window is TopMost 插件 diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 35e7df4965..01d9f94f79 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -356,6 +356,20 @@ namespace Wox } } + /// + /// Checks if Wox should ignore any hotkeys + /// + /// + private bool ShouldIgnoreHotkeys() + { + + if (!IsVisible + && UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus + && WindowIntelopHelper.IsForegroundWindowTopMost()) + return true; + return false; + } + private void SetCustomPluginHotkey() { if (UserSettingStorage.Instance.CustomPluginHotkeys == null) return; @@ -364,6 +378,7 @@ namespace Wox CustomPluginHotkey hotkey1 = hotkey; SetHotkey(hotkey.Hotkey, delegate { + if (ShouldIgnoreHotkeys()) return; ShowApp(); ChangeQuery(hotkey1.ActionKeyword, true); }); @@ -372,6 +387,7 @@ namespace Wox private void OnHotkey(object sender, HotkeyEventArgs e) { + if (ShouldIgnoreHotkeys()) return; ToggleWox(); e.Handled = true; } diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index ac40627a54..bc504df44c 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -35,6 +35,9 @@ + + + diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index 7ede741c6a..36021206de 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -49,7 +49,6 @@ namespace Wox private void Setting_Loaded(object sender, RoutedEventArgs ev) { #region General - cbHideWhenDeactive.Checked += (o, e) => { UserSettingStorage.Instance.HideWhenDeactive = true; @@ -86,6 +85,20 @@ namespace Wox UserSettingStorage.Instance.Save(); }; + cbIgnoreHotkeysIfWindowIsTopmost.Checked += (o, e) => + { + UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus = true; + UserSettingStorage.Instance.Save(); + }; + + + cbIgnoreHotkeysIfWindowIsTopmost.Unchecked += (o, e) => + { + UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus = false; + UserSettingStorage.Instance.Save(); + }; + + cbStartWithWindows.IsChecked = CheckApplicationIsStartupWithWindow(); comboMaxResultsToShow.SelectionChanged += (o, e) => { @@ -97,6 +110,7 @@ namespace Wox cbHideWhenDeactive.IsChecked = UserSettingStorage.Instance.HideWhenDeactive; cbDontPromptUpdateMsg.IsChecked = UserSettingStorage.Instance.DontPromptUpdateMsg; cbRememberLastLocation.IsChecked = UserSettingStorage.Instance.RememberLastLaunchLocation; + cbIgnoreHotkeysIfWindowIsTopmost.IsChecked = UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus; LoadLanguages(); comboMaxResultsToShow.ItemsSource = Enumerable.Range(2, 16); From 3fbebfc283bfe48ef56b2e03fe2b9b0057a8f5a1 Mon Sep 17 00:00:00 2001 From: Boris Makogonyuk Date: Thu, 8 Oct 2015 00:52:52 +0200 Subject: [PATCH 17/75] ~Changed how the fullscreen detection work. Checking by Topmost was a stupid idea. It will now check for the window to fill the whole screen area. --- Wox/Helper/WindowIntelopHelper.cs | 77 +++++++++++++++++++++++++------ Wox/MainWindow.xaml.cs | 10 ++-- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/Wox/Helper/WindowIntelopHelper.cs b/Wox/Helper/WindowIntelopHelper.cs index caf7c2a89c..feccd8f6a4 100644 --- a/Wox/Helper/WindowIntelopHelper.cs +++ b/Wox/Helper/WindowIntelopHelper.cs @@ -1,19 +1,36 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Drawing; using System.Runtime.InteropServices; using System.Windows; +using System.Windows.Forms; +using System.Windows.Interop; namespace Wox.Helper { public class WindowIntelopHelper { private const int GWL_STYLE = -16; //WPF's Message code for Title Bar's Style - private const int GWL_EXSTYLE = -20; //Gets the exstyle of the window - private const int WS_EX_TOPMOST = 0x00000008; //Topmost flag private const int WS_SYSMENU = 0x80000; //WPF's Message code for System Menu + private static IntPtr _hwnd_shell; + private static IntPtr _hwnd_desktop; + //Accessors for shell and desktop handlers + //Will set the variables once and then will return them + private static IntPtr HWND_SHELL + { + get + { + return _hwnd_shell != null ? _hwnd_shell : _hwnd_shell = GetShellWindow(); + } + } + private static IntPtr HWND_DESKTOP + { + get + { + return _hwnd_desktop != null ? _hwnd_desktop : _hwnd_desktop = GetDesktopWindow(); + } + } + [DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowLong(IntPtr hWnd, int nIndex); @@ -23,23 +40,53 @@ namespace Wox.Helper [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); - /// - ///Checks if the foreground window is TopMost (even Wox) - /// - /// - public static bool IsForegroundWindowTopMost() + [DllImport("user32.dll")] + private static extern IntPtr GetDesktopWindow(); + + [DllImport("user32.dll")] + private static extern IntPtr GetShellWindow(); + + [DllImport("user32.dll", SetLastError = true)] + private static extern int GetWindowRect(IntPtr hwnd, out RECT rc); + + public static bool IsWindowFullscreen() { - return (GetWindowLong(GetForegroundWindow(), GWL_EXSTYLE) & WS_EX_TOPMOST) == WS_EX_TOPMOST; + RECT foreWinBounds; + Rectangle screenBounds; + var hWnd = GetForegroundWindow(); + if (!hWnd.Equals(IntPtr.Zero)) + { + if (!(hWnd.Equals(HWND_DESKTOP) || hWnd.Equals(HWND_SHELL))) + { + GetWindowRect(hWnd, out foreWinBounds); + screenBounds = Screen.FromHandle(hWnd).Bounds; + if ((foreWinBounds.Bottom - foreWinBounds.Top) == screenBounds.Height && (foreWinBounds.Right - foreWinBounds.Left) == screenBounds.Width) + { + return true; + } + } + } + + return false; } /// - /// disable windows toolbar's control box - /// this will also disable system menu with Alt+Space hotkey + /// disable windows toolbar's control box + /// this will also disable system menu with Alt+Space hotkey /// public static void DisableControlBox(Window win) { - var hwnd = new System.Windows.Interop.WindowInteropHelper(win).Handle; + var hwnd = new WindowInteropHelper(win).Handle; SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU); } + + [StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public int Left; + public int Top; + public int Right; + public int Bottom; + } } -} +} \ No newline at end of file diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 01d9f94f79..07a98f0872 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -362,11 +362,11 @@ namespace Wox /// private bool ShouldIgnoreHotkeys() { - - if (!IsVisible - && UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus - && WindowIntelopHelper.IsForegroundWindowTopMost()) - return true; + //double if to omit calling win32 function + if (UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus) + if(WindowIntelopHelper.IsWindowFullscreen()) + return true; + return false; } From dc4c33c0d5db8b05c1c7f5594f2f3c429fb0a41f Mon Sep 17 00:00:00 2001 From: Boris Makogonyuk Date: Thu, 8 Oct 2015 01:02:36 +0200 Subject: [PATCH 18/75] Reflected functionality changes from the last commit on the whole project. --- Wox.Core/UserSettings/UserSettingStorage.cs | 2 +- Wox/Languages/en.xaml | 2 +- Wox/Languages/ru.xaml | 2 +- Wox/Languages/zh-cn.xaml | 2 +- Wox/Languages/zh-tw.xaml | 2 +- Wox/MainWindow.xaml.cs | 2 +- Wox/SettingWindow.xaml | 4 ++-- Wox/SettingWindow.xaml.cs | 10 +++++----- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Wox.Core/UserSettings/UserSettingStorage.cs b/Wox.Core/UserSettings/UserSettingStorage.cs index 75f00ce48a..632aaaa507 100644 --- a/Wox.Core/UserSettings/UserSettingStorage.cs +++ b/Wox.Core/UserSettings/UserSettingStorage.cs @@ -87,7 +87,7 @@ namespace Wox.Core.UserSettings public bool RememberLastLaunchLocation { get; set; } [JsonProperty] - public bool IgnoreHotkeysOnTopMostFocus { get; set; } + public bool IgnoreHotkeysOnFullscreen { get; set; } [JsonProperty] public string ProxyServer { get; set; } diff --git a/Wox/Languages/en.xaml b/Wox/Languages/en.xaml index 5871b9fae2..fe252ebb98 100644 --- a/Wox/Languages/en.xaml +++ b/Wox/Languages/en.xaml @@ -23,7 +23,7 @@ Remember last launch location Language Maximum show results - Ignore hotkeys if foreground window is TopMost + Ignore hotkeys if window is fullscreen Plugin diff --git a/Wox/Languages/ru.xaml b/Wox/Languages/ru.xaml index ebf3f14886..e09aa9bc73 100644 --- a/Wox/Languages/ru.xaml +++ b/Wox/Languages/ru.xaml @@ -23,7 +23,7 @@ Запомнить последнее место запуска Язык Максимальное количество результатов - Игнорировать горячие клавиши, если окно в фокусе самое верхнее + Игнорировать горячие клавиши, если окно в полноэкранном режиме Плагины diff --git a/Wox/Languages/zh-cn.xaml b/Wox/Languages/zh-cn.xaml index 7768be27ee..7e00547603 100644 --- a/Wox/Languages/zh-cn.xaml +++ b/Wox/Languages/zh-cn.xaml @@ -23,7 +23,7 @@ 记住上次启动位置 语言 最大结果显示个数 - Ignore hotkeys if foreground window is TopMost + Ignore hotkeys if foreground window is TopMost 插件 diff --git a/Wox/Languages/zh-tw.xaml b/Wox/Languages/zh-tw.xaml index ae59971755..0f1ab8f9c4 100644 --- a/Wox/Languages/zh-tw.xaml +++ b/Wox/Languages/zh-tw.xaml @@ -23,7 +23,7 @@ 记住上次启动位置 語言 最大結果顯示個數 - Ignore hotkeys if foreground window is TopMost + Ignore hotkeys if foreground window is TopMost 插件 diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 07a98f0872..9e305ff40c 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -363,7 +363,7 @@ namespace Wox private bool ShouldIgnoreHotkeys() { //double if to omit calling win32 function - if (UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus) + if (UserSettingStorage.Instance.IgnoreHotkeysOnFullscreen) if(WindowIntelopHelper.IsWindowFullscreen()) return true; diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index bc504df44c..b322cf16d5 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -35,8 +35,8 @@ - - + + diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index 36021206de..5520b4c534 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -85,16 +85,16 @@ namespace Wox UserSettingStorage.Instance.Save(); }; - cbIgnoreHotkeysIfWindowIsTopmost.Checked += (o, e) => + cbIgnoreHotkeysOnFullscreen.Checked += (o, e) => { - UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus = true; + UserSettingStorage.Instance.IgnoreHotkeysOnFullscreen = true; UserSettingStorage.Instance.Save(); }; - cbIgnoreHotkeysIfWindowIsTopmost.Unchecked += (o, e) => + cbIgnoreHotkeysOnFullscreen.Unchecked += (o, e) => { - UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus = false; + UserSettingStorage.Instance.IgnoreHotkeysOnFullscreen = false; UserSettingStorage.Instance.Save(); }; @@ -110,7 +110,7 @@ namespace Wox cbHideWhenDeactive.IsChecked = UserSettingStorage.Instance.HideWhenDeactive; cbDontPromptUpdateMsg.IsChecked = UserSettingStorage.Instance.DontPromptUpdateMsg; cbRememberLastLocation.IsChecked = UserSettingStorage.Instance.RememberLastLaunchLocation; - cbIgnoreHotkeysIfWindowIsTopmost.IsChecked = UserSettingStorage.Instance.IgnoreHotkeysOnTopMostFocus; + cbIgnoreHotkeysOnFullscreen.IsChecked = UserSettingStorage.Instance.IgnoreHotkeysOnFullscreen; LoadLanguages(); comboMaxResultsToShow.ItemsSource = Enumerable.Range(2, 16); From 559eebbb702ead806b20fffa0a2fe45c5f845ed1 Mon Sep 17 00:00:00 2001 From: Boris Makogonyuk Date: Wed, 14 Oct 2015 18:41:45 +0200 Subject: [PATCH 19/75] Issue: If Wox was set to ignore hotkeys on full-screen it would fail. Cause: Compared IntPtr with null. IntPtr is never null. --- Wox/Helper/WindowIntelopHelper.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Wox/Helper/WindowIntelopHelper.cs b/Wox/Helper/WindowIntelopHelper.cs index feccd8f6a4..4a0223a19e 100644 --- a/Wox/Helper/WindowIntelopHelper.cs +++ b/Wox/Helper/WindowIntelopHelper.cs @@ -13,21 +13,21 @@ namespace Wox.Helper private const int WS_SYSMENU = 0x80000; //WPF's Message code for System Menu private static IntPtr _hwnd_shell; private static IntPtr _hwnd_desktop; - + //Accessors for shell and desktop handlers //Will set the variables once and then will return them private static IntPtr HWND_SHELL { get { - return _hwnd_shell != null ? _hwnd_shell : _hwnd_shell = GetShellWindow(); + return _hwnd_shell != IntPtr.Zero ? _hwnd_shell : _hwnd_shell = GetShellWindow(); } } private static IntPtr HWND_DESKTOP { get { - return _hwnd_desktop != null ? _hwnd_desktop : _hwnd_desktop = GetDesktopWindow(); + return _hwnd_desktop != IntPtr.Zero ? _hwnd_desktop : _hwnd_desktop = GetDesktopWindow(); } } From 2538a79ef01ed4bf038f033422f86dadd5070433 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Fri, 30 Oct 2015 19:44:41 +0000 Subject: [PATCH 20/75] Remove unused reference System.xaml also removed because .net 3.5 doesn't has this dll, and it resolve the issue when using code metrics --- Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj | 1 - .../Wox.Plugin.Caculator.csproj | 210 +++++++++--------- .../Wox.Plugin.Color/Wox.Plugin.Color.csproj | 6 - .../Wox.Plugin.ControlPanel.csproj | 5 - .../Wox.Plugin.Everything.csproj | 5 - .../Wox.Plugin.Folder.csproj | 1 - .../Wox.Plugin.PluginIndicator.csproj | 6 - .../Wox.Plugin.PluginManagement.csproj | 5 - Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj | 1 - Plugins/Wox.Plugin.Url/UrlPlugin.cs | 1 - Plugins/Wox.Plugin.Url/Wox.Plugin.Url.csproj | 8 - .../Wox.Plugin.WebSearch.csproj | 1 - Wox.Core/Wox.Core.csproj | 4 - Wox.CrashReporter/ReportWindow.xaml.cs | 2 - Wox.CrashReporter/Wox.CrashReporter.csproj | 12 - Wox.Infrastructure/Http/HttpRequest.cs | 1 - Wox.Infrastructure/Storage/BaseStorage.cs | 1 - Wox.Infrastructure/Wox.Infrastructure.csproj | 9 - Wox.Plugin/Wox.Plugin.csproj | 6 - Wox.Test/Plugins/PluginInitTest.cs | 1 - Wox.Test/UrlPluginTest.cs | 1 - Wox.Test/Wox.Test.csproj | 9 - Wox/Wox.csproj | 15 -- 23 files changed, 101 insertions(+), 210 deletions(-) diff --git a/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj b/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj index b64f79fc27..6f6765299c 100644 --- a/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj +++ b/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj @@ -44,7 +44,6 @@ - diff --git a/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj b/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj index f564925281..63d5cf4402 100644 --- a/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj +++ b/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj @@ -1,116 +1,108 @@ - - - - - Debug - AnyCPU - {59BD9891-3837-438A-958D-ADC7F91F6F7E} - Library - Properties - Wox.Plugin.Caculator - Wox.Plugin.Caculator - v3.5 - 512 - ..\..\ - true - - - - true - full - false - ..\..\Output\Debug\Plugins\Wox.Plugin.Caculator\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - ..\..\Output\Release\Plugins\Wox.Plugin.Caculator\ - TRACE - prompt - 4 - false - - - - - - - - - - - - False - ..\..\packages\YAMP.1.4.0\lib\net35\YAMP.dll - - - - - - - - - - PreserveNewest - - - - - {4fd29318-a8ab-4d8f-aa47-60bc241b8da3} - Wox.Infrastructure - - - {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} - Wox.Plugin - - - - - PreserveNewest - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - MSBuild:Compile - Designer - PreserveNewest - - - - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - - - - + + + + + Debug + AnyCPU + {59BD9891-3837-438A-958D-ADC7F91F6F7E} + Library + Properties + Wox.Plugin.Caculator + Wox.Plugin.Caculator + v3.5 + 512 + ..\..\ + true + + + + true + full + false + ..\..\Output\Debug\Plugins\Wox.Plugin.Caculator\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + ..\..\Output\Release\Plugins\Wox.Plugin.Caculator\ + TRACE + prompt + 4 + false + + + + + + + + False + ..\..\packages\YAMP.1.4.0\lib\net35\YAMP.dll + + + + + + + + + + PreserveNewest + + + + + {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} + Wox.Plugin + + + + + PreserveNewest + + + + + MSBuild:Compile + Designer + PreserveNewest + + + + + MSBuild:Compile + Designer + PreserveNewest + + + + + MSBuild:Compile + Designer + PreserveNewest + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + + --> \ No newline at end of file diff --git a/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj b/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj index 8a0428fad2..847df6d016 100644 --- a/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj +++ b/Plugins/Wox.Plugin.Color/Wox.Plugin.Color.csproj @@ -34,14 +34,8 @@ - - - - - - diff --git a/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj b/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj index 9d4cb13c89..86f8a2c2a8 100644 --- a/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj +++ b/Plugins/Wox.Plugin.ControlPanel/Wox.Plugin.ControlPanel.csproj @@ -33,14 +33,9 @@ false - - - - - diff --git a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj index 3617934043..e4c42144e0 100644 --- a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj +++ b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj @@ -41,14 +41,9 @@ ..\..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll - - - - - diff --git a/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj b/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj index 60d98225c4..ab9bcb3338 100644 --- a/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj +++ b/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj @@ -44,7 +44,6 @@ - diff --git a/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj b/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj index b0b463c006..e57ab20a8d 100644 --- a/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj +++ b/Plugins/Wox.Plugin.PluginIndicator/Wox.Plugin.PluginIndicator.csproj @@ -33,13 +33,7 @@ false - - - - - - diff --git a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj index cc1174c98f..31e19d2f77 100644 --- a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj +++ b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj @@ -39,14 +39,9 @@ ..\..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll True - - - - - diff --git a/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj b/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj index d40486dbe5..99cf44b067 100644 --- a/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj +++ b/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj @@ -40,7 +40,6 @@ - diff --git a/Plugins/Wox.Plugin.Url/UrlPlugin.cs b/Plugins/Wox.Plugin.Url/UrlPlugin.cs index ae871d2b23..51c8f2ed95 100644 --- a/Plugins/Wox.Plugin.Url/UrlPlugin.cs +++ b/Plugins/Wox.Plugin.Url/UrlPlugin.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.IO; using System.Reflection; using System.Text.RegularExpressions; -using System.Windows; namespace Wox.Plugin.Url { diff --git a/Plugins/Wox.Plugin.Url/Wox.Plugin.Url.csproj b/Plugins/Wox.Plugin.Url/Wox.Plugin.Url.csproj index aabcb45255..23e5ac1a8f 100644 --- a/Plugins/Wox.Plugin.Url/Wox.Plugin.Url.csproj +++ b/Plugins/Wox.Plugin.Url/Wox.Plugin.Url.csproj @@ -33,16 +33,8 @@ false - - - - - - - - diff --git a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj index b4751d37bb..acf918a8a8 100644 --- a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj +++ b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj @@ -43,7 +43,6 @@ - diff --git a/Wox.Core/Wox.Core.csproj b/Wox.Core/Wox.Core.csproj index fa06e3840f..e49ed8d903 100644 --- a/Wox.Core/Wox.Core.csproj +++ b/Wox.Core/Wox.Core.csproj @@ -53,10 +53,6 @@ - - - - diff --git a/Wox.CrashReporter/ReportWindow.xaml.cs b/Wox.CrashReporter/ReportWindow.xaml.cs index ff948f7955..f2d408368f 100644 --- a/Wox.CrashReporter/ReportWindow.xaml.cs +++ b/Wox.CrashReporter/ReportWindow.xaml.cs @@ -19,8 +19,6 @@ using Wox.Core.i18n; using Wox.Core.UI; using Wox.Core.Updater; using Wox.Core.UserSettings; -using Wox.Infrastructure.Http; -using Wox.Infrastructure.Logger; namespace Wox.CrashReporter { diff --git a/Wox.CrashReporter/Wox.CrashReporter.csproj b/Wox.CrashReporter/Wox.CrashReporter.csproj index d8c5620504..bb1afc0654 100644 --- a/Wox.CrashReporter/Wox.CrashReporter.csproj +++ b/Wox.CrashReporter/Wox.CrashReporter.csproj @@ -38,14 +38,10 @@ ..\packages\Exceptionless.1.5.2121\lib\net35\Exceptionless.dll - - ..\packages\Exceptionless.1.5.2121\lib\net35\Exceptionless.Models.dll - - @@ -70,14 +66,6 @@ {B749F0DB-8E75-47DB-9E5E-265D16D0C0D2} Wox.Core - - {4FD29318-A8AB-4D8F-AA47-60BC241B8DA3} - Wox.Infrastructure - - - {8451ECDD-2EA4-4966-BB0A-7BBC40138E80} - Wox.Plugin - diff --git a/Wox.Infrastructure/Http/HttpRequest.cs b/Wox.Infrastructure/Http/HttpRequest.cs index e80501936f..c979cca6d1 100644 --- a/Wox.Infrastructure/Http/HttpRequest.cs +++ b/Wox.Infrastructure/Http/HttpRequest.cs @@ -1,5 +1,4 @@ using System; -using System.Drawing; using System.IO; using System.Net; using System.Text; diff --git a/Wox.Infrastructure/Storage/BaseStorage.cs b/Wox.Infrastructure/Storage/BaseStorage.cs index 3db9bfee70..a8443b0b08 100644 --- a/Wox.Infrastructure/Storage/BaseStorage.cs +++ b/Wox.Infrastructure/Storage/BaseStorage.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Reflection; using System.Runtime.InteropServices.ComTypes; using System.Text; -using System.Windows.Forms; using Newtonsoft.Json; namespace Wox.Infrastructure.Storage diff --git a/Wox.Infrastructure/Wox.Infrastructure.csproj b/Wox.Infrastructure/Wox.Infrastructure.csproj index 80a96bc322..7d5db6eeb5 100644 --- a/Wox.Infrastructure/Wox.Infrastructure.csproj +++ b/Wox.Infrastructure/Wox.Infrastructure.csproj @@ -37,7 +37,6 @@ false - False ..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll @@ -45,16 +44,8 @@ ..\packages\NLog.3.2.0.0\lib\net35\NLog.dll - - - - - - - - diff --git a/Wox.Plugin/Wox.Plugin.csproj b/Wox.Plugin/Wox.Plugin.csproj index 25c14f4bd9..7f75332bd9 100644 --- a/Wox.Plugin/Wox.Plugin.csproj +++ b/Wox.Plugin/Wox.Plugin.csproj @@ -35,13 +35,7 @@ - - - - - - diff --git a/Wox.Test/Plugins/PluginInitTest.cs b/Wox.Test/Plugins/PluginInitTest.cs index 4c3b026c08..47c5928fea 100644 --- a/Wox.Test/Plugins/PluginInitTest.cs +++ b/Wox.Test/Plugins/PluginInitTest.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using Moq; using NUnit.Framework; using Wox.Core.Exception; using Wox.Core.Plugin; diff --git a/Wox.Test/UrlPluginTest.cs b/Wox.Test/UrlPluginTest.cs index daaa9641cb..754bf41c92 100644 --- a/Wox.Test/UrlPluginTest.cs +++ b/Wox.Test/UrlPluginTest.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using System.Text.RegularExpressions; using NUnit.Framework; using Wox.Plugin.Url; diff --git a/Wox.Test/Wox.Test.csproj b/Wox.Test/Wox.Test.csproj index 8ddecc0bac..06d8021304 100644 --- a/Wox.Test/Wox.Test.csproj +++ b/Wox.Test/Wox.Test.csproj @@ -35,20 +35,11 @@ false - - ..\packages\Moq.4.2.1409.1722\lib\net35\Moq.dll - True - False ..\packages\NUnit.2.6.4\lib\nunit.framework.dll - - - - - diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 3a83ac2cf4..5221f7090b 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -61,19 +61,10 @@ Wox.App - False ..\packages\Exceptionless.1.5.2121\lib\net35\Exceptionless.dll - - False - ..\packages\Exceptionless.1.5.2121\lib\net35\Exceptionless.Models.dll - - - False - ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - ..\packages\MarkdownSharp.1.13.0.0\lib\35\MarkdownSharp.dll @@ -89,7 +80,6 @@ ..\packages\NHotkey.Wpf.1.2.1\lib\net35\NHotkey.Wpf.dll True - @@ -100,7 +90,6 @@ - @@ -110,10 +99,6 @@ - - False - ..\packages\InputSimulator.1.0.4.0\lib\net20\WindowsInput.dll - From b2839772816d4282889087e7044c8fc275ef695d Mon Sep 17 00:00:00 2001 From: bao-qian Date: Fri, 30 Oct 2015 20:42:21 +0000 Subject: [PATCH 21/75] Remove unnecessary decoration --- Wox.Core/Plugin/JsonRPCPluginLoader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wox.Core/Plugin/JsonRPCPluginLoader.cs b/Wox.Core/Plugin/JsonRPCPluginLoader.cs index 0bf35979c9..d4b2a4f90a 100644 --- a/Wox.Core/Plugin/JsonRPCPluginLoader.cs +++ b/Wox.Core/Plugin/JsonRPCPluginLoader.cs @@ -6,7 +6,7 @@ namespace Wox.Core.Plugin { internal class JsonRPCPluginLoader : IPluginLoader where T : JsonRPCPlugin, new() { - public virtual IEnumerable LoadPlugin(List pluginMetadatas) + public IEnumerable LoadPlugin(List pluginMetadatas) { T jsonRPCPlugin = new T(); List jsonRPCPluginMetadatas = pluginMetadatas.Where(o => o.Language.ToUpper() == jsonRPCPlugin.SupportedLanguage.ToUpper()).ToList(); From 2dfcee6b258694f3a22421aa8085224b7cb7e623 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Fri, 30 Oct 2015 20:47:03 +0000 Subject: [PATCH 22/75] Remove unnecessary thread switch --- Wox/App.xaml.cs | 3 +++ Wox/MainWindow.xaml.cs | 18 +----------------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/Wox/App.xaml.cs b/Wox/App.xaml.cs index d1b7f5f69b..44b57bb193 100644 --- a/Wox/App.xaml.cs +++ b/Wox/App.xaml.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Threading; using Wox.CommandArgs; +using Wox.Core.Plugin; using Wox.Helper; using Application = System.Windows.Application; using MessageBox = System.Windows.MessageBox; @@ -35,6 +36,8 @@ namespace Wox AppDomain.CurrentDomain.UnhandledException += ErrorReporting.UnhandledExceptionHandle; Window = new MainWindow(); + PluginManager.Init(Window); + ImageLoader.ImageLoader.PreloadImages(); CommandArgsFactory.Execute(e.Args.ToList()); } diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 9e305ff40c..80dc021829 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -207,18 +207,7 @@ namespace Wox InitialTray(); Closing += MainWindow_Closing; - //since MainWIndow implement IPublicAPI, so we need to finish ctor MainWindow object before - //PublicAPI invoke in plugin init methods. E.g FolderPlugin - ThreadPool.QueueUserWorkItem(o => - { - Thread.Sleep(50); - PluginManager.Init(this); - }); - ThreadPool.QueueUserWorkItem(o => - { - Thread.Sleep(50); - PreLoadImages(); - }); + } void pnlResult_ItemDropEvent(Result result, IDataObject dropDataObject, DragEventArgs args) @@ -245,11 +234,6 @@ namespace Wox return true; } - private void PreLoadImages() - { - ImageLoader.ImageLoader.PreloadImages(); - } - void pnlResult_RightMouseClickEvent(Result result) { ShowContextMenu(result); From 26a62640395175cbbd0870cb3909431160d3ca05 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Fri, 30 Oct 2015 23:03:16 +0000 Subject: [PATCH 23/75] Refactoring DelayInvoke In MainWindow.xaml.cs, the reference of originQuery, lastQuery and tbQuery.Text are same, so remove originQuery is fine. --- Wox/Helper/DispatcherExtensions.cs | 16 ++++------------ Wox/HotkeyControl.xaml.cs | 2 +- Wox/MainWindow.xaml.cs | 12 ++++++------ Wox/Msg.xaml.cs | 10 +++++----- Wox/ResultPanel.xaml.cs | 2 +- Wox/SettingWindow.xaml.cs | 2 +- 6 files changed, 18 insertions(+), 26 deletions(-) diff --git a/Wox/Helper/DispatcherExtensions.cs b/Wox/Helper/DispatcherExtensions.cs index 2ea304a2ed..a2f5643ea6 100644 --- a/Wox/Helper/DispatcherExtensions.cs +++ b/Wox/Helper/DispatcherExtensions.cs @@ -12,20 +12,13 @@ namespace Wox new Dictionary(); private static readonly object syncRoot = new object(); - public static string DelayInvoke(this Dispatcher dispatcher, string namedInvocation, - Action action, TimeSpan delay, - DispatcherPriority priority = DispatcherPriority.Normal) - { - return DelayInvoke(dispatcher, namedInvocation, action, delay, string.Empty, priority); - } - - public static string DelayInvoke(this Dispatcher dispatcher, string namedInvocation, - Action action, TimeSpan delay, string arg, + public static void DelayInvoke(this Dispatcher dispatcher, string namedInvocation, + Action action, TimeSpan delay, DispatcherPriority priority = DispatcherPriority.Normal) { lock (syncRoot) { - if (String.IsNullOrEmpty(namedInvocation)) + if (string.IsNullOrEmpty(namedInvocation)) { namedInvocation = Guid.NewGuid().ToString(); } @@ -36,11 +29,10 @@ namespace Wox var timer = new DispatcherTimer(delay, priority, (s, e) => { RemoveTimer(namedInvocation); - action(arg); + action(); }, dispatcher); timer.Start(); timers.Add(namedInvocation, timer); - return namedInvocation; } } diff --git a/Wox/HotkeyControl.xaml.cs b/Wox/HotkeyControl.xaml.cs index 135769c743..783e3e59da 100644 --- a/Wox/HotkeyControl.xaml.cs +++ b/Wox/HotkeyControl.xaml.cs @@ -53,7 +53,7 @@ namespace Wox } Dispatcher.DelayInvoke("HotkeyAvailabilityTest", - o => + () => { SetHotkey(hotkeyModel); }, diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 80dc021829..3969505890 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -457,27 +457,27 @@ namespace Wox int searchDelay = GetSearchDelay(lastQuery); Dispatcher.DelayInvoke("UpdateSearch", - o => + () => { - Dispatcher.DelayInvoke("ClearResults", i => + Dispatcher.DelayInvoke("ClearResults", () => { // first try to use clear method inside pnlResult, which is more closer to the add new results // and this will not bring splash issues.After waiting 100ms, if there still no results added, we // must clear the result. otherwise, it will be confused why the query changed, but the results // didn't. if (pnlResult.Dirty) pnlResult.Clear(); - }, TimeSpan.FromMilliseconds(100), null); + }, TimeSpan.FromMilliseconds(100)); queryHasReturn = false; Query query = new Query(lastQuery); query.IsIntantQuery = searchDelay == 0; Query(query); - Dispatcher.DelayInvoke("ShowProgressbar", originQuery => + Dispatcher.DelayInvoke("ShowProgressbar", () => { - if (!queryHasReturn && originQuery == tbQuery.Text && !string.IsNullOrEmpty(lastQuery)) + if (!queryHasReturn && !string.IsNullOrEmpty(lastQuery)) { StartProgress(); } - }, TimeSpan.FromMilliseconds(150), tbQuery.Text); + }, TimeSpan.FromMilliseconds(150)); //reset query history index after user start new query ResetQueryHistoryIndex(); }, TimeSpan.FromMilliseconds(searchDelay)); diff --git a/Wox/Msg.xaml.cs b/Wox/Msg.xaml.cs index 9f9801cf30..3fb7b89b8f 100644 --- a/Wox/Msg.xaml.cs +++ b/Wox/Msg.xaml.cs @@ -71,11 +71,11 @@ namespace Wox { Show(); Dispatcher.DelayInvoke("ShowMsg", - o => { - if (!closing) { - closing = true; - Dispatcher.Invoke(new Action(fadeOutStoryboard.Begin)); - } + () => { + if (!closing) { + closing = true; + Dispatcher.Invoke(new Action(fadeOutStoryboard.Begin)); + } }, TimeSpan.FromSeconds(3)); } } diff --git a/Wox/ResultPanel.xaml.cs b/Wox/ResultPanel.xaml.cs index eec796d99d..576ef4d7f7 100644 --- a/Wox/ResultPanel.xaml.cs +++ b/Wox/ResultPanel.xaml.cs @@ -225,7 +225,7 @@ namespace Wox if (e.AddedItems.Count > 0 && e.AddedItems[0] != null) { lbResults.ScrollIntoView(e.AddedItems[0]); - Dispatcher.DelayInvoke("UpdateItemNumber", o => + Dispatcher.DelayInvoke("UpdateItemNumber", () => { UpdateItemNumber(); }, TimeSpan.FromMilliseconds(3)); diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index 5520b4c534..603d4712a2 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -464,7 +464,7 @@ namespace Wox private void DelayChangeTheme() { - Dispatcher.DelayInvoke("delayChangeTheme", o => + Dispatcher.DelayInvoke("delayChangeTheme", () => { ThemeManager.Theme.ChangeTheme(UserSettingStorage.Instance.Theme); }, TimeSpan.FromMilliseconds(100)); From ad8b6c806dbee7815e0289a620889e243c99c25c Mon Sep 17 00:00:00 2001 From: bao-qian Date: Fri, 30 Oct 2015 23:17:34 +0000 Subject: [PATCH 24/75] Optimize using directives --- Plugins/Wox.Plugin.CMD/CMD.cs | 2 -- Plugins/Wox.Plugin.CMD/CMDStorage.cs | 2 +- .../ContextMenuStorage.cs | 9 +++------ Plugins/Wox.Plugin.Everything/Main.cs | 2 +- Plugins/Wox.Plugin.Folder/FolderPlugin.cs | 2 +- Plugins/Wox.Plugin.Folder/FolderStorage.cs | 7 ++----- .../HttpRequest.cs | 1 - .../AddProgramSource.xaml.cs | 14 +------------- .../Wox.Plugin.Program/FileChangeWatcher.cs | 1 - .../ProgramSources/FileSystemProgramSource.cs | 2 +- Plugins/Wox.Plugin.Program/ProgramStorage.cs | 7 ++----- Plugins/Wox.Plugin.Program/Programs.cs | 6 ++---- Plugins/Wox.Plugin.Sys/Sys.cs | 2 -- Plugins/Wox.Plugin.WebSearch/EasyTimer.cs | 3 --- .../Wox.Plugin.WebSearch/WebQueryPlugin.cs | 2 -- .../Wox.Plugin.WebSearch/WebSearchStorage.cs | 5 +---- Wox.Core/APIServer.cs | 7 +------ Wox.Core/AssemblyHelper.cs | 2 -- Wox.Core/Exception/ExceptionFormatter.cs | 1 - Wox.Core/Exception/WoxCritialException.cs | 7 +------ Wox.Core/Exception/WoxI18nException.cs | 7 +------ Wox.Core/Exception/WoxPluginException.cs | 7 +------ Wox.Core/Plugin/JsonRPCPlugin.cs | 5 ++--- Wox.Core/Plugin/PluginConfig.cs | 4 +--- Wox.Core/Plugin/PluginInstaller.cs | 2 -- Wox.Core/Plugin/PluginManager.cs | 1 - Wox.Core/Plugin/PythonPlugin.cs | 1 - .../QueryDispatcher/BaseQueryDispatcher.cs | 7 ++----- .../ExclusiveQueryDispatcher.cs | 8 +------- .../QueryDispatcher/GenericQueryDispatcher.cs | 4 ---- .../Plugin/QueryDispatcher/QueryDispatcher.cs | 1 - Wox.Core/Theme/ITheme.cs | 5 +---- Wox.Core/Theme/ThemeManager.cs | 7 +------ Wox.Core/UI/IUIResource.cs | 7 +------ Wox.Core/UI/ResourceMerger.cs | 4 ---- Wox.Core/Updater/UpdaterManager.cs | 6 +----- Wox.Core/Updater/WoxUpdateSource.cs | 3 --- Wox.Core/UserSettings/UserSettingStorage.cs | 6 ++---- Wox.Core/i18n/AvailableLanguages.cs | 5 +---- Wox.Core/i18n/IInternationalization.cs | 5 +---- Wox.Core/i18n/Internationalization.cs | 1 - Wox.Core/i18n/InternationalizationManager.cs | 11 +---------- Wox.Core/i18n/Language.cs | 7 +------ Wox.CrashReporter/CrashReporter.cs | 3 --- Wox.CrashReporter/ReportWindow.xaml.cs | 14 -------------- Wox.Infrastructure/DebugHelper.cs | 6 +----- Wox.Infrastructure/FuzzyMatcher.cs | 6 +----- Wox.Infrastructure/Logger/Log.cs | 1 - Wox.Infrastructure/Storage/BaseStorage.cs | 6 ------ Wox.Infrastructure/Storage/BinaryStorage.cs | 3 --- Wox.Infrastructure/Storage/IStorage.cs | 7 +------ Wox.Infrastructure/Storage/JsonStorage.cs | 3 --- Wox.Infrastructure/StringMatcher.cs | 7 +------ Wox.Infrastructure/Timeit.cs | 3 --- Wox.Infrastructure/Unidecoder.cs | 2 -- Wox.Infrastructure/WindowsShellRun.cs | 6 ++---- Wox.Plugin/AllowedLanguage.cs | 7 +------ Wox.Plugin/EventHandler.cs | 6 +----- Wox.Plugin/Features/IContextMenu.cs | 5 +---- Wox.Plugin/Features/IExclusiveQuery.cs | 7 +------ Wox.Plugin/IPluginI18n.cs | 8 +------- Wox.Plugin/IPublicAPI.cs | 4 +--- Wox.Plugin/ISettingProvider.cs | 6 +----- Wox.Plugin/PluginInitContext.cs | 7 +------ Wox.Plugin/PluginMetadata.cs | 4 ---- Wox.Plugin/PluginPair.cs | 7 +------ Wox.Plugin/Result.cs | 1 - Wox.Test/FuzzyMatcherTest.cs | 4 +--- Wox.Test/Plugins/PluginInitTest.cs | 7 +------ Wox.Test/QueryTest.cs | 7 +------ Wox.Test/SemanticVersionTest.cs | 6 +----- Wox.Test/UrlPluginTest.cs | 6 +----- Wox.UpdateFeedGenerator/ConfigStorage.cs | 6 +----- Wox.UpdateFeedGenerator/Program.cs | 12 +----------- Wox/ActionKeyword.xaml.cs | 14 +------------- Wox/App.xaml.cs | 6 +----- Wox/CommandArgs/CommandArgsFactory.cs | 2 -- Wox/CommandArgs/HideStartCommandArg.cs | 5 +---- Wox/CommandArgs/ICommandArg.cs | 5 +---- Wox/CommandArgs/InstallPluginCommandArg.cs | 6 +----- Wox/CommandArgs/PluginDebuggerCommandArg.cs | 6 +----- Wox/CommandArgs/QueryCommandArg.cs | 2 -- Wox/CommandArgs/ReloadPluginCommandArg.cs | 5 +---- Wox/CommandArgs/ToggleCommandArg.cs | 5 +---- Wox/Converters/ImagePathConverter.cs | 4 ---- Wox/Helper/DWMDropShadow.cs | 1 - Wox/Helper/DataWebRequestFactory.cs | 3 --- Wox/Helper/DispatcherExtensions.cs | 2 -- Wox/Helper/ErrorReporting.cs | 4 ---- Wox/Helper/SingletonWindowOpener.cs | 2 -- Wox/Helper/SyntaxSugars.cs | 3 --- Wox/ImageLoader/ImageCacheStroage.cs | 1 - Wox/MainWindow.xaml.cs | 1 - Wox/Msg.xaml.cs | 9 --------- Wox/ResultPanel.xaml.cs | 1 - Wox/SettingWindow.xaml.cs | 19 +++++-------------- Wox/Storage/TopMostRecordStorage.cs | 4 +--- Wox/Storage/UserSelectedRecordStorage.cs | 7 +++---- 98 files changed, 74 insertions(+), 418 deletions(-) diff --git a/Plugins/Wox.Plugin.CMD/CMD.cs b/Plugins/Wox.Plugin.CMD/CMD.cs index e95b11d711..6c0f6aeb86 100644 --- a/Plugins/Wox.Plugin.CMD/CMD.cs +++ b/Plugins/Wox.Plugin.CMD/CMD.cs @@ -1,13 +1,11 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Windows.Forms; using WindowsInput; using WindowsInput.Native; -using Wox.Infrastructure; using Wox.Infrastructure.Hotkey; using Wox.Plugin.Features; using Control = System.Windows.Controls.Control; diff --git a/Plugins/Wox.Plugin.CMD/CMDStorage.cs b/Plugins/Wox.Plugin.CMD/CMDStorage.cs index 1d719d17cd..ece62a06ad 100644 --- a/Plugins/Wox.Plugin.CMD/CMDStorage.cs +++ b/Plugins/Wox.Plugin.CMD/CMDStorage.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; +using System.IO; using System.Reflection; using Newtonsoft.Json; using Wox.Infrastructure.Storage; -using System.IO; namespace Wox.Plugin.CMD { diff --git a/Plugins/Wox.Plugin.Everything/ContextMenuStorage.cs b/Plugins/Wox.Plugin.Everything/ContextMenuStorage.cs index 1970e39a7c..bbb0d33753 100644 --- a/Plugins/Wox.Plugin.Everything/ContextMenuStorage.cs +++ b/Plugins/Wox.Plugin.Everything/ContextMenuStorage.cs @@ -1,11 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Newtonsoft.Json; -using Wox.Infrastructure.Storage; +using System.Collections.Generic; using System.IO; using System.Reflection; +using Newtonsoft.Json; +using Wox.Infrastructure.Storage; namespace Wox.Plugin.Everything { diff --git a/Plugins/Wox.Plugin.Everything/Main.cs b/Plugins/Wox.Plugin.Everything/Main.cs index 4318485e6e..5aec121eb6 100644 --- a/Plugins/Wox.Plugin.Everything/Main.cs +++ b/Plugins/Wox.Plugin.Everything/Main.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Reflection; using System.ServiceProcess; using Wox.Infrastructure; -using System.Reflection; using Wox.Plugin.Everything.Everything; using Wox.Plugin.Features; diff --git a/Plugins/Wox.Plugin.Folder/FolderPlugin.cs b/Plugins/Wox.Plugin.Folder/FolderPlugin.cs index 622acac0d3..21c2875e89 100644 --- a/Plugins/Wox.Plugin.Folder/FolderPlugin.cs +++ b/Plugins/Wox.Plugin.Folder/FolderPlugin.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq; using System.Reflection; using System.Windows; -using Control = System.Windows.Controls.Control; +using System.Windows.Controls; namespace Wox.Plugin.Folder { diff --git a/Plugins/Wox.Plugin.Folder/FolderStorage.cs b/Plugins/Wox.Plugin.Folder/FolderStorage.cs index e22d560983..815643c9d8 100644 --- a/Plugins/Wox.Plugin.Folder/FolderStorage.cs +++ b/Plugins/Wox.Plugin.Folder/FolderStorage.cs @@ -1,11 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; +using System.IO; using System.Reflection; -using System.Text; using Newtonsoft.Json; using Wox.Infrastructure.Storage; -using System.IO; namespace Wox.Plugin.Folder { diff --git a/Plugins/Wox.Plugin.PluginManagement/HttpRequest.cs b/Plugins/Wox.Plugin.PluginManagement/HttpRequest.cs index 40f5963224..27c7acabf5 100644 --- a/Plugins/Wox.Plugin.PluginManagement/HttpRequest.cs +++ b/Plugins/Wox.Plugin.PluginManagement/HttpRequest.cs @@ -1,7 +1,6 @@ using System; using System.Net; - namespace Wox.Plugin.PluginManagement { public class HttpRequest diff --git a/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs b/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs index c93df57d13..45fa4f44c4 100644 --- a/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs +++ b/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs @@ -1,16 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; +using System.Windows; namespace Wox.Plugin.Program { diff --git a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs index c6f6ec5469..a493365b0d 100644 --- a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs +++ b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Threading; using Wox.Infrastructure; diff --git a/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs b/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs index b1ef2dcd4c..cb0cf7e765 100644 --- a/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs +++ b/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using Log = Wox.Infrastructure.Logger.Log; +using Wox.Infrastructure.Logger; namespace Wox.Plugin.Program.ProgramSources { diff --git a/Plugins/Wox.Plugin.Program/ProgramStorage.cs b/Plugins/Wox.Plugin.Program/ProgramStorage.cs index a274237f87..d533443f01 100644 --- a/Plugins/Wox.Plugin.Program/ProgramStorage.cs +++ b/Plugins/Wox.Plugin.Program/ProgramStorage.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System.ComponentModel; using System.IO; -using System.Linq; using System.Reflection; -using System.Text; using Newtonsoft.Json; using Wox.Infrastructure.Storage; -using System.ComponentModel; namespace Wox.Plugin.Program { diff --git a/Plugins/Wox.Plugin.Program/Programs.cs b/Plugins/Wox.Plugin.Program/Programs.cs index d6a3a35183..1b1ee94485 100644 --- a/Plugins/Wox.Plugin.Program/Programs.cs +++ b/Plugins/Wox.Plugin.Program/Programs.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; -using System.Threading; using System.Windows; -using Wox.Infrastructure; -using Wox.Plugin.Program.ProgramSources; using IWshRuntimeLibrary; +using Wox.Infrastructure; using Wox.Plugin.Features; +using Wox.Plugin.Program.ProgramSources; namespace Wox.Plugin.Program { diff --git a/Plugins/Wox.Plugin.Sys/Sys.cs b/Plugins/Wox.Plugin.Sys/Sys.cs index 374bd2a64b..bc3db80b63 100644 --- a/Plugins/Wox.Plugin.Sys/Sys.cs +++ b/Plugins/Wox.Plugin.Sys/Sys.cs @@ -5,8 +5,6 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms; using Wox.Infrastructure; -using System.Runtime.InteropServices; -using System.Windows.Forms; using Control = System.Windows.Controls.Control; namespace Wox.Plugin.Sys diff --git a/Plugins/Wox.Plugin.WebSearch/EasyTimer.cs b/Plugins/Wox.Plugin.WebSearch/EasyTimer.cs index 78cfb5d6e5..49c31e63d3 100644 --- a/Plugins/Wox.Plugin.WebSearch/EasyTimer.cs +++ b/Plugins/Wox.Plugin.WebSearch/EasyTimer.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace Wox.Plugin.WebSearch { diff --git a/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs b/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs index 7f4412f3d3..7e85b12df3 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs @@ -4,8 +4,6 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; -using System.Timers; -using System.Windows.Threading; using Wox.Plugin.Features; using Wox.Plugin.WebSearch.SuggestionSources; diff --git a/Plugins/Wox.Plugin.WebSearch/WebSearchStorage.cs b/Plugins/Wox.Plugin.WebSearch/WebSearchStorage.cs index 2a75abe201..a91a59198e 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebSearchStorage.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebSearchStorage.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; -using System.Linq; using System.Reflection; -using System.Text; using Newtonsoft.Json; using Wox.Infrastructure.Storage; diff --git a/Wox.Core/APIServer.cs b/Wox.Core/APIServer.cs index 8aec75068e..7830d091ae 100644 --- a/Wox.Core/APIServer.cs +++ b/Wox.Core/APIServer.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Core +namespace Wox.Core { public static class APIServer { diff --git a/Wox.Core/AssemblyHelper.cs b/Wox.Core/AssemblyHelper.cs index ac972ff556..dd47eb73b5 100644 --- a/Wox.Core/AssemblyHelper.cs +++ b/Wox.Core/AssemblyHelper.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; using Wox.Core.Plugin; -using Wox.Infrastructure.Logger; using Wox.Plugin; namespace Wox.Core diff --git a/Wox.Core/Exception/ExceptionFormatter.cs b/Wox.Core/Exception/ExceptionFormatter.cs index 7db7b07a03..d4e8beb8a8 100644 --- a/Wox.Core/Exception/ExceptionFormatter.cs +++ b/Wox.Core/Exception/ExceptionFormatter.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Text; using System.Xml; diff --git a/Wox.Core/Exception/WoxCritialException.cs b/Wox.Core/Exception/WoxCritialException.cs index 76aea3dea6..cf840f9b19 100644 --- a/Wox.Core/Exception/WoxCritialException.cs +++ b/Wox.Core/Exception/WoxCritialException.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Core.Exception +namespace Wox.Core.Exception { /// /// Represent exceptions that wox can't handle and MUST close running Wox. diff --git a/Wox.Core/Exception/WoxI18nException.cs b/Wox.Core/Exception/WoxI18nException.cs index e095c78995..72b62df988 100644 --- a/Wox.Core/Exception/WoxI18nException.cs +++ b/Wox.Core/Exception/WoxI18nException.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Core.Exception +namespace Wox.Core.Exception { public class WoxI18nException:WoxException { diff --git a/Wox.Core/Exception/WoxPluginException.cs b/Wox.Core/Exception/WoxPluginException.cs index 1134460321..e435be5cdd 100644 --- a/Wox.Core/Exception/WoxPluginException.cs +++ b/Wox.Core/Exception/WoxPluginException.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Core.Exception +namespace Wox.Core.Exception { public class WoxPluginException : WoxException { diff --git a/Wox.Core/Plugin/JsonRPCPlugin.cs b/Wox.Core/Plugin/JsonRPCPlugin.cs index 877ff10e9b..6f65d78c93 100644 --- a/Wox.Core/Plugin/JsonRPCPlugin.cs +++ b/Wox.Core/Plugin/JsonRPCPlugin.cs @@ -1,14 +1,13 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Threading; using System.Windows.Forms; using Newtonsoft.Json; +using Wox.Core.Exception; using Wox.Infrastructure.Logger; using Wox.Plugin; -using Wox.Core.Exception; namespace Wox.Core.Plugin { diff --git a/Wox.Core/Plugin/PluginConfig.cs b/Wox.Core/Plugin/PluginConfig.cs index f47e1dac01..6824495844 100644 --- a/Wox.Core/Plugin/PluginConfig.cs +++ b/Wox.Core/Plugin/PluginConfig.cs @@ -1,8 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using System.Linq; -using System.Reflection; using Newtonsoft.Json; using Wox.Core.Exception; using Wox.Core.UserSettings; diff --git a/Wox.Core/Plugin/PluginInstaller.cs b/Wox.Core/Plugin/PluginInstaller.cs index 77577aa9b1..b26254576f 100644 --- a/Wox.Core/Plugin/PluginInstaller.cs +++ b/Wox.Core/Plugin/PluginInstaller.cs @@ -1,12 +1,10 @@ using System; using System.Diagnostics; using System.IO; -using System.Windows; using System.Windows.Forms; using ICSharpCode.SharpZipLib.Zip; using Newtonsoft.Json; using Wox.Plugin; -using MessageBox = System.Windows.Forms.MessageBox; namespace Wox.Core.Plugin { diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index b681463f47..9b38913165 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -10,7 +10,6 @@ using Wox.Core.i18n; using Wox.Core.UI; using Wox.Core.UserSettings; using Wox.Infrastructure; -using Wox.Infrastructure.Http; using Wox.Infrastructure.Logger; using Wox.Plugin; using Wox.Plugin.Features; diff --git a/Wox.Core/Plugin/PythonPlugin.cs b/Wox.Core/Plugin/PythonPlugin.cs index 20487de0a2..bf1edb4c16 100644 --- a/Wox.Core/Plugin/PythonPlugin.cs +++ b/Wox.Core/Plugin/PythonPlugin.cs @@ -2,7 +2,6 @@ using System.IO; using System.Reflection; using Wox.Core.UserSettings; -using Wox.Infrastructure.Http; using Wox.Plugin; namespace Wox.Core.Plugin diff --git a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs index b17875b6ef..35bf8bbac2 100644 --- a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; +using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading; +using Wox.Core.UserSettings; using Wox.Infrastructure; using Wox.Plugin; -using Wox.Core.UserSettings; namespace Wox.Core.Plugin.QueryDispatcher { diff --git a/Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs index d0923c34c1..f31ae2ac92 100644 --- a/Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using Wox.Core.Exception; -using Wox.Core.UserSettings; -using Wox.Infrastructure.Logger; +using System.Collections.Generic; using Wox.Plugin; namespace Wox.Core.Plugin.QueryDispatcher diff --git a/Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs index 5c53c556b8..9787930982 100644 --- a/Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs @@ -1,9 +1,5 @@ using System.Collections.Generic; using System.Linq; -using System.Threading; -using Wox.Core.Exception; -using Wox.Core.UserSettings; -using Wox.Infrastructure.Logger; using Wox.Plugin; namespace Wox.Core.Plugin.QueryDispatcher diff --git a/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs index 5d2062b48e..5d2cc0e413 100644 --- a/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs @@ -1,5 +1,4 @@  -using System.Threading; using Wox.Plugin; namespace Wox.Core.Plugin.QueryDispatcher diff --git a/Wox.Core/Theme/ITheme.cs b/Wox.Core/Theme/ITheme.cs index 55bfccb21d..34409068e6 100644 --- a/Wox.Core/Theme/ITheme.cs +++ b/Wox.Core/Theme/ITheme.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace Wox.Core.Theme { diff --git a/Wox.Core/Theme/ThemeManager.cs b/Wox.Core/Theme/ThemeManager.cs index a5dc1a2f9f..3ad8a0d7d7 100644 --- a/Wox.Core/Theme/ThemeManager.cs +++ b/Wox.Core/Theme/ThemeManager.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Core.Theme +namespace Wox.Core.Theme { public class ThemeManager { diff --git a/Wox.Core/UI/IUIResource.cs b/Wox.Core/UI/IUIResource.cs index a1e398a25c..99d89551a6 100644 --- a/Wox.Core/UI/IUIResource.cs +++ b/Wox.Core/UI/IUIResource.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows; -using Wox.Core.i18n; +using System.Windows; namespace Wox.Core.UI { diff --git a/Wox.Core/UI/ResourceMerger.cs b/Wox.Core/UI/ResourceMerger.cs index 542200ede2..6ad940c3f5 100644 --- a/Wox.Core/UI/ResourceMerger.cs +++ b/Wox.Core/UI/ResourceMerger.cs @@ -1,10 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Windows; using Wox.Core.i18n; -using Wox.Core.Plugin; -using Wox.Core.Theme; using Wox.Plugin; namespace Wox.Core.UI diff --git a/Wox.Core/Updater/UpdaterManager.cs b/Wox.Core/Updater/UpdaterManager.cs index f93f9a3487..65778896a0 100644 --- a/Wox.Core/Updater/UpdaterManager.cs +++ b/Wox.Core/Updater/UpdaterManager.cs @@ -1,11 +1,8 @@ using System; using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; using System.Reflection; +using System.Threading; using System.Windows.Forms; -using System.Windows.Threading; using NAppUpdate.Framework; using NAppUpdate.Framework.Common; using NAppUpdate.Framework.Sources; @@ -15,7 +12,6 @@ using Wox.Core.i18n; using Wox.Core.UserSettings; using Wox.Infrastructure.Http; using Wox.Infrastructure.Logger; -using System.Threading; namespace Wox.Core.Updater { diff --git a/Wox.Core/Updater/WoxUpdateSource.cs b/Wox.Core/Updater/WoxUpdateSource.cs index 20b66e2f66..192bf9d2bc 100644 --- a/Wox.Core/Updater/WoxUpdateSource.cs +++ b/Wox.Core/Updater/WoxUpdateSource.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net; -using System.Text; using NAppUpdate.Framework.Common; using NAppUpdate.Framework.Sources; using NAppUpdate.Framework.Utils; diff --git a/Wox.Core/UserSettings/UserSettingStorage.cs b/Wox.Core/UserSettings/UserSettingStorage.cs index 632aaaa507..3af1911324 100644 --- a/Wox.Core/UserSettings/UserSettingStorage.cs +++ b/Wox.Core/UserSettings/UserSettingStorage.cs @@ -1,12 +1,10 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.IO; -using System.Windows.Forms; +using System.Reflection; using Newtonsoft.Json; using Wox.Infrastructure.Storage; -using Wox.Plugin; -using System.Drawing; -using System.Reflection; namespace Wox.Core.UserSettings { diff --git a/Wox.Core/i18n/AvailableLanguages.cs b/Wox.Core/i18n/AvailableLanguages.cs index a9805e174e..3879fc9cd8 100644 --- a/Wox.Core/i18n/AvailableLanguages.cs +++ b/Wox.Core/i18n/AvailableLanguages.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace Wox.Core.i18n { diff --git a/Wox.Core/i18n/IInternationalization.cs b/Wox.Core/i18n/IInternationalization.cs index 23335d7e97..5ab83c1327 100644 --- a/Wox.Core/i18n/IInternationalization.cs +++ b/Wox.Core/i18n/IInternationalization.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace Wox.Core.i18n { diff --git a/Wox.Core/i18n/Internationalization.cs b/Wox.Core/i18n/Internationalization.cs index bf2157603e..cf9878fd7d 100644 --- a/Wox.Core/i18n/Internationalization.cs +++ b/Wox.Core/i18n/Internationalization.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; -using System.Text; using System.Windows; using Wox.Core.Exception; using Wox.Core.UI; diff --git a/Wox.Core/i18n/InternationalizationManager.cs b/Wox.Core/i18n/InternationalizationManager.cs index cfe1ca7fc7..999ae9e327 100644 --- a/Wox.Core/i18n/InternationalizationManager.cs +++ b/Wox.Core/i18n/InternationalizationManager.cs @@ -1,13 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Windows; -using Wox.Core.UI; -using Wox.Infrastructure.Logger; - -namespace Wox.Core.i18n +namespace Wox.Core.i18n { public static class InternationalizationManager { diff --git a/Wox.Core/i18n/Language.cs b/Wox.Core/i18n/Language.cs index 5b9213149a..6caefeedd1 100644 --- a/Wox.Core/i18n/Language.cs +++ b/Wox.Core/i18n/Language.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Core.i18n +namespace Wox.Core.i18n { public class Language { diff --git a/Wox.CrashReporter/CrashReporter.cs b/Wox.CrashReporter/CrashReporter.cs index 41f4fc9b97..ff06c57e39 100644 --- a/Wox.CrashReporter/CrashReporter.cs +++ b/Wox.CrashReporter/CrashReporter.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace Wox.CrashReporter { diff --git a/Wox.CrashReporter/ReportWindow.xaml.cs b/Wox.CrashReporter/ReportWindow.xaml.cs index f2d408368f..15a76abe11 100644 --- a/Wox.CrashReporter/ReportWindow.xaml.cs +++ b/Wox.CrashReporter/ReportWindow.xaml.cs @@ -1,24 +1,10 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; using Exceptionless; -using Wox.Core; -using Wox.Core.Exception; using Wox.Core.i18n; -using Wox.Core.UI; using Wox.Core.Updater; -using Wox.Core.UserSettings; namespace Wox.CrashReporter { diff --git a/Wox.Infrastructure/DebugHelper.cs b/Wox.Infrastructure/DebugHelper.cs index e31636b7e1..447071abf1 100644 --- a/Wox.Infrastructure/DebugHelper.cs +++ b/Wox.Infrastructure/DebugHelper.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; +using System.Diagnostics; namespace Wox.Infrastructure { diff --git a/Wox.Infrastructure/FuzzyMatcher.cs b/Wox.Infrastructure/FuzzyMatcher.cs index 0da5c89a5e..31280ad9de 100644 --- a/Wox.Infrastructure/FuzzyMatcher.cs +++ b/Wox.Infrastructure/FuzzyMatcher.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; +using System.Text; namespace Wox.Infrastructure { diff --git a/Wox.Infrastructure/Logger/Log.cs b/Wox.Infrastructure/Logger/Log.cs index 8cfbc52bd5..8abaf16a4f 100644 --- a/Wox.Infrastructure/Logger/Log.cs +++ b/Wox.Infrastructure/Logger/Log.cs @@ -1,5 +1,4 @@ using System; -using System.Reflection; using NLog; namespace Wox.Infrastructure.Logger diff --git a/Wox.Infrastructure/Storage/BaseStorage.cs b/Wox.Infrastructure/Storage/BaseStorage.cs index a8443b0b08..4ddee08ada 100644 --- a/Wox.Infrastructure/Storage/BaseStorage.cs +++ b/Wox.Infrastructure/Storage/BaseStorage.cs @@ -1,11 +1,5 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices.ComTypes; -using System.Text; -using Newtonsoft.Json; namespace Wox.Infrastructure.Storage { diff --git a/Wox.Infrastructure/Storage/BinaryStorage.cs b/Wox.Infrastructure/Storage/BinaryStorage.cs index 9ad13bfafb..fb49507ec0 100644 --- a/Wox.Infrastructure/Storage/BinaryStorage.cs +++ b/Wox.Infrastructure/Storage/BinaryStorage.cs @@ -1,11 +1,8 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Reflection; using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary; -using System.Text; using System.Threading; using Wox.Infrastructure.Logger; diff --git a/Wox.Infrastructure/Storage/IStorage.cs b/Wox.Infrastructure/Storage/IStorage.cs index bb94306f1c..9f305804dd 100644 --- a/Wox.Infrastructure/Storage/IStorage.cs +++ b/Wox.Infrastructure/Storage/IStorage.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Infrastructure.Storage +namespace Wox.Infrastructure.Storage { public interface IStorage { diff --git a/Wox.Infrastructure/Storage/JsonStorage.cs b/Wox.Infrastructure/Storage/JsonStorage.cs index ca6c0fea09..b01f7277b5 100644 --- a/Wox.Infrastructure/Storage/JsonStorage.cs +++ b/Wox.Infrastructure/Storage/JsonStorage.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; using System.Threading; using Newtonsoft.Json; diff --git a/Wox.Infrastructure/StringMatcher.cs b/Wox.Infrastructure/StringMatcher.cs index 4d3d9dd5ae..6261d9a067 100644 --- a/Wox.Infrastructure/StringMatcher.cs +++ b/Wox.Infrastructure/StringMatcher.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Infrastructure +namespace Wox.Infrastructure { public class StringMatcher { diff --git a/Wox.Infrastructure/Timeit.cs b/Wox.Infrastructure/Timeit.cs index 14dd1f62c0..89a8dbbddc 100644 --- a/Wox.Infrastructure/Timeit.cs +++ b/Wox.Infrastructure/Timeit.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using System.Text; namespace Wox.Infrastructure { diff --git a/Wox.Infrastructure/Unidecoder.cs b/Wox.Infrastructure/Unidecoder.cs index ea1f56ef5f..a81247fd6b 100644 --- a/Wox.Infrastructure/Unidecoder.cs +++ b/Wox.Infrastructure/Unidecoder.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; namespace Wox.Infrastructure { diff --git a/Wox.Infrastructure/WindowsShellRun.cs b/Wox.Infrastructure/WindowsShellRun.cs index c0d8f23a8c..9a638a6cc5 100644 --- a/Wox.Infrastructure/WindowsShellRun.cs +++ b/Wox.Infrastructure/WindowsShellRun.cs @@ -1,9 +1,7 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Runtime.InteropServices; using System.IO; +using System.Runtime.InteropServices; +using System.Text; namespace Wox.Infrastructure { diff --git a/Wox.Plugin/AllowedLanguage.cs b/Wox.Plugin/AllowedLanguage.cs index 5c8a220f4e..840792af3a 100644 --- a/Wox.Plugin/AllowedLanguage.cs +++ b/Wox.Plugin/AllowedLanguage.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Plugin +namespace Wox.Plugin { public static class AllowedLanguage { diff --git a/Wox.Plugin/EventHandler.cs b/Wox.Plugin/EventHandler.cs index 1bbe950a4f..4c1fb0f4c7 100644 --- a/Wox.Plugin/EventHandler.cs +++ b/Wox.Plugin/EventHandler.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows; +using System.Windows; using System.Windows.Input; namespace Wox.Plugin diff --git a/Wox.Plugin/Features/IContextMenu.cs b/Wox.Plugin/Features/IContextMenu.cs index 0fa42076b9..ce42446640 100644 --- a/Wox.Plugin/Features/IContextMenu.cs +++ b/Wox.Plugin/Features/IContextMenu.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace Wox.Plugin.Features { diff --git a/Wox.Plugin/Features/IExclusiveQuery.cs b/Wox.Plugin/Features/IExclusiveQuery.cs index 6c6acbf5e0..ad816e4bda 100644 --- a/Wox.Plugin/Features/IExclusiveQuery.cs +++ b/Wox.Plugin/Features/IExclusiveQuery.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Plugin.Features +namespace Wox.Plugin.Features { public interface IExclusiveQuery { diff --git a/Wox.Plugin/IPluginI18n.cs b/Wox.Plugin/IPluginI18n.cs index c1068ccab8..f0bdad2ff5 100644 --- a/Wox.Plugin/IPluginI18n.cs +++ b/Wox.Plugin/IPluginI18n.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace Wox.Plugin +namespace Wox.Plugin { /// /// Represent plugins that support internationalization diff --git a/Wox.Plugin/IPublicAPI.cs b/Wox.Plugin/IPublicAPI.cs index d8d6824426..e4ebb3f96b 100644 --- a/Wox.Plugin/IPublicAPI.cs +++ b/Wox.Plugin/IPublicAPI.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Windows.Documents; +using System.Collections.Generic; namespace Wox.Plugin { diff --git a/Wox.Plugin/ISettingProvider.cs b/Wox.Plugin/ISettingProvider.cs index b0542a2a1b..78d77cf572 100644 --- a/Wox.Plugin/ISettingProvider.cs +++ b/Wox.Plugin/ISettingProvider.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Controls; +using System.Windows.Controls; namespace Wox.Plugin { diff --git a/Wox.Plugin/PluginInitContext.cs b/Wox.Plugin/PluginInitContext.cs index 20fbe79a16..c8e3e04852 100644 --- a/Wox.Plugin/PluginInitContext.cs +++ b/Wox.Plugin/PluginInitContext.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Plugin +namespace Wox.Plugin { public class PluginInitContext { diff --git a/Wox.Plugin/PluginMetadata.cs b/Wox.Plugin/PluginMetadata.cs index 48e6c024f7..7607fda04f 100644 --- a/Wox.Plugin/PluginMetadata.cs +++ b/Wox.Plugin/PluginMetadata.cs @@ -1,9 +1,5 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Security.RightsManagement; -using System.Text; namespace Wox.Plugin { diff --git a/Wox.Plugin/PluginPair.cs b/Wox.Plugin/PluginPair.cs index 03aa657ce2..1b5da1b174 100644 --- a/Wox.Plugin/PluginPair.cs +++ b/Wox.Plugin/PluginPair.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Wox.Plugin +namespace Wox.Plugin { public class PluginPair { diff --git a/Wox.Plugin/Result.cs b/Wox.Plugin/Result.cs index 8e55230367..21998ec59c 100644 --- a/Wox.Plugin/Result.cs +++ b/Wox.Plugin/Result.cs @@ -1,5 +1,4 @@ using System; -using System.Collections; using System.Collections.Generic; using System.IO; diff --git a/Wox.Test/FuzzyMatcherTest.cs b/Wox.Test/FuzzyMatcherTest.cs index 72ae160e41..8290b2e06e 100644 --- a/Wox.Test/FuzzyMatcherTest.cs +++ b/Wox.Test/FuzzyMatcherTest.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; using NUnit.Framework; using Wox.Infrastructure; diff --git a/Wox.Test/Plugins/PluginInitTest.cs b/Wox.Test/Plugins/PluginInitTest.cs index 47c5928fea..3bb5658c5e 100644 --- a/Wox.Test/Plugins/PluginInitTest.cs +++ b/Wox.Test/Plugins/PluginInitTest.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; +using NUnit.Framework; using Wox.Core.Exception; using Wox.Core.Plugin; -using Wox.Plugin; namespace Wox.Test.Plugins { diff --git a/Wox.Test/QueryTest.cs b/Wox.Test/QueryTest.cs index 03c766d5c7..69aee10a11 100644 --- a/Wox.Test/QueryTest.cs +++ b/Wox.Test/QueryTest.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; -using Wox.Core.Plugin; +using NUnit.Framework; using Wox.Plugin; namespace Wox.Test diff --git a/Wox.Test/SemanticVersionTest.cs b/Wox.Test/SemanticVersionTest.cs index 81e6e5ddac..5b7097b69a 100644 --- a/Wox.Test/SemanticVersionTest.cs +++ b/Wox.Test/SemanticVersionTest.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; +using NUnit.Framework; using Wox.Core.Updater; namespace Wox.Test diff --git a/Wox.Test/UrlPluginTest.cs b/Wox.Test/UrlPluginTest.cs index 754bf41c92..b6952823a0 100644 --- a/Wox.Test/UrlPluginTest.cs +++ b/Wox.Test/UrlPluginTest.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NUnit.Framework; +using NUnit.Framework; using Wox.Plugin.Url; namespace Wox.Test diff --git a/Wox.UpdateFeedGenerator/ConfigStorage.cs b/Wox.UpdateFeedGenerator/ConfigStorage.cs index bdc6a30f3a..28f0c6c0b1 100644 --- a/Wox.UpdateFeedGenerator/ConfigStorage.cs +++ b/Wox.UpdateFeedGenerator/ConfigStorage.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; +using System.IO; using System.Reflection; -using System.Text; using Newtonsoft.Json; using Wox.Infrastructure.Storage; diff --git a/Wox.UpdateFeedGenerator/Program.cs b/Wox.UpdateFeedGenerator/Program.cs index 62953a2a63..d2b3f274e6 100644 --- a/Wox.UpdateFeedGenerator/Program.cs +++ b/Wox.UpdateFeedGenerator/Program.cs @@ -1,14 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Xml; - -namespace Wox.UpdateFeedGenerator +namespace Wox.UpdateFeedGenerator { class Program { diff --git a/Wox/ActionKeyword.xaml.cs b/Wox/ActionKeyword.xaml.cs index bc74e381e8..87499a4f25 100644 --- a/Wox/ActionKeyword.xaml.cs +++ b/Wox/ActionKeyword.xaml.cs @@ -1,21 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Linq; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Forms; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; using Wox.Core.i18n; using Wox.Core.Plugin; using Wox.Core.UserSettings; using Wox.Plugin; -using MessageBox = System.Windows.MessageBox; namespace Wox { diff --git a/Wox/App.xaml.cs b/Wox/App.xaml.cs index 44b57bb193..5fb45331f8 100644 --- a/Wox/App.xaml.cs +++ b/Wox/App.xaml.cs @@ -1,14 +1,10 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using System.Threading; +using System.Windows; using Wox.CommandArgs; using Wox.Core.Plugin; using Wox.Helper; -using Application = System.Windows.Application; -using MessageBox = System.Windows.MessageBox; -using StartupEventArgs = System.Windows.StartupEventArgs; namespace Wox { diff --git a/Wox/CommandArgs/CommandArgsFactory.cs b/Wox/CommandArgs/CommandArgsFactory.cs index 1e0f3a0dca..7f2fdfc98b 100644 --- a/Wox/CommandArgs/CommandArgsFactory.cs +++ b/Wox/CommandArgs/CommandArgsFactory.cs @@ -2,8 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Text; -using System.Windows.Input; namespace Wox.CommandArgs { diff --git a/Wox/CommandArgs/HideStartCommandArg.cs b/Wox/CommandArgs/HideStartCommandArg.cs index b8ed670632..1918858b1f 100644 --- a/Wox/CommandArgs/HideStartCommandArg.cs +++ b/Wox/CommandArgs/HideStartCommandArg.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace Wox.CommandArgs { diff --git a/Wox/CommandArgs/ICommandArg.cs b/Wox/CommandArgs/ICommandArg.cs index be6391ce02..11db545571 100644 --- a/Wox/CommandArgs/ICommandArg.cs +++ b/Wox/CommandArgs/ICommandArg.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace Wox.CommandArgs { diff --git a/Wox/CommandArgs/InstallPluginCommandArg.cs b/Wox/CommandArgs/InstallPluginCommandArg.cs index e69d20a633..524115b4d6 100644 --- a/Wox/CommandArgs/InstallPluginCommandArg.cs +++ b/Wox/CommandArgs/InstallPluginCommandArg.cs @@ -1,11 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; using System.Windows; using Wox.Core.Plugin; -using Wox.Helper; namespace Wox.CommandArgs { diff --git a/Wox/CommandArgs/PluginDebuggerCommandArg.cs b/Wox/CommandArgs/PluginDebuggerCommandArg.cs index dab93500f8..0338840788 100644 --- a/Wox/CommandArgs/PluginDebuggerCommandArg.cs +++ b/Wox/CommandArgs/PluginDebuggerCommandArg.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Input; +using System.Collections.Generic; using Wox.Core.Plugin; namespace Wox.CommandArgs diff --git a/Wox/CommandArgs/QueryCommandArg.cs b/Wox/CommandArgs/QueryCommandArg.cs index 7e58ace4e2..22f0443528 100644 --- a/Wox/CommandArgs/QueryCommandArg.cs +++ b/Wox/CommandArgs/QueryCommandArg.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; namespace Wox.CommandArgs { diff --git a/Wox/CommandArgs/ReloadPluginCommandArg.cs b/Wox/CommandArgs/ReloadPluginCommandArg.cs index f287e08c85..aec5724c11 100644 --- a/Wox/CommandArgs/ReloadPluginCommandArg.cs +++ b/Wox/CommandArgs/ReloadPluginCommandArg.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using Wox.Core.Plugin; namespace Wox.CommandArgs diff --git a/Wox/CommandArgs/ToggleCommandArg.cs b/Wox/CommandArgs/ToggleCommandArg.cs index 743a3e8874..623648e311 100644 --- a/Wox/CommandArgs/ToggleCommandArg.cs +++ b/Wox/CommandArgs/ToggleCommandArg.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace Wox.CommandArgs { diff --git a/Wox/Converters/ImagePathConverter.cs b/Wox/Converters/ImagePathConverter.cs index 20843a6864..eb92e62514 100644 --- a/Wox/Converters/ImagePathConverter.cs +++ b/Wox/Converters/ImagePathConverter.cs @@ -1,11 +1,7 @@ using System; -using System.Diagnostics; using System.Globalization; -using System.IO; using System.Windows; using System.Windows.Data; -using System.Windows.Media.Imaging; -using Wox.Helper; namespace Wox.Converters { diff --git a/Wox/Helper/DWMDropShadow.cs b/Wox/Helper/DWMDropShadow.cs index 60253f8c06..d1fd92757e 100644 --- a/Wox/Helper/DWMDropShadow.cs +++ b/Wox/Helper/DWMDropShadow.cs @@ -3,7 +3,6 @@ using System.Drawing.Printing; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Interop; -using System.Windows.Media; namespace Wox.Helper { diff --git a/Wox/Helper/DataWebRequestFactory.cs b/Wox/Helper/DataWebRequestFactory.cs index 7e474bd4b2..61922d29df 100644 --- a/Wox/Helper/DataWebRequestFactory.cs +++ b/Wox/Helper/DataWebRequestFactory.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net; -using System.Text; namespace Wox.Helper { diff --git a/Wox/Helper/DispatcherExtensions.cs b/Wox/Helper/DispatcherExtensions.cs index a2f5643ea6..72880e2ebf 100644 --- a/Wox/Helper/DispatcherExtensions.cs +++ b/Wox/Helper/DispatcherExtensions.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Windows.Threading; namespace Wox diff --git a/Wox/Helper/ErrorReporting.cs b/Wox/Helper/ErrorReporting.cs index d1de5c9822..e7b5a81fb9 100644 --- a/Wox/Helper/ErrorReporting.cs +++ b/Wox/Helper/ErrorReporting.cs @@ -1,11 +1,7 @@ using System; -using System.Diagnostics; -using System.Windows; -using System.Windows.Forms; using System.Windows.Threading; using Wox.Core.Exception; using Wox.Infrastructure.Logger; -using MessageBox = System.Windows.MessageBox; namespace Wox.Helper { diff --git a/Wox/Helper/SingletonWindowOpener.cs b/Wox/Helper/SingletonWindowOpener.cs index 393b236731..2b49503981 100644 --- a/Wox/Helper/SingletonWindowOpener.cs +++ b/Wox/Helper/SingletonWindowOpener.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using System.Windows; namespace Wox.Helper diff --git a/Wox/Helper/SyntaxSugars.cs b/Wox/Helper/SyntaxSugars.cs index e7caf8560a..fc1bf50892 100644 --- a/Wox/Helper/SyntaxSugars.cs +++ b/Wox/Helper/SyntaxSugars.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace Wox.Helper { diff --git a/Wox/ImageLoader/ImageCacheStroage.cs b/Wox/ImageLoader/ImageCacheStroage.cs index 21dd028d66..9c13aab06b 100644 --- a/Wox/ImageLoader/ImageCacheStroage.cs +++ b/Wox/ImageLoader/ImageCacheStroage.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; -using System.Text; using Wox.Infrastructure.Storage; namespace Wox.ImageLoader diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 3969505890..182b8458c3 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -24,7 +24,6 @@ using Wox.Helper; using Wox.Infrastructure; using Wox.Infrastructure.Hotkey; using Wox.Plugin; -using Wox.ShellContext; using Wox.Storage; using ContextMenu = System.Windows.Forms.ContextMenu; using DataFormats = System.Windows.DataFormats; diff --git a/Wox/Msg.xaml.cs b/Wox/Msg.xaml.cs index 3fb7b89b8f..2dd1d500d7 100644 --- a/Wox/Msg.xaml.cs +++ b/Wox/Msg.xaml.cs @@ -1,19 +1,10 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; -using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; -using System.Windows.Shapes; -using Timer = System.Threading.Timer; namespace Wox { public partial class Msg : Window { diff --git a/Wox/ResultPanel.xaml.cs b/Wox/ResultPanel.xaml.cs index 576ef4d7f7..7c44bf36bd 100644 --- a/Wox/ResultPanel.xaml.cs +++ b/Wox/ResultPanel.xaml.cs @@ -7,7 +7,6 @@ using System.Windows.Media; using Wox.Core.UserSettings; using Wox.Plugin; using Wox.Storage; -using UserControl = System.Windows.Controls.UserControl; namespace Wox { diff --git a/Wox/SettingWindow.xaml.cs b/Wox/SettingWindow.xaml.cs index 603d4712a2..e78ce1b40a 100644 --- a/Wox/SettingWindow.xaml.cs +++ b/Wox/SettingWindow.xaml.cs @@ -1,34 +1,25 @@ using System; using System.Collections.Generic; -using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; -using System.Threading; using System.Windows; using System.Windows.Controls; +using System.Windows.Data; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; -using Wox.Core.Plugin; -using Wox.Plugin; -using Wox.Helper; -using Application = System.Windows.Forms.Application; -using File = System.IO.File; -using MessageBox = System.Windows.MessageBox; -using System.Windows.Data; -using System.Windows.Forms; using Microsoft.Win32; using Wox.Core.i18n; +using Wox.Core.Plugin; using Wox.Core.Theme; using Wox.Core.Updater; using Wox.Core.UserSettings; +using Wox.Helper; using Wox.Infrastructure; -using CheckBox = System.Windows.Controls.CheckBox; -using Control = System.Windows.Controls.Control; -using Cursors = System.Windows.Input.Cursors; -using HorizontalAlignment = System.Windows.HorizontalAlignment; +using Wox.Plugin; +using Application = System.Windows.Forms.Application; namespace Wox { diff --git a/Wox/Storage/TopMostRecordStorage.cs b/Wox/Storage/TopMostRecordStorage.cs index dc56ed550c..a1774a9fdd 100644 --- a/Wox/Storage/TopMostRecordStorage.cs +++ b/Wox/Storage/TopMostRecordStorage.cs @@ -1,9 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; -using System.Text; using Wox.Infrastructure.Storage; namespace Wox.Storage diff --git a/Wox/Storage/UserSelectedRecordStorage.cs b/Wox/Storage/UserSelectedRecordStorage.cs index 7afa73c814..3f6ac51ca3 100644 --- a/Wox/Storage/UserSelectedRecordStorage.cs +++ b/Wox/Storage/UserSelectedRecordStorage.cs @@ -1,10 +1,9 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System.IO; +using System.Reflection; using Newtonsoft.Json; using Wox.Infrastructure.Storage; using Wox.Plugin; -using System.IO; -using System.Reflection; namespace Wox.Storage { From 251834143c9b0f2d1be59e9a4396efc0091bf49f Mon Sep 17 00:00:00 2001 From: bao-qian Date: Fri, 30 Oct 2015 23:18:05 +0000 Subject: [PATCH 25/75] Better comment --- Wox/MainWindow.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 182b8458c3..10e878eee3 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -460,8 +460,8 @@ namespace Wox { Dispatcher.DelayInvoke("ClearResults", () => { - // first try to use clear method inside pnlResult, which is more closer to the add new results - // and this will not bring splash issues.After waiting 100ms, if there still no results added, we + // Delay the invocation of clear method of pnlResult, minimize the time-span between clear results and add new results. + // So this will reduce splash issues. After waiting 100ms, if there still no results added, we // must clear the result. otherwise, it will be confused why the query changed, but the results // didn't. if (pnlResult.Dirty) pnlResult.Clear(); From a6f8eb28f244a6bd82745c3d73e11b5555b3c7ff Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 16:02:56 +0000 Subject: [PATCH 26/75] Refactoring Query --- Wox.Core/Plugin/PluginManager.cs | 31 ++++++------ Wox.Plugin/Query.cs | 83 +++++++++++--------------------- Wox/MainWindow.xaml.cs | 8 +-- 3 files changed, 47 insertions(+), 75 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 9b38913165..a8a9ddf463 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -22,6 +22,7 @@ namespace Wox.Core.Plugin public static class PluginManager { public const string ActionKeywordWildcardSign = "*"; + private static List pluginMetadatas; private static List> instantSearches; private static List> exclusiveSearchPlugins; @@ -117,11 +118,18 @@ namespace Wox.Core.Plugin public static void Query(Query query) { - if (!string.IsNullOrEmpty(query.RawQuery.Trim())) + query.ActionKeyword = string.Empty; + query.Search = query.RawQuery; + if (query.Terms.Length == 0) return; + if (IsVailldActionKeyword(query.Terms[0])) { - query.Search = IsActionKeywordQuery(query) ? query.RawQuery.Substring(query.RawQuery.IndexOf(' ') + 1) : query.RawQuery; - QueryDispatcher.QueryDispatcher.Dispatch(query); + query.ActionKeyword = query.Terms[0]; } + if (!string.IsNullOrEmpty(query.ActionKeyword)) + { + query.Search = string.Join(Wox.Plugin.Query.Seperater, query.Terms.Skip(1).ToArray()); + } + QueryDispatcher.QueryDispatcher.Dispatch(query); } public static List AllPlugins @@ -135,17 +143,10 @@ namespace Wox.Core.Plugin /// /// Check if a query contains valid action keyword /// - /// + /// /// - public static bool IsActionKeywordQuery(Query query) + private static bool IsVailldActionKeyword(string actionKeyword) { - 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) { @@ -247,10 +248,10 @@ namespace Wox.Core.Plugin internal static PluginPair GetActionKeywordPlugin(Query query) { - //if a query doesn't contain at least one space, it should not be a action keword plugin query - if (!query.RawQuery.Contains(" ")) return null; + //if a query doesn't contain a vaild action keyword, it should not be a action keword plugin query + if (string.IsNullOrEmpty(query.ActionKeyword)) return null; - PluginPair actionKeywordPluginPair = AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.GetActionKeyword()); + PluginPair actionKeywordPluginPair = AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionKeyword); if (actionKeywordPluginPair != null) { var customizedPluginConfig = UserSettingStorage.Instance. diff --git a/Wox.Plugin/Query.cs b/Wox.Plugin/Query.cs index 79fe259be4..0ec0882ea3 100644 --- a/Wox.Plugin/Query.cs +++ b/Wox.Plugin/Query.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; namespace Wox.Plugin { @@ -9,42 +10,31 @@ namespace Wox.Plugin /// 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; } + public string RawQuery { get; } /// /// Search part of a query. /// This will not include action keyword if exclusive plugin gets it, otherwise it should be same as RawQuery. - /// Since we allow user to switch a exclusive plugin to generic plugin, so this property will always give you the "real" query part of - /// the query + /// Since we allow user to switch a exclusive plugin to generic 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]; - } - } + /// + /// The raw query splited into a string array. + /// + public string[] Terms { get; } - return string.Empty; - } + public const string Seperater = " "; + + internal string ActionKeyword { get; set; } internal bool IsIntantQuery { get; set; } /// /// Return first search split by space if it has /// - public string FirstSearch - { - get - { - return SplitSearch(0); - } - } + public string FirstSearch => SplitSearch(0); /// /// strings from second search (including) to last search @@ -53,56 +43,34 @@ namespace Wox.Plugin { 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; + var index = string.IsNullOrEmpty(ActionKeyword) ? 1 : 2; + return string.Join(Seperater, Terms.Skip(index).ToArray()); } } /// /// Return second search split by space if it has /// - public string SecondSearch - { - get - { - return SplitSearch(1); - } - } + public string SecondSearch => SplitSearch(1); /// /// Return third search split by space if it has /// - public string ThirdSearch - { - get - { - return SplitSearch(2); - } - } + public string ThirdSearch => SplitSearch(2); private string SplitSearch(int index) { - if (string.IsNullOrEmpty(Search)) return string.Empty; - - var strings = Search.Split(' '); - if (strings.Length > index) + try { - return strings[index]; + return string.IsNullOrEmpty(ActionKeyword) ? Terms[index] : Terms[index + 1]; + } + catch (IndexOutOfRangeException) + { + return string.Empty; } - - return string.Empty; } - public override string ToString() - { - return RawQuery; - } + public override string ToString() => 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")] @@ -113,7 +81,10 @@ namespace Wox.Plugin public Query(string rawQuery) { - RawQuery = rawQuery; + // replace multiple white spaces with one white space + Terms = rawQuery.Split(new[] { Seperater }, StringSplitOptions.RemoveEmptyEntries); + RawQuery = string.Join(Seperater, Terms.ToArray()); + ActionParameters = new List(); ParseQuery(); } diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 10e878eee3..bfb09795c7 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -452,8 +452,11 @@ namespace Wox return; } - lastQuery = tbQuery.Text; + queryHasReturn = false; + Query query = new Query(tbQuery.Text); + lastQuery = query.RawQuery; int searchDelay = GetSearchDelay(lastQuery); + query.IsIntantQuery = searchDelay == 0; Dispatcher.DelayInvoke("UpdateSearch", () => @@ -466,9 +469,6 @@ namespace Wox // didn't. if (pnlResult.Dirty) pnlResult.Clear(); }, TimeSpan.FromMilliseconds(100)); - queryHasReturn = false; - Query query = new Query(lastQuery); - query.IsIntantQuery = searchDelay == 0; Query(query); Dispatcher.DelayInvoke("ShowProgressbar", () => { From 9d9400f4d92187dced5ec3c15b64e7642507eb92 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 18:06:57 +0000 Subject: [PATCH 27/75] Fix Debug output DebugHelper is useless, bacuase the return statement is always executed before the actual code. --- Plugins/Wox.Plugin.Program/FileChangeWatcher.cs | 3 ++- Plugins/Wox.Plugin.Program/Programs.cs | 3 ++- Wox.Core/Plugin/PluginManager.cs | 4 ++-- .../Plugin/QueryDispatcher/BaseQueryDispatcher.cs | 3 ++- Wox.Infrastructure/DebugHelper.cs | 13 ------------- Wox.Infrastructure/Timeit.cs | 2 +- Wox.Infrastructure/Wox.Infrastructure.csproj | 1 - Wox/ImageLoader/ImageLoader.cs | 2 +- Wox/MainWindow.xaml.cs | 4 ++-- 9 files changed, 12 insertions(+), 23 deletions(-) delete mode 100644 Wox.Infrastructure/DebugHelper.cs diff --git a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs index a493365b0d..559a06518d 100644 --- a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs +++ b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Threading; using Wox.Infrastructure; @@ -15,7 +16,7 @@ namespace Wox.Plugin.Program if (watchedPath.Contains(path)) return; if (!Directory.Exists(path)) { - DebugHelper.WriteLine(string.Format("FileChangeWatcher: {0} doesn't exist", path)); + Debug.WriteLine(string.Format("FileChangeWatcher: {0} doesn't exist", path)); return; } diff --git a/Plugins/Wox.Plugin.Program/Programs.cs b/Plugins/Wox.Plugin.Program/Programs.cs index 1b1ee94485..87b2aeeeed 100644 --- a/Plugins/Wox.Plugin.Program/Programs.cs +++ b/Plugins/Wox.Plugin.Program/Programs.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; @@ -74,7 +75,7 @@ namespace Wox.Plugin.Program { programs = ProgramCacheStorage.Instance.Programs; } - DebugHelper.WriteLine(string.Format("Preload {0} programs from cache", programs.Count)); + Debug.WriteLine(string.Format("Preload {0} programs from cache", programs.Count)); using (new Timeit("Program Index")) { IndexPrograms(); diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index a8a9ddf463..cd5a0ca20f 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -99,7 +99,7 @@ namespace Wox.Core.Plugin API = API }); sw.Stop(); - DebugHelper.WriteLine(string.Format("Plugin init:{0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); + Debug.WriteLine(string.Format("Plugin init:{0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); pair.InitTime = sw.ElapsedMilliseconds; InternationalizationManager.Instance.UpdatePluginMetadataTranslations(pair); }); @@ -196,7 +196,7 @@ namespace Wox.Core.Plugin o.PluginID = pair.Metadata.ID; }); sw.Stop(); - DebugHelper.WriteLine(string.Format("Plugin query: {0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); + Debug.WriteLine(string.Format("Plugin query: {0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); pair.QueryCount += 1; if (pair.QueryCount == 1) { diff --git a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs index 35bf8bbac2..aeb886536a 100644 --- a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs +++ b/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Threading; using Wox.Core.UserSettings; @@ -24,7 +25,7 @@ namespace Wox.Core.Plugin.QueryDispatcher PluginPair localPair = pair; if (query.IsIntantQuery && PluginManager.IsInstantSearchPlugin(pair.Metadata)) { - DebugHelper.WriteLine(string.Format("Plugin {0} is executing instant search.", pair.Metadata.Name)); + Debug.WriteLine(string.Format("Plugin {0} is executing instant search.", pair.Metadata.Name)); using (new Timeit(" => instant search took: ")) { PluginManager.ExecutePluginQuery(localPair, query); diff --git a/Wox.Infrastructure/DebugHelper.cs b/Wox.Infrastructure/DebugHelper.cs deleted file mode 100644 index 447071abf1..0000000000 --- a/Wox.Infrastructure/DebugHelper.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Diagnostics; - -namespace Wox.Infrastructure -{ - public static class DebugHelper - { - public static void WriteLine(string msg) - { - return; - Debug.WriteLine(msg); - } - } -} diff --git a/Wox.Infrastructure/Timeit.cs b/Wox.Infrastructure/Timeit.cs index 89a8dbbddc..7a857bee4b 100644 --- a/Wox.Infrastructure/Timeit.cs +++ b/Wox.Infrastructure/Timeit.cs @@ -17,7 +17,7 @@ namespace Wox.Infrastructure public void Dispose() { stopwatch.Stop(); - DebugHelper.WriteLine(name + ":" + stopwatch.ElapsedMilliseconds + "ms"); + Debug.WriteLine(name + ":" + stopwatch.ElapsedMilliseconds + "ms"); } } } diff --git a/Wox.Infrastructure/Wox.Infrastructure.csproj b/Wox.Infrastructure/Wox.Infrastructure.csproj index 7d5db6eeb5..3c10409c02 100644 --- a/Wox.Infrastructure/Wox.Infrastructure.csproj +++ b/Wox.Infrastructure/Wox.Infrastructure.csproj @@ -49,7 +49,6 @@ - diff --git a/Wox/ImageLoader/ImageLoader.cs b/Wox/ImageLoader/ImageLoader.cs index 8fa9f9c5d8..62924c1710 100644 --- a/Wox/ImageLoader/ImageLoader.cs +++ b/Wox/ImageLoader/ImageLoader.cs @@ -122,7 +122,7 @@ namespace Wox.ImageLoader } sw.Stop(); - DebugHelper.WriteLine(string.Format("Loading image path: {0} - {1}ms",path,sw.ElapsedMilliseconds)); + Debug.WriteLine(string.Format("Loading image path: {0} - {1}ms",path,sw.ElapsedMilliseconds)); return img; } diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index bfb09795c7..f87277bbbe 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -491,11 +491,11 @@ namespace Wox { if (!string.IsNullOrEmpty(query) && PluginManager.IsInstantQuery(query)) { - DebugHelper.WriteLine("execute query without delay"); + Debug.WriteLine("execute query without delay"); return 0; } - DebugHelper.WriteLine("execute query with 200ms delay"); + Debug.WriteLine("execute query with 200ms delay"); return 200; } From 1616aa87bdbad5df0eb4d4d1b4d3d1c1b8bc9ed3 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 18:20:43 +0000 Subject: [PATCH 28/75] Remove PluginDebugger --- Wox.Core/Plugin/PluginConfig.cs | 5 ----- Wox.Core/Plugin/PluginManager.cs | 9 +-------- Wox/CommandArgs/PluginDebuggerCommandArg.cs | 22 --------------------- Wox/Wox.csproj | 1 - 4 files changed, 1 insertion(+), 36 deletions(-) delete mode 100644 Wox/CommandArgs/PluginDebuggerCommandArg.cs diff --git a/Wox.Core/Plugin/PluginConfig.cs b/Wox.Core/Plugin/PluginConfig.cs index 6824495844..2b89a9653e 100644 --- a/Wox.Core/Plugin/PluginConfig.cs +++ b/Wox.Core/Plugin/PluginConfig.cs @@ -28,11 +28,6 @@ namespace Wox.Core.Plugin ParsePluginConfigs(pluginDirectory); } - if (PluginManager.DebuggerMode != null) - { - PluginMetadata metadata = GetPluginMetadata(PluginManager.DebuggerMode); - if (metadata != null) pluginMetadatas.Add(metadata); - } return pluginMetadatas; } diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index cd5a0ca20f..9fcd7a36b1 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; @@ -28,7 +27,6 @@ namespace Wox.Core.Plugin private static List> exclusiveSearchPlugins; private static List> contextMenuPlugins; - public static String DebuggerMode { get; private set; } public static IPublicAPI API { get; private set; } private static List plugins = new List(); @@ -167,11 +165,6 @@ namespace Wox.Core.Plugin return metadata.ActionKeyword == ActionKeywordWildcardSign; } - public static void ActivatePluginDebugger(string path) - { - DebuggerMode = path; - } - public static bool IsInstantQuery(string query) { return LoadInstantSearches().Any(o => o.Value.IsInstantQuery(query)); diff --git a/Wox/CommandArgs/PluginDebuggerCommandArg.cs b/Wox/CommandArgs/PluginDebuggerCommandArg.cs deleted file mode 100644 index 0338840788..0000000000 --- a/Wox/CommandArgs/PluginDebuggerCommandArg.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; -using Wox.Core.Plugin; - -namespace Wox.CommandArgs -{ - public class PluginDebuggerCommandArg : ICommandArg - { - public string Command - { - get { return "plugindebugger"; } - } - - public void Execute(IList args) - { - if (args.Count > 0) - { - var pluginFolderPath = args[0]; - PluginManager.ActivatePluginDebugger(pluginFolderPath); - } - } - } -} diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 5221f7090b..9e31d96248 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -134,7 +134,6 @@ - From 4a95dd8ba3b46f0a050f677b1ba09b2e9e1fef8a Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 18:49:37 +0000 Subject: [PATCH 29/75] Use NuGet for NAppUpdate --- References/NAppUpdate.Framework.dll | Bin 142848 -> 0 bytes Wox.Core/Wox.Core.csproj | 6 +++--- Wox.Core/packages.config | 1 + .../Wox.UpdateFeedGenerator.csproj | 5 +++-- Wox.UpdateFeedGenerator/packages.config | 1 + 5 files changed, 8 insertions(+), 5 deletions(-) delete mode 100644 References/NAppUpdate.Framework.dll diff --git a/References/NAppUpdate.Framework.dll b/References/NAppUpdate.Framework.dll deleted file mode 100644 index 398d46b81063164babc3f1468ef275cc9a6562d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142848 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 ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - False - ..\References\NAppUpdate.Framework.dll + + ..\packages\NAppUpdate.Framework.0.3.2.0\lib\net20\NAppUpdate.Framework.dll + True False diff --git a/Wox.Core/packages.config b/Wox.Core/packages.config index 09e1c4eff1..2825ea4cc2 100644 --- a/Wox.Core/packages.config +++ b/Wox.Core/packages.config @@ -1,5 +1,6 @@  + \ No newline at end of file diff --git a/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj b/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj index 2752c0e04e..4dbc7473b8 100644 --- a/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj +++ b/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj @@ -34,8 +34,9 @@ 4 - - ..\References\NAppUpdate.Framework.dll + + ..\packages\NAppUpdate.Framework.0.3.2.0\lib\net20\NAppUpdate.Framework.dll + True False diff --git a/Wox.UpdateFeedGenerator/packages.config b/Wox.UpdateFeedGenerator/packages.config index 7a13476a54..9661aa0af8 100644 --- a/Wox.UpdateFeedGenerator/packages.config +++ b/Wox.UpdateFeedGenerator/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file From ca8293ebdb1535ef2aa009390e3d61fee9c2d30f Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 19:15:58 +0000 Subject: [PATCH 30/75] Migrate MSBuild-Integrated solutions to use Automatic Package Restore http://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore --- .gitignore | 1 + .nuget/NuGet.Config | 6 - .nuget/NuGet.exe | Bin 777728 -> 0 bytes .nuget/NuGet.targets | 136 ------------------ Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj | 11 +- .../Wox.Plugin.Caculator.csproj | 8 -- .../Wox.Plugin.Everything.csproj | 11 +- .../Wox.Plugin.Everything.sln | 29 ---- .../Wox.Plugin.Folder.csproj | 11 +- .../Wox.Plugin.PluginManagement.csproj | 11 +- .../Wox.Plugin.Program.csproj | 11 +- .../Wox.Plugin.QueryHistory.csproj | 11 +- Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj | 11 +- .../Wox.Plugin.WebSearch.csproj | 11 +- Wox.Core/Wox.Core.csproj | 5 +- Wox.CrashReporter/Wox.CrashReporter.csproj | 11 +- Wox.Infrastructure/Wox.Infrastructure.csproj | 5 +- Wox.Test/Wox.Test.csproj | 5 +- .../Wox.UpdateFeedGenerator.csproj | 11 +- Wox/Wox.csproj | 5 +- 20 files changed, 29 insertions(+), 281 deletions(-) delete mode 100644 .nuget/NuGet.Config delete mode 100644 .nuget/NuGet.exe delete mode 100644 .nuget/NuGet.targets delete mode 100644 Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.sln diff --git a/.gitignore b/.gitignore index fc8205cacb..57103cd78b 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,4 @@ Wox/Wox.csproj *.sublime-* *.dgml +migrateToAutomaticPackageRestore.ps1 diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config deleted file mode 100644 index 67f8ea046e..0000000000 --- a/.nuget/NuGet.Config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe deleted file mode 100644 index c296edf177fc5c0373b2c705a006b8c686098e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 777728 zcmb@v37lL-)%SnrcF*nZJ2Oc-JxnJVAPJJ8m?0tTGXsPGitMW(n;@Gk0ylOOmJHJl zARf^5A|NWi1x4S1y`+wf|^Uf!^eeS8M zQ>RXyI(2HjhaCUbAQuEdp8qer5Cos*SAQ$*`JW$C1kYOd*;&CSN>42Qbl1U8EPlmV zXV(|4swHREPC0MUX{VfjesaO0Q_ombTYdhbv(I1j(!-8gbY61$8O!?m;;mEChrcWc z4(`eY*FOD)BeL9n5`2?g zgJ6#RYyGCLK1xu8?!gB42DK{vRb`%8VJuDWfReF5x4DcB?4JiJLBAhh>}hK&qnL%7scDBEt!Gh zDGa)U)33+}>&`2fE<7Fv(Xp53g5IvKO`~^w-!h!&rWS^`3UiYN5EC2{^*94Ou8`pj z@Hk54;~C&_r3`0)$Ds{Ao&g?5AwA9jk3#?+XMo4`WjF)C{W^50e$?+MW<0hPn9#v{ zduXji~8VA)+UCGU2q!;Hx-J$gd{ef=2#EpRksk23%q_4g9!Osl_zAlmCs5khC! zw4Ae=<@AuzMi8F10ni?A7I-Tt3M)>J1j*SqZSmUv3FhLmcnCx7mLd@|6K*btq)1YzmKZuG6%_ScB zT(O$aM&iEyO1_jvB0L`3l1QcMTHvlqce#6D;nG{m-3e6Vz8c6?m3*N=rRB#dVbH%Z zS_;iNEhe54)`A+FwS`lGX}GW!R4l2bj8vkzkwcT?N}*gx5MsQZY`Pp(6+7xC9wS9i z&Mz6KV8Kw0H*z0^>%bSkk}vyGx|3;A)wOWZRVkK>1I2aaV*TE(AX<|v7mDS)+ZHB9 zAKCcA3%O)ZK&#o2Vd>c5^8R2Sl!<@koO>8LV;8|(_i7mHigRIqg4E+4s7oTf#es#p z--756aNIWlH@g$LRL;L&(JS3K_XSb7PkeXR&=y3GSmH`ljy79SA}$gwM+rqysk_Tj z^;oNhO0n_PJVHHzl#5j9H56`D|9UtKO(65vBA~8HsazTu=ywC8zg>uOsal=(I&b=` zs}j@A<1r=rmdV6?UJXL-C1Ho5(lkz9{)!AkZ|zp^mYv>qw=i+|!`kO~u<@ zinU0&2x~zNO4|%y-V7Jkg7V$TV$nmYBXe@O{z`AyUG7b2neiwx3c&P*-D%Dbz)88! z0yj_@!O+G9L+*Hx^Sq+XD$g3ouPe{0cJuJsHXHMf2_pupV>D_-aON&|&;CC@@w zjGQA@5niO<=Y(Tq5roOskj)dr)OsYFo)M5@KA z!(@zDqOmCw6@3*z_@^0RssQs#WGw5eMAzzIq*Vv%5*_02EBW=b z6mJ&G`Q)WUs&o%jqS1tCvZ?R7K;e}_DR~)T;|G8)nQ0$i0qBc#dP`B&W271GNBkOw zWmU=a!M&V!`V!Cc{=BS-%8-R(EYmHsUhcm3>>aNzR*&s17BFQ;P))mmCP4H12_6{UF{Zr7YeR7!Gy}Em4Bnh-7eJ>LZvx;1CX2^o#oU zK8FFs1Bdo{oB#gP z+>#7ufX5AGI0HNmOXSlU;BlBGk23%q4TPqgA2-p433?k%3gOZ6rM3uuKs*dkIdt@I z(U>e~=%{X-y5o78jFSaeiQ&*;eZ22CMrnhvKMox=74?K}B|lNYEy)w%Xy8#y1#~O{ zbYpi2kKPno{)4rPw&FTh6Vj%gwCVo+|y zHofmD)G(*`E{B1^=h+KtL1Cb1ehc=M__0a5;C6-gI>L^I`^}$1_uwRty_~>4`+70} z3WLiR27@SbY`m%HF5$86_x~+vScB ze{)UVu{WUV#=TfUA4RY`6X6YwE(Kqs$*fAzg9-V^ebb_*gi7u;B!N0L9520j!)qyE)h+^6T?_wRJ%xew+wyA)bh|KxU8tdHy)T?FA`E_KA|LIxad5d)e}sIT|}x}mPV5b=68%|>GP5MVqh{xiEr zxu`C$I|e`&+_DU30Jvpl%9B@Hg8c5Ygfa+WfRt}Yl5LWkBmciHc#K) zPa&l{Q^?wFZP6?OIvAy4_qT;@O5)TOiIKKwMgsRBBhg~WXOI0!l?Wpiv@@LYrwG}= z=l3G)+5AH@4@b2{nyHE7(L1Q=C^;RtC#=1sD=mBD3EYZt+EuV9Btq>70{Yie@!lGE zcb?YWK4K_V+ea5g@5-M6;VBU_iW5{{Y*5(vx^mcs90qEyf_jU1)y4`qrtRcPDn#tg z5;>)`u?; z8;rE_t-m4d9%|fVvI%63ZukE!52oa(+cy!tT2&x!w+Y?v!Rd7qOnL%Z&kwD z6Ir}e3FZ^#jqO213v16b!`maAD?aq7l|!l?4ULoYh4U)YQoUBQ7!LNvS)ers|IPo; zq8%URMI7nxz%W5jv=mtm@BY&MR8+G$JE$Gf9_b={8#RD*;C9Y%26!C$;o}+LaX9B5 zXMo4;mf;NWIBLYlGr;4{i0N1V@ICuvNWFjhhGvO`Ov4n32Yoj$y@owCD@0bBthKXS+MtkWR>K9D38W7 zxghU5o3R6-5mwzLq-al97P>9nXg3H;CtoG*Efn4LN>T`m$yESF_hz2Hzm9xX^kWx* zvx$=aQJOdeg{WWEZJkqrDGGNj2M$CG9`GODd^LdR(25{MQ|G#z4JP@baoG zpC4=>?JSc+4RT&N3r0`xF!c(4;?Omkp|7)0z56*7dXxsZ_?CjrDm5OKs7Z|9R5YP# zO3J%Rm2UXP?UBEQ$p3eak~v9{J5{|f-K=Mko*^iUy%t|y?0Ro}C1YXO)nP=s;r;j7 z0Y){LZRMr+ZF*(!AGy1bQye89L8Z`xHK4|~Blf(t*C1Z(YUnNpce~z-)%3T1H?jLl zh2*3BmSPC18j=t3=4D=4UJCYu${g~n#`*5ZJwP@+VXolbLQDq#BZL+leapz$BEYmF zU*4=pjIJrqx{|L+UzS1YZkTpXsmt}BG2Dxz+~l_~R8ctjl>J!E)gMJ{?lB&d-vBEm zihJ_OYJLhU=91mQ*uSY&#qJ^=_@l?bS^YimXEmWEi)Js2-d=zOg$DWiyy>6ZhyrJSD6JX~t}1xQZfZz90-P z4OV>Cn@7!=oB$1Efm<_0Dw|Xp7!Gp@u117-FdKNN*jIU|s6gBsRcW9I1wXNfMkkNZ zDha!Su%$oTKyxDI#sMle^)JcT=ev2Z{XuGO@||Y~xATizQqHo%2;C2*T)x}g2=TFy za2T1DcQ^1FC7&a(v9>G7=iQPXl*nU<-PbEkaygJ=J1bFNV|$9eq>`VTb8mpFS>441 zD;XPar7<;d49FY7JYB7HZ&2AVL$^`mdR4zsu$n3Onkjb=cUk{(RIqvC`45B9;Ka9O zGMp29h&27}Wsx+Z@gqdpN|krR;<+%k0#tXudpCs{qx3-`d08%qy4`z)@I`JGjCql0 zOzcDhz16-#v6MVPtW*-$G$m2VM+24av`V5pHW9P;C^4&*!UkG9g-y$xmZvc6>*Jze z;X7mwG-nY9d-6*=q)(uamC;iXdUA#Ovn9zlSN}R1-4_*erTPO5+~lOB?fomfmh&>k znXOsjZS9<{oDCT9XY;`z^igWn_fb%aU+gkudQuF!`@C%59J)*4VvKY_ZXD$eYJ>6$ z<~7Gy8UsYZ%L$>az`M!4sOa5p8{{`UE1ybxiIA)Bp#j8E_pE&KG)(jq@=G=r4gspu z7sYPA8p;5CEAkC}QnmBgYNF0s}h)wM+hLca53ICW$@J^lsj;Vsyq;u%rt+ux7d4XZ zqabL#{w?Res@KTBC4VHLd1KWTvK4JuM%QnJ`j95F|D-br`Ck-phZ37Am$|d{p?pvSiRZ8H;7F9uMtV3psB}wHH1*Nf$oGI4xMoU3ytd}bm zsxgu^`*JH|$-u|Ue6c9NXvq$z<;=|ulA9=$Ep~WokW1bPf__R?uaID+b_&gWBXapfU?J`D7hXX*~)3 z1VIAFae~tkCs2=ZTCt^Z@x}Sba!hHk%la(jnl`*=%AeRlKvK$jIuJRd%#KD7uf6qOIoBIQ(E};{>x5 z4?*QW&ILPJT{AHbZ)j#eMd~xtUuOV-vI#GYuux#&WAF5NkR%>J2UgUIgu2F8K{6Yl%76LuuLeB_Au> z67#cDbRvD0MU0c*%F6k^SjNHk#gO`)k)n?eh9dV4oU$c0O*vG16%=hioBWVLuNGNzi`K+nVQ=12T!i11e#<4-DMYJQ|a#WsEarzleWzX+NV)`GO; z?DqzoA37RGG**N@J650&4d=q-(?rKV>sFotenGkZ88B?!h#ZunnY=W3odXS4xcVxY z54?5o7t+5(^7AxPVVohseHMzz{USRGO%(M3V5a4-Qs9HYxbO7X@i@i@&HNNm#@7Po zi^=CeYop4@*rg!)HJZlL)VPDS*v}KFQE^=kmG)hD*C6>Yue?}Smb@>0k;PK`w-8A} z7Q$Yv?Z~rInp+ftq2VQwuTU=J@`)so&UWp^lGuzw@iN&Wc}WZjxZSVI(~m*8{6O> z{z|D>!9bRa zChvpGHw&bJL*$k-tiL#z@|0D+z8zvxl@^EN2x;*HtYgkHI^TE!C>}O7;5~p02Td z5EwH=9+dY8`mp4bE(j(jg0X{uH7}w)Jljw{ugZ+$#ClIlyLyYYo7L`2af-F~x50O{ z!Jlfu4EN0`>?NmC?aR%8f;r1YrS>GGE2UA4p*)Hwi0tt{^!T~pYl0)U5?R_bTcuRr5hn=UjA^jD0s@p! zOVlE^7|Ez1E6h5fmtTi89GT{w+SI(r50KNT>#YB}BKXiqm#Ng?^38)okgKCO^}m^2 zu0tuF{INy_80Eib9ki_Gim!A=QlL2fa1>9*p*P&?cheL+#a zDc-TABkmzdqBmD`WyZ3NquXeGTM?fUEnzLl>ex}Vk-o6tXvk4QtQcdkuj(P6d`EB0 zLUwzH_Pe}VFX#Eq(BA`{d|y$c5~8y9%Y*`mw8<|0#7ylq?OtRRSQVpNVVN#w2$KAO zlpgFaB|qe){wHcAc^XJH?d|4$!7-&w)>U>o2f?||bx2u5>y{Ag0ojZhUbqGS6Im_tG~I`|1G#+QRZW{y5h{gDqU7p&=5idkHl(fUu7 z>Cbp%LcMw>p&}qJpVtMK{V|)XnH4B!g4l=A9D|sRLC#{vqw5FaZuEqOxnc5*m=aIm^qw+`uAWv)73ALZrVW1dXw7UWwC6)X6q39 zr5*Zp%HUqKm<;3}Uk;t6Ejpn_RDR;Wr@uEHSMExj$YHseb@y#T13tfn!KN&0<$SOz z4I3{icFBsDI#@QtSjfCB+0&x?Eqs{yW0R?tM*87LzUUxjJC_*C#8d4h&^1b_|1!3p zh`ZmBm`Q=znB(O4z_mRU@4tbPKk#6%(W^|7Kl0MIVIi1T)LFp-x=OBP#_bk=y9(%EFF z*SkG~qi^tKIW=_HQR&!6pzP-yv2&(l@)uQ`*pTwVjdhHndH>JI`OIUkt20G}BN{Vyb;GHFR8jT76Lp__>6e-$&rT9Biej5J==7769?z2=m#7UcU+l$XxX zJm`FD7*gpT-Ga7JnB@ zY!4ngPEmUxkH>&7UG5!gWijB+Ze`I|?z1fVd=>{c85wYAwPI<9uNawSvAowbyF43T z%)F-A<-&xx@$S;>3R+&CNBkE2jP` zwAuIZyCVtf5ygz7{N!`wlrxKt^HfmTe?zey?RsQe0|wu#k1WNHh?eh=VEv@Y8NNWax#XQ1Eh5D#ENaY0ijR~pg4@5=X9 zdq&kmXL~0t%H0rVN2X{t9wid{<4;aR<(9{=|q&*(10$BJLY1;P_jlHYC;G=Q^}2K~Dg6j?5KNKM<(Z+lV3txV5= z_ugF(@!Szuw^{P&!78^tEiVMRgs$@(7$@Xwz-ru7FOg~smx7iGt3Xe+zPXZkC3PC}~;JohZ`#%JOZ3edz13`?UZ6P;VA=F~nRqIoS-nYw()Y z>(9x!t;*lBY0we)4&Jm}-WK#nQq8Cn*rZf0^kV3Q&+wXNQt8d#ro~B@1sn^>)0pz5 zsy9%JKDK-_I*XEvr6cS<6THU5^tn-TsbF>^U_T;CIfFQ_f_l24mPxHlpe^O_GF=wD z8kz2iOto44KS)*8)oKkrnm@sNihPw8V4=6T*~-nOpRJbAR*(KHPobC;iK<;%%~}{= zO(KesP$G}^=D|*pr155|l7jbX;e)=}*8mnsb)d%JYhhCflg)W#VI z+<6(!0C0oLUm48F1;I+{wZ1=c;yhhHeg|Hr*NAZ_2DZI0Mb_wmn0FY#?ZpDvcp9bL zlGo%S9!<<5VHOiPxuhLEB=lrEW@}-t<}rFFS+OknajIq*?W&1?ue71=aSV zo<@6t+IOF}WnMds2$t*UD~aVNt$RJO+6fA4FI7hVS@P=Zu?5K&%GH*Un<8*~y(InD1L+_Wh-e05lD_iep z>ix#%d+k#c-OW{Ag}DV+0kAgb`hk+`n(-QEDcxG$i+(W-U1KdE9X*e2XBEd#A{s|K zGK29}>OAc)v?yNYD0JHU);Cj*>?~lY9J8Wy7%IU?`<#JffPkSg$6^_DFlsKAdma6J za*6pLE1G0pYtHFaX~shyCvND8%%%L-#fyj zI~Vt0Xbxo8JK|`}C+d910W4;?GdrMhB|dSmH*Knxi-J{Cl6>t1L6UjxK0%Upt-Amu zIoIY3lH_Vv3zC-9&q9WrYPknQ!m?i!*;;aProbuHb!LAi&ew~^D+Z7^?LWzI26)`6 z3}*ni%JRj*X_#01X#5&_((H_xjI6s8Q6=Ay(XMKjLE044(Ts0>RogSpz(#!nH$|ud zGGV|TA{b07?bWSH zGjlH+Z-)Adh=`CqWN|WktN_dn=*%_(4WZn}X&0t?-F24r{ zAhopxD}~;Ny>x9)*t``QDtg2`6L&h;u`Q#15SVkHA(eLUWMf$0CsmeL?A{fslloPq zCJz&F-pXB#q!0_^+EZwl@A+tF`Q%o7&}4I}haEiW+ZOhgJR#P+?^d$;38EP)S*XV%9-F*2zD#O| zsYu6JH#84M&|l@l{N(HO(>-~CemEOm=U1|-Ebk4DvK&+n3~5>uCh-)J9{)pWm%xFKJ;1`tWa~zw=}qkHukb+9n_v_7kD@!u57my(u@86B`YW^+SEb2 zkJ4S#2{&0FCd>$O?>Uvj%r5GNYF>{x|>$N9IrI)SBYzS*&Z|@fh9DesBsZc zw%Z)(r{|-EwIH`MU2@~%wn#7?)j7x&PYG*5ZWki;l^U0{MWgz^k*mF&jQyleTkTd0MsrQ>FD!dj3;#YxI1>}AA*8GT$DR!FwfTQTM0 z?Ql`!av+c)dV zG$UoJt#z;<(QF+(n<`Rzp5TnGpS|4sM7oFO0Z7tTQoZ%2xAf%GGFNc}cTe!Z!4uRAw|8$Ikl|zUr6W z_~Ip3^9RhfjRqIpoz25_YyDYww_w|36l~_tw0GFVUHbwuY}&SPU1ScE(aN*Fv&sDq z%;oO^Cw9(Z3+U?4n>kxcXtQw$6uMreFEe29O@yy@# zWm`^W_<;!95U!%dBZ}eu+8*s0)ZSd$#<9pP8`*55n!1a}CZ`{Ly20h!1!d~~5KD(^ zFl`)lng#$ij+*BVGnyEMi1nao>`^ka^)7sJoMGa9n+DlCN;GWTcYsqHH&F81kG@Yz zZvmK`YHkW@>v2IJf}*rx%+gnTQuBA`hNDH>+I)H>vAKOrO$NiFY_plR0S>axMM6fe z+C!)r(bVnQWGAPc-16MH6I-JmWVAWO3|<|YZhjJ54%3Y z8Q^g@WHWUCUp35ze6x?}Fe3d=;j%$a%~_Zm_*2O-T( zH;)s8gAcp#W1WhvV)%DE+8x=cY}=0Ic2!(=P&4Xc%UbW@rEj4ujw#>RFN2)ZVv}>a z#9#qquIH2&e`v4hP6E!_u=?)r5rZZ~8y+LX^HT=L_BSC~`|-mG<<~E4x~%Ro$vozn zID1wi(NLHhaL15rPRN-?ZF+OB;4SYyg4)J;H%?kMbtdx(d2tuKftgG85t|$9lUUQs zr_)SX(uRLr%em~r;=saKz`m$BpN+|)Ti?}ffS1;J^-k~akls9E+-y)WpAdZ<-n?S1=+ z?ES7tW!gBRwgrJ+VfowpS~WmXLh3Y&AMcemP^J zQ(B4CW%+2?Jb#q@Mf@R}czoMdMpv}b*j$mtN@yrJ?|y8}y({!!yk|ys4E? z-B~IFMQywbrOE~_%&&3%8RVvfwIEH-j5OZe7U^_FdJ4{_gtZ{IQazbTlf63NZ?6)?mW>}3>(A&8ueOUDX}!o5%NV+E~0sq4W9VXPptTeag}44-R1 zr8KSC;@kUBRQyIf-n05sQdst6sFrC8lt;o80nH|%{Lz>$O9Wze;7a3Q3*;ga` z&eaa=6$Kc|`jUIY#w{?KHRab3=3A4n7Swp7Y9rG>;@{d9|IB85VJ)a}ReSu(@;Sjd zlHhg+A{qu?;k5rm5 zo+ATx-FidVHjUxVY#A%BxIE^^=o|dYkdv-W4tg=qU-Lj?(l~M?t z>Vr1<`ZxS@X!>s@}r7nL*;=D`CV#`q}!kFnGIO z3i6~zV$R<6;oCOe+om&TL8y++i>HLOAh$2C?q#IV-GAJmnY;|dz>3vSf3Xx+HC3LD z*+=z@*qsMYJ>CVtoyaBs;(cAQFJk}yx5zAwSIN8A5>V+*odv7J zWTWDiwQZMUNA$=_kW09BHkI)XO(_giitbzy;LNZ*A={JdqcV#|XQo4KJw_mH1L~8O zlKuqan^qk8ljyU-nfY{Rd2D;a{aBu*ms7}}Y&IGW0~(tJ>A|qk98H?f{|;M~&Os$ekl{ILPsouojdY%&XR) z`KhjyxlB{K*C7LMRAo1BP4AU>nChH-6RF$onV7uV-f>5CM^^G@gsNYfu7g?Et>Gul_Z^KNoiR%Zi?}dxMP6%loXzlarTi=yV?O+K(SgotqD(=MaBZhb%}_@ z3U!FtdCSX)m%-P!!MC-+_q5kj3~#W{I*7{I`u z%n|BPum1X1y2C9nWP1|xNf(l+U^`V)Cjq~RizNuTfDm6+)$tjiPd0wf1)r@^RutJb zs@5JtOalXU(PSE$er13joy*O&Y#dwfkuw)(Fd?JZ_Iz0GHnZONJfdo?bIKLnHvP@{+3ahSM zPMOodmo`g46STA0BS|mgfn**#q0)vpidUM&$Hi!wIZrQh2yM=y(D-;8tM3-8$B9*8 zEl7TJIuqe{wlD;|foNKbQpII+r8EM7ImtI`!=$U+s-D|XTciN14$3R+z8O8AL)bo zNM^BnIf%L?fchSKuHbCb4YhW&-D59RENlH~pY4y6at+3B&Gyj#{l>J&T}Rf#h1$P2 z#iJE*^L*wxVY_~NtCL00xs>;j-#PHWY^4H+a#o@_VfPaI$iPsDYp>(X*OS?tT(?~T z7Dx4;VQ%TGqWXOt)9cL_>(9lEfM-Evo~U%F**WR*qg&ThLYwx;d*x%)@Hp9orHC&u zlnQzGcHZ(yj>zd4-rwQ&T9eu93CwKcQZn^^g580cp$9E1ABo^B+4 zW~1{utEh9V*v)pjRU<&};jc=|HNJvY`va~`3Yjlo)cA!H3-To_g{rc7!<|1st6Xek z0Eg5kmi!Mqv)=Kfrc~54)3%r!b~l0d#wyDzuXA$2`NpqIPpqpI?;)Ca$VOIGUB8#l3)bZQtbc9Hi6xtU|8-N2}{u-N`=yI2O!V zyg4MOGrtojzX4aARS1{#CHtW#rDP)rTKGGVZg#K0x8Rk!{SJ)sxfu4|*jl9S-5dK1 zL9_CWw{T5ihS#-?Y};{HLBV=inz`0+vhPfAUt#DjBXCT$PAZL>-JaUVSu9rBXi;F~ z=JW9PkR)@_&CxB0%mpPqRd#z8Dt%duo^mfcI4i{P24j{tlbnB?ZZP~ncKQtv=_q$x z-*B37pi7orjt8T>i+Z}|GoHtmye)Y9wtk;bi1+#H16q5AuzUPkb#;Yw?SJ$2j|F-$69L-eH+ZE2*o)Skiqv_Lp`r>QKCP*!5E$UxeB(Y^8#pA`fihCsI7T+spj;sWDCNyS2%E z@)MFavi_ugH78&I=_|{NcAj`O{H{ks+pe*rkGT_RrFW4UDlzup@@%LdnzJ0ouL0*|=F~Y1~il*_P4?v1FL!{rCVlC@07m=>l6WY{t|D z?$%~vOppa<4s%NVJ$nYOG=)bThvq^6T2zmwiW@|9-k~*=3@s0 zZKd&F@R@nic;o&I`IN90q^V{;%T`Vg&b=3kzOT*IUatbtq09H=qiV@VNDUAr9~R(Q zdS8>JOn-90R&acg$?!-SoG5vngsyAJdo~ma%Wkn~`GuTQnnx%k2ANYFC(gyB&u8bu z$4QSSCN+L%SR?Ku{s#XWrW1BW|ai`5sbXLUftmcmG7NeWkShR@j$C zjoM%B7I>SI($>Bq=mA07_W?a9i0QvoQ=b!rYrkshAwf$8eO}Pjg1#W=y@DPF%IwYu zYIh0sMFl=3=u3j=$5%~#S&(j5nUbeS0>Mq)yfqQyUA1SMm24{J=u5IvvJp2BL%!TsxYBWwDJE7mwaC3PQ!5IV?3 zY#NC8c3uu%4UGxu=!EFD&l4Ep|8!r!%}%+UWC;AG|3bgpg*US+%e=h4ssf0A4TUaM z-gY>h?GdM`Ps?mj-u6&UD!j_ol1x;_e(Zfhv$1RY`nrO5Es&8fQ)IdaX{<$vT>Xf+ zed>|PvB13wDz!_fD+{T;9>`5d)?wrGFqqC#T2xKt`KStMi(0#aRG~d>aW&;Z_oSl= zK|{RT29(-WL`*x+d@>7x=%|ZK0`qsQz|vB5Xbs1YL#TG~fw6AW8h-6_zh zzvhWw7O%;V$xsySrUY(Qr4@{A3&N*6pqb80t0#_qZA(wajCJDi3AwKt-0DL1YnsDg z>Vt|3@q(`V1RWNC%WBtCoT*2%dfXWtb8Yk$dE{NMTJP?rpgH*mb?x%fSoZGf`)qo*w~xLf!N0AzMq$}@Ylm9fzj8lEpr;}YtMU^?g;UsD;>j~YNia5(%PX8<_v;rR(IsJeT^i+huj zHt^`I4euJdX9>$CZ}y1hJ3|>oxHoU^Lf*bRWkcyKfkjAP^2s$Ry&XL!VH#*UeWtF2 zXwqlYuXpT%<)2TOsRFSp&e>vFli$LXh3EXeXYO}~SfLSoys#H5^FKo9oS9^Qx$3VP z=X!kXUZ$+wA3X_cSGtcpC1hx&Qw66Yg%;1h|s?HI{&8rbtv9VGT`si1kr;40ON`x%LC ztWh1_A{EfWSyp0S506f-2ka@^DtvFmoJ*|HI|ixt=Pa7P?xn9?a&)-fKFkgdJITwg zvOH%Cx^FTb{sj+J`t+Ni<@+6UTu7siiqigLJ128>Gk(tflL#A@6UZFW-+|fZI$Gfs z@8_Lj3PIh>Z=rfD0|S%Dj?bF4$R$jZX1+=k^pu0;gVc=HmflQy{+CD32B1rMHxaj7 zxj!#q@*d#oUWWsl1*#tBZUN(N<*{&)d#~U(C`ubXOj8|~ypNF4e$j#IZM+z73x_S8 zuKQ5gm)O_Zl;^^}oi1~XY1DpIXSKAV)ShZf=cG-;-v}f5$hY5>-?zYfE{<@CNyq*TcK-mAl7g6QOo92(wG0l5Op~*(-A} z^ng)o!)h*JSQIxmJ1VeNE~kl;uS$-VBKa;Ln~^NS?$aXFKL7<9xPnT__lQ^jph`$l ziwR>f?sF(54BYtDgi6Kl3Y~Vr3Saf{ZSSqY^3Qvp{x#I!A*hDarx$@YgSsp5K#^j0 zKO>(fGWi%lITdE#+y=hZbmKe{`#YW}c|>ZvY&P<#MzVxVo+8Gq8SY5k0V#YJM zPQSHFz!mC@j^fMoUebt(5AaFX>A#dLmrxnffAO?mTOM}DBKUE5pF_lKazcA7prt#^ zwRcQG+_BXM#wU&v#&l^O*}Ye9C2oDtypjCm|Da-7-k&93T#?PCUU!j9vtZ2lh(Gmf zdqeelrQO2P<|h9v*Cm?JkMU=S(2Aa7XTuK^w`@{8)+lD}F4Ed>kaJZ_V3) zZkzX4o3Cev$q(4w$HdOvJf;-UVo!XWSA#G6xnXJN4ehnbG_=uV^H9q_27@;G@wj|X}1g+N+txbS3K zW9Adr3iuq4^zsNFY#6V@joNJpdi_wQRCXA+{tzjqLxi0_>rTVA)Dd!RUCd$M8 zl-rp`gp+Ji(v06mDTdhtwd?JPhi_GOA4IYJu;mV*=3(-jjy0$Lq5A+K^}q4(Wo29~ zZMQP*1)ZCrQ(tPixf`%XI-;UvgUX!m7Al!n+ zw=6Wvqfz^@>T5e#vrmn-)t5z7|9=7L-VF~n(^j8kS~E7#oho_g!ljVWSVn3Is{G%Q4&v(G*HlLaPP95-vb-?ps`WfpHKY2#{mpkD9+yP(SVrDu!bikj{ z0e@2m{1YAU|L%Z4Xv>-T`Cte9KRe)$UN|$I+dANX+yP%*G&7w8I^eJCfZxyozj*P? z^v~{qe|rb~gB|dH?SS8QtC{mXp#%Q94)_N<;Q!tMKlYND^F5^l{^kz&pLW16-g;*G zXLP{d*a81g2mD_<;Fm6$Ip2#q;6K;_|6B+BPD3-(zp?}V+a2&rwwamE$sO?5cffzO z1HRkMOn`|Emu8*~2sQvr7m3>JIoX zbin_$1Ac5|=6o;ffPb(9{!bn7mF;Gxzjp`xRUPo3>45)d2mEeJXU_NR4*2(Wz(3gm zKYQ8C^bhEOU%M%Ojo+k~PN6Wf^lwHze2LaEVvjV3l3rV>O?4W(Y3!`ofLj><9i9ro!Sz|e+SQo9wNZ(ARrVRY_ro650owfi}X z(9T%is&S_-d2shZ)!5|XXq)2mli!1TXgWAr`lEgur|lQk9-@ryG4im@Sunj{vLh_fl*pyyIObnpfy7ur`@SJ#?q}1S z9%Ei1+^cOwExDBg=4pcWNp61DO4Hr$2O9M~2FLY15ZIcq-+@l2XP*)M`A1db*jBTWx0&rd2u^B9FH%c|>n>(>lT+_pZt zhWwkSH^OzLs?o^SS6Lf~*A$Xj{H%XNHe1L1%QO;~G)dUdI>+iN(-qkgt0%#yqS?#1tJ^QnRws^shmGYY?nkW-2D~~Nq+;LD>2trj;^8@y1VlInl-HS z>LY2I17ZhbpBJaJ(@&nX%2d&39N=YEwcN|oFZvos?1cU%$p=;xMYpK4eB6UsWDn$V zurgHc;rd+8ZI|O~&))G(gf9lG9Hg5oLia7Ar(XpMnR}UK_Z;1(x^1t(#Z*T+-)G;B z%((|MCFbiZInV94AvMhL5JKj3g~>i-#QZK#Q}&Rc?+}CSViu$c_1L~j2!cs-*6R&# zk(kv>zOQhtsj*il`GF$%Y_4zC5}Rs$8jhUg(o-;gu_Z0vg}!|LE6t{LVe&&Lsd1v( z%vZ19s;La0hpxvVNk5(IQk>e@A<$fhTM zl(?CN{1(jAS)7cggtZ{hOPrC_=Bc=o7$vV(7((zrg&6lTOYH|oUBb}g$ddIpP0t6fS1v|NlL3;jT(gRo21D;{;`;V#?RVH|7`+&>4mi*_97=M zNWbA?B5OaY+mTHoz6Gvy;A|0@OB9}=@I`l;RAFC0ce)@9d0gooolU%Anl$;jq-177 zI{~Vdz74AG%B-k}9T0Jgkz|2bmB6-qxh*i~PY(>2`-b<1cnJO|{%_0wOZl%nvOkvc z?VE{vAStHjHUAI9d}oSh)l=V_)m>IB&UyS*;M5OjD~0|BmzV79>+Q(By7pRPvKhb* zKKMH<>ns<>w+kQDp9Ac1UsFA)@;Df<9=I^Dmc^Q``Y#FX<(%CaNTit8vILjR2+p}P z_2a9MH7cyUmN@+mx@lJ!y?9SudPmB>!44N>`{$Mfr@S%SKUdT}=)oQEzJ6y_JJLz7 z-lRNnYvUjrb?xww|BytK9L)M!+Xg#o#_v&C7|h#^nOt6V519Jr4?x>rjmF~3p2#gp zpv)Z|fO}PmFbzw}Xk#clrH{|cMhtQX<$9uh(B!MWLmN1sM(_M-*q+)5Mp~=K2+uka z+p}3fTx8LOxaf#VRo&be`%5$YQ9+vHQpnQqSi7UR4OU+3)p8J-okjj1f`yzNXpDWUG#-1x zI6eIx_fhwJykG8KRth#D|XVP-zD15$2<+-n037&Rwf4I)A-bzqN&%+qy;VDKf78 zSh=%dAfA#&n1Nue0izv!7(N@%fK2E2#k;>Qm+e1s~eWR0F%) z*wykc@C)PPYt;blmwGvyC>M2YqAIr?I=`3hG3&Q#p1CDXuC5zf0VAeufYXgSg zY5C0fGdkek+X4Um4)`TI%uN5d4*2(Oir+P?{T!S>Uy6{kwXu&NW7fvl?qIv&V_X2% z#)|rxw&rq-UwFdDW-~|3J;Z?JqS`BESd96{=vh{l-Vh*1CB%DW6)gm#dmg}9WUDU=%eq5j&Gxx{F5ZdHUnA| zlYd!&lwZ29^)l)3-Oy_M5>=X6hks2-ro(?}>aeg4Jv!>}=!`n7d@Qp}hkpgabl8An z-1AKx7NVuYhBqCa0dG1y1KxCa2E6I;40zMw8StjVGvG~!+wq&~@G|ztbq~0|Qz-oZ z*v`Bma#}YPfCEo|ACKY12kv(&_tB`5AK|6fvbTaxX$EQZP2@1|UeFK6y;!B?qHXt2 z<>KoWU4LGJ)t*fQ$O7DNGMoV(_uC9-fXDqV!x>;WXZKJnX#8G5HonJQ2tJPPY+*~s zn6Y{(wT_pgz9|57rA!c=P(^O}PGVRCdbe>2=nxm)}Fa z*o1vjn=seggxO7-Al+ULfAl+NBK1+_KKZM*{DrITLW2B)d3(R0I|ZJE z&VA6Szcd}2Y^H3&$$oxXa{@ilgz$EV!Y=&k9X*kRMZ4~c@8RlN4-I_Nu`A=;f%N*S zZa;iw3HjQy=kK)*iMUV4#;=VZwQh@=4W99E)dKt_8R;dH@3H=Nnun%CKrhpXNd1jX zs<6Gi2M+2Rk*7PGZin`Va)n6g{97|W&7X7l1Pp|Z>#jJd+e@xPjX%Ifx=+|(eML3f zJBVx08}u$h?Jf_K!^y(yv>e$1?nE+Fdf)++?AHjtpH#hE(5#nQd%dua!SAhPbKT5) z7`zVr7c|g;LsA{sQniwsT%e!ko(bjkDdqLLW?o5qUd{aytET6b@%d?`J-?au+!@oJ zH$83UQ)KvKM@v(mh{ZbW(Q*34^D-X8MtSEcb+ z`uKY`<7e&t^WyD|P2S!xjkjs-{mLeT?d@IjmdBtoUx3c$&AW0g!S-f1FvD%9{2AIXMo}SJ|OKSK7{v&DQEo!Yyz9IFa~jgHy$S;kEo}%7}hm*C2qK$_esgGL1`oxW^`pHJW>^ zS~}GeEF_}-GMCY=DRlZ~E2D(nL~oRb_feXAXD2sGoT{fT4q#i~Y5;V=y`Vtt`(cQy zb1j?|5-K;SeWmH=wsVt0g+7E$(0gNKCm9W~HOlR-3{zbc2l7|LEFS}WK8j90{=3Fs zCLe6zm25`pS2pUK$(@&ebL;S4aGZ##rVS(pJnej&pdFg<=T3p2pSFJ(9brpNEi z!VK{7`!bvX9ycq)82~QRi$}a(ygAj2!`t;DYX=XzUdlh;CNP$)&#~9g^?`7&rG0B2 zZDcBjykpO9Jk_I&e4cXz%1%npA0?mu)Q`2hEOKZyBk%M=;X65PS8wpT20v5@(eu?* zQmW?@Wzmw4YJjIdH^Uj=ag_{bfXDS`I0HOxvkYedxFf@f+2FEWxb9MA4qkaGAT85C zmd*fAtD4~q@VI#y&H#^_pWzJfIA%J1xeV~Q!3<}B$8DbB4Dh%uGMoV(w`GPiz~dHX zI0L}x><0GE{z9kEmf6U{g9%%~<8gUq`k=c48!v%C)|x&7qFz=_3u{3-$~$6LUHbSK zVD#dA9vOkH+X#GA1m=o>unj$2q6Do}YR?Pm72>Q>`&vX4t9t`r4BX-jX8^eAWqMDm zOahbs_A&|6SOS5pOm~STHulF;!dj49)hd(Xw{aIbBQVrP;A0{%AOgZR^l-2Hk7e45 zC{`u|;QuwDyBI1>!Ry72Hluiiy`eo!FZC+f`LL<>Fuk;eUEUt1mn+>n8y8t}P!rQb-{cZ&=kko~>Ah()mJ%t8Kip|>nxT0;YXu?{M4w8+y zi+J!Av~Ans-lMqeYmTRcwV-56Ub$s>#eBHs;MhW5`6^l|Sp>l667tDn0kRLiALjP_#r(Z&*raL2TS>C5Cw}Ql!unj%j#lEoHwMF}cqP;}Xgl*{IF7bt3 z+7|7Ting_)3ER-atx;hod|{Wh#r-eEU81 zPccjWyC|+<+0CF`XpKgs^%1gkueXeRy%g;H`g+kxj)y64^9-~xES(WHk5z#aRfHYd zitrf~VLKH;SPODfQ0D4@`kx5Pc+L7t?g3E-*-;zpmC+mq|D8?n-&1nJ|3|-H3zMbf z5;lh0GQXD)e^I%x7GxKdr#VAYY5N@t=jSl9`$Fq~OKJZjrM=8(Z{J4yQ=+}S3MOnr z4|f>_tN&F=bf1aRw$uK*0!|8(llcvkQ+T=$@u+vR0Aur3OA(^}!sK*|@)|`^wfV15 zB=){L739TTUjmrPPrfA$IQWLu(eFv*M;5Opj=LPbxH5bR;eLwdUR(yh2BoV;H3Z3S zt~NiyKAg&>O74C*NDgE?Pz)2JdA6LqCQbLS!Vgw>i;v!badPlY_^5xFU~aR)Z%RM* zS;wP}lUqPXVQn?E`rSz|nAE}4cOZ;~ksbNz9o-xn#nng9So%tSiM>>C4-l=G?4$_A zr9W-#h|DYb0lu!bFR^v^n%|HRF@#B<3XRT0wjVLoNHv&ylH9ys&ykPmf5%EFb&&A=r+V_Iz7SZU;SvIhwU z3+L8%CE1eNO_Y8>H**3%A8Uom!?%E+m%?`e&rjj|ffuCkH-HCI_&MOsQ~0mITcoh2 zGPg|OZFgoX3di&B~`i=}BMC)Jt#rqFK^~ed)_33SrBJ5x7Dxv(uMb^fD)X z`LbTh_Oh`ur81{Q=fWB{O5!nu7!+SNm!~9I;yeG2 zIEnwS;Xi(n4RSGHI)G}2pobaSUW8ug_mcEipR?8b>(k%M(qDZmR`@IZuRf|7Cs(CN zeG^xKZ%Kdk!B@TOL$Lb2KK-3YfAt|*Z5;VLzxF9xy*#9so70d7^&(}bad>?y2F!H@ z-=frEg1Zv?{;j?{;BZ*`A>#9m>k1m|*dn5awdbZIdqBF6H$8raev$heS+JFB52y^R zkR0nj1f%POzRz#5&sv?PMN7$^#9;!VEiY+(W2ZL5_C?avQTupGSPOD*fFE}yk95v2 zZ+BjPTjgjm*x0#^%9liCFHsTJg4`P+(AcFd(w7x!r6LJyL5|7Pk;blVk-nlxdn=N# z7UbR}ey-*b=j<~ud{mGKc683&(-cli?s+?Nhh(s=ZF1j-M9AWwnTQ*^wdMO&<;yAI zcuH6ca&H!MSl_0D^oSz8RFQX^)^Eg_>MPcEk<3XSCx?Po`x!$ywawr#-hIccDYsIw zwkJ`2S7v>{SJr7;P+k+$gkL{8&Fh#}UIJ&ztIy`e7)O-rr=@wdqFP?BR$gK9N(j721gEy~ zks(?0(_?WSGH*}k9+&|1)(YZqtPT)R?xcwSA;hll6aEJpfCq4UXE+0luP9i_?~mb&v(~r3m(E(B0AHcg=)rff1~#w$x>Zf> z1jNc@{o7?p+&eORlJTN>xdG_@1iAx_{mC|THxWtqIFYQX4?_C>zT55+`6= z1tll*3M=fn_B_54Tjt)W(#ST>3O+*E&){wS@30lE{bKCYcss2xIfdl)Q+eQ9oW@VD zPFly)_pUL##4^6v0CAf4bdprM>u2aEs=r1*`WjVoCQ!N1pPXgCe4m6(S>4=*c{cCK zIXs5=G)Bp9%j&jGY8c03$mi*@?ss8e5aKK@+0WaxkS|s2d9&YhrFuDoGCf0?TI))W zQI<^C_u4gs=hg0O!t-m}?3Upd)ZX2M2WzuOGyIf9=og}23y)K(0m)YN%-RJLa53)R zv($pkbswZ)wGjh|cVOtABQSKo;Ax7Y_5D7r?FY|FKN8Juj4kKYgN-90k=5>R2=lXS z!dj5cve`gzfE_Q4GJ?V3FwtaCNe{4Ep-ukGc*GLS_p`lSh+)eKzlb{dx`YP9Bre#ilDv_TErgKl40%)6aZ3mBuO3 zxQvhK`Dj4e%;%LppZ%3jUHKfF=A%7B7a$M)rF(|_EgVX*re!^& zy{ycAsk7Aj;*R>o-ng9vz@XrrQ~1q%Z41zI-)n`m_d{t&!~QGDy5lDAKA<&UhV4-J z$239Q)f7ZpfloCN*tp|in4N$p=%;(~M6qvc3P+IDZ{dGdeq1B^?&``NmAO{0A~Nyc zMx0Rm0ryC=7i2~%N-jh=+-P(M3^B-_P!8!1}%h-<>)3&zW<1U;d~*vh{>x$atY7+MdW#e&Qyr@g2tiu;#87`XwKT3nr>j_#dt^VzmAu<6B=t>s^fuMr2AIgBU!eXrjwQ;phuI0t_$)lf z1T`=BMUbK~U?Y;!2%^KYlfI|b_!_&n@IXYXR%L9j-qkc4` z%L9jLq2L@mws@lCmJ>2vBhA^FjDK4C@}pZrVde}|>&Dg`BS~dc*;q6kZ&MGzXs+ym zSxLJ^MC>gg(*4+nH)qc<{{iCiap>H@mm%^paag8Rs^6mkJ2ATnP8Zf8mF?YOx%x|$ z>p?Uy)41nczy<_k!c7ZA7Ddh+a61yCEXnvqWv1AQ2b2v#nfLITP6K!&hh|5qWZHz$ z2MJ=r>~_d~L4R*iSAQoa6i;G8PXC$e=PX!~%BCH5A=)eO6ZThfSR&n6neO|sf-P?O(MbK5u(V9fL6rGP}x8*)J zLVie)~Gcv1Cp;ahjH<@~PqyB9RfX#&Xy0bKxzdY4Ho)UbYMC4j& z`d{*Nt2aqhhZmUNC{Yx)GP|?G5|`}oS>n3GV*7=vmbgUm+9$3}@j6YMPg^~he_gu9 zS(1&n0R6ILVwchSZ*`Uluj=0t;hsYo>VcR?Pa}B2x;_&RIwGb=l_b7gbrNM}@aE0G zRgpDNKE4E0E&|SkPC)TT@Nw@$x=8!DqV1oc^On}@|Dj$jc#|S{gW;jAhGjb6ep;YU zdNQBxA1b;CK7EQ)Sy=10?^njO_*J+5hV3xg=1tgr1D;l4q1hJCBvSPL*o*xr8OqLv zU%F=+lP=wtT6?eEWh<`4c6u*3`LNXCMqw-Z7{P}J0F|o)6lsE^DSJM;6u+cheRcJ9 ztz=z&VsO++zRscl*^(fAn#KzsherGf9?|}OZ+~LI>^dlk_g0OuZH0;-XsrqvptF$d zXtg#O#8`234o^RWc%(Ul(D88_h|{CvwwYbDCFSn?$fg7-Ph$u=136%1eZDfoHu8|M zj+s4^pKRdnE?C&I8B9(4!9#MoP^ZF)_?+jH$%Phcw2q(!tFqFy1{8*P<+~3Qe+m-X ztyDYka?c=l=bZ;ah46XSSyZY?nX=xu<}%HcR}q}P%J5uXZDlSgQueS`+xh4P+L(muuO0C&P8YYunVEHkWgMxnLlkgiK~d7OI_98O-eaOQ;E zDInRCd>bU+)X{W<&lD%tY$q`@-8`mtEDE`f8=WfU+2bo(5>BRCoy^hBF`bZA0>=x-u&pTW6EMTZ91 zvN2*v1jleFz8tU4#=Bv=tH0aYbE)h#K=Q?04+6?(LGUvdv^t)VxSPl(IXf4Qt}N?c z-A1#&x&b{wx=y@l(><-qjRxsHh@ygsmrb<0hA;&U?RgNBR_3nY%^8c&>y@v6K`-Cu z53*KqF!)ozkH0AFF!~a&&VjCBsXh2Ehg)ho_*khb%(BFC5TYx2Bo((%yvli9Zv4>*()5W;2Anv%-qCq#KO>@|BmPtbTgmME29b+^r{>h?;)Y- z9P==$Qp}oQWlT`>a#upA@!ky5;X=AbNP?P|yGlsMXONB%(zQYo)Vvz+%lN-d{$G*5 zpyuVSh6q`89nj9<9hC0qdfc3lI23H=IMEG!np}wcM%-rjB)SO~LclcyA1x6K&zk|w zNxJsi*N}&e6EeKKUA){vh%rIU%P|L?>#o(~t@u)|)>nKwINpWymeoK{4G5Q9dSciF-9wb`8(BX1)^|l7jEaNsj!BNV%W}BQ)$Ap-2vzzj^rCxiEf^?1LP3e=H~6A#kd1)=R$!zgjOot5%736z-It!DiePziAu5Rl-*0pT zM}gB1&Kt~8-bk3!97pt$ju2zpw$5Vt`(Sjv1^`28zA!&($d(~F&pg^D%AQ<@U9>Y4T-f0+u=CKoTOxu9PClW= zxnBztO_ryh2TLxUM%q|gyOUzj{_b78i{T~jt=}z2`~#l#dw7HzCFXB0PJ1>>!Cp=VVl(wgnOLg8xVv?PPMm5t)PK4F? zJ_3vhYF-XmP}QArJhby+)8Rk<88{k2e$JZ_Y%k-TsU(ZhJ9SM_oiXX|TPA$qj+ zHN6o1vh_8inApJbmp_=-C~Nsa62}e1F~j1pzCRlaM}f1^^yJ&(>B&zorpB=n+G1i< zi%bdapF(@Or>)b(ZL~YuX?IM6ScfT<8nLEMEPaK#xuFX8ZzFpxCD%*byjMaLJ+_tF~lHtjeHHCs-%$~Z@YZZ`k@+V zSYS8>uiTUg(XW*0nksk@7sncCL}Fjjt_@CPu2Qf&pmo$<9;5e_jCB!GcFu`lXF{-0 z6D;~QMCW)=(Sv9szadoo7(UT&Cxi={0Wb}!gwVgb+PC3UVE8m62+J$ zX1CDq;2lQZyYm2(*5gt^yk1wR_z4kUHYRy-G^`286_B4Igz}N^@^T^l#LyOo6TiRqrMQXx-muUkR~e?w$pwKO6Qab)uRPeyK_$g zv3ml$a@BVME!ju(G~k%=iPduBDcT=o*2#|`TbU;wpsx z28DAPPAzQWv>M-Av`Z~n21fwId|bJQHSy9V?~R@zMkv1(+<8~{)z18QKil-lYNrLO zUO;!^LzaDxM86|kZ)Ny%VyxnRudhze*!1n1&AqFqON@05^mInQC9`l&YdNRme8NLL zkKLZfZXeUcG6v~-CMGDo^_e}C?D3iPziW%N2r%9{0XW?!1 zu;ztjmGOQA=`?lL3H}U@6RTa5dnSuxG^Ul+J)WT+&(M@|&y@b2DGB9r^qdmiYm#c) zRV%rk-b>zleDnvrbJ6oc>g(z2>FpQT^4srX^m(rPk{iT>U`G~E)T9>kr_(k)eGSa| z3C==>39?AMe$yg>Kgau4{+|J!#orOwjlllGUsDqOL}wBYwdUEpm4EupXq;t@A)Oz3 z{eTPArp)7fm0KJxYREhKlnHO|8o{Ruqw)yjc{-I;1b?xWCQ^-go3 zuqG0P=+9u$kG#Mu=|{9E{BaOR#Unc$?ovLwJbuaJ=UVt>ltIAreO{O5ZNV&SuVSkD zI3?QO@7`tcTE{$kDA2YPy%Iq9}ulCG@AX z9Uc9JN0GfmWr0N+?Ujl0EJdkCY3n-@g?c(>Zl82z;)IQ^j_9vAd^~JSf?xkP_;X_9@4V8r(oVA@v;jEoALcua7Dy#};s zyUE;@{aM2MJI{+9Da}(wbKKK>T_k>HGzX#}hoGphS!h9wC8VzLu(v!Bp8I>sZeLLs4_Pk#+8ENG9pf2(o5fLK+^{%4){KL8(28Sg zu*#!aBkke9kRs_+B#b3Kl1vhs^il4lO%)@hOP976-R1C8_C0OUUBQQL<;@WbL_Hoa z<+WR!$(K9`z1=DX<$81uUTOYeO!XA|?2bA_#((y7_fA~7D+$rq6czArp9ZU!@x)Gt z0W1QXS=m;#e0)apdy#4xTtVb6lwBN)m(snN}>`K(tMFE+=^XV_HkkMQ7u#{u`>%Wa!l|6|^QlKfbAs7ixmqchcb(YNGAL zYNxR}&?VDNe*#7d#kxJ*2~k5ZTw z&>E{}5VWsV6f=BLV1T-R=K9&p?;L1jv~$|@Hs9%OCDrNJZ>+eP$}h!dk=AA@zx3IP zuBTAF6b3M_yS_X>E#B01_E)cI=WD?8r72JwA6-7C_YmEfLK}%1x^tcws!qq_?(J@T zMx^&J(ki7)l9SpegWYYUC$^_}qK|2|(j;O=v9^KO)@M&Q+Ep9!)jO$ix#E&onZ0SS zS=%!=4GPh){Y``R`B?=XHb(D;(N^{7Qk?_p5=$KMFOxgp#?7H zpR!@`S%ltHH2)6q#K^srF;MezU(*PrVZi-_uDNOywiAUyGz4ab?p!|63w5_bCB#Gl zpYH3pVOsghnjF(zzfNZkOH1wY6lM-!vYj%Qw|=3!1p>K9&t%Wp#&7pE1M3;hBOV=W z@@1S|OH-(}wKT&oBObQS6P0bf*y5^vT3NBJqOHD1MQyP(J|}1oP;5DT7mD$GA{-Oc zymV!#x6xf!_|T}RoW##HiCL!;n)#lK!~|vyzb8`4YxfNZBz0y-!p&Em`Hxi%wmoSJ zg_@q;?t#DA_OvEB&m&{+e>L_RITctMzt%iyxWT4YM-TwARy!{e6)VcHdJS%W{j-U7 zp}Q0IP)TG~QlLeZNsg?p%uTJXtY+7OBaZRS3S;SJZ#^{uq58^n#NS0OIS+BKCw?_a z-xZ{+nTCI_F%4VzwL!P3%9-%%`RXwAY$9`6-DGNBsNU90kh@En95Iuu*t{zF-drR! zzdpWkg-W#oIrjrl$Mk71ttZ;4=2}##M^<)bxQ;T{&pJDZ25$A+Lg~ItElw&NIRopirUsVJqX|Me$H@ z_Y$(xa;wc?x9Q(neiehR-ZZ}^+uqC87Jd>{kzW5V#(qn;sd_ma&xj5NJn|}$6{|M_ z@Y*h@5EKFRb+7!F`P|d=(dJ0%_c(q%c~*{?Z+j~Q1i04%sBw8xQj@j-RTwx~U)ATi zd1ZzSzE?(07KuVXWBh;lL|J?)FGG5oD3ktAGyCc|-@OIfy)RYQ*|F)ViU7^6S`Za( zPsfb@c!4UzHatw3b-D-ic9b|NScr##cdwidZcr)F(Jubkk9xqI!}?-7fk_i|V5pLA;;LP3Pqt837`xRk zk8Z}NE|?!x5h+g#W~x7&8QB{BlnJu5SQ*i-U{TxW{V?9NU6{%QjIq}!A9POA9AE?c zatbqthh3Y(%;8~QNnz&ju&<^tb9mTwDa;%mc6|ynhlkye!ps3oYt)sgwr9sOx98Iw z9{;8kW)2U#Ifa?S!w?94SaW#TttreL9`>~qW)2VgdI~cKunHA`{F{JuGvwX1Z=^Wp z@ZoMtVdn6#Z>BJFc-Xg6m^px<&v-R3>+?cZ5VY(2Z92KSpx#gC@orDUnS*dY;tVXf zjc=!c=}RXAh&dur857jJ+;^bmzN_wBWgT^bLOVFf)?Y@bUmT4nxC1zjg^0W-udc9U z>LTtp)KuKsNOdc{dpEhC^zPl|e#*P|koy_$-c#=1d-q;)Kj+nA#%T} zuRvvwy^elF zBO471-bm*{HBFi^XHCQEvve5#HUL}3YW$u9SpIr0+vN1;#rqRoLN`VAj&duZ7DKre zgL5IXt@R7PhS}9LTJk%kQd`blr;cL|_9|n+`>KCA zOGo`Kxf|c*S-(?GH-ijKW$JwEK5=I}`Cj;R9hONZ6Y9b;6ORp>OwtiqJo&Xnk>q_o z(3+=y;hN(}lxDUQ<^Rh_J6226USZ9+swv%ecZ>B&f(^C%9i(E>S@S{Fu-f;8zXPSM zJ?A1P<^69p@5T>6OvM~bd}EYHtyWO;a^IuDHtxwF%@op(LK4)x9GeTN-d8dB7*TC! z^}@4qhXS9j3~O=K_+f_PEK%G^6a_Ue$6f)-e~w!y3I%tkc=%B!#QF+h@|d9JW%8JH zFEV0sDp!%GOy9;8-R-J@# z-=XUIRlZ^=q8F+}bU)bsTh+H5(G{`I$K~d(8*bNhx@>i^FuCXF=%D)~zZ@L~Q-YJv zN#(=!0+Jgngl|s6TV~p(O<22|SgEU0gnd3s++)`J zJkB%T3kKP_R8VVLixQkOO>>3B`5l#Tm}+Y*7e zx9HP~0XNC@vLNB}8Px%C&m~v~l4!qKnc2m!_jrH1>9M02MI@amO6m;5_;NASgbx}BA3&B z`B@axM8YtqZrg|G;d^u7JMk9Rdou*6`xbmV-uq_o1y`aZ%U`t${ENV*0b{Ih?$^(7 zj860qY7dv-zXSEEzhb4nQ6~c42gqUj(ujslg|~s@zZuEWS>tSg$*j?;4%?1p3UUu} zEHjHsrj3uTo(G;F!>7Lo%TJPuvKLl)oc!_k8f_O$Js>Ffv~Lz{wZtbOWVYED^KSG# z?OgjrYL_bSdSU!J#ia2HDMY%OEg2q|sw;l(tP1Z-V@Bi3m}{GFvw4Y2L7L`C$I;EF?8Sh=1=}c1l zcv@kyN%l9pjc!5!FJ#@+6tc8Im6X1EvbMdd)I-$*f!mK&-4JP8+`*#0uRRBY7Qa(D zGS0vO|C6bG7-;OO`gVxDk)!Z!Ha6OtzD;N6El}N6bxr*%`+i0;XJ?PBbLDCPr;2AC zY$DT*<`Q6hw8%)W`xwQZw)1oib~n)-Z=-uGcp2h33z(&SWa!F_DgI_nSHbD6meDVq zLeR7Kx8c;+orx%P+&vh>wHmGq4Np-=vM!RT)}L zU-lGpEZ?KK!xanZIG8v3qHohH=dd-S&XjaMtaNIwZVq?{_DBjd2Qbz@k06BEL{R!P zN0sb(0&e}hw=F2yVp6N)vvd26MxyHp8&>H!#0 zz{r#UKLeoU+*B6r2sR|%-KiUt-V)HHpze;vF`_E&87joqo%_8E>6TrO*B+`*uP1B2 zU)0)fv_HXCoTE?-?v?5TWd@1O$=uH33M57@K*GJ0bWdiLj>hGV;c=BbO9O)!J;Zy39u|jtH;M9oZV6}u7axrm%GAZH1tIxSURK)XVY(TB6UoC+g_*yP=#{Ynz|qiwRcdFJvuc8<`^QBi{8t( z58Mv(8A=^V_kZ$shvZ)H)%YdFncRami+rv+dg&FPOmj85Qt>dmLC72vs^KeB;cZ6a zS3qpt+Z>0u_rgZ?1SptK>n<~cU%M9g6KjD_+-1#lc3TVlw6(ymS_}N~wZJFty5@LC z*8)FnE%2My0)Kif@HxA!Io>5}fq!l-@D*!;kFNzjXZJP7d(2wkpI!_6$7_M-_gFK1 z_Pf_uPmW&;{Bvu8|9DmSfpnE9o)p~0Jm@1Iw_2+Enayrde7w4*3-O~K8!Ubw5bl%v zu!pgxY{w_kZ`r=-a~GMX?8Mb+C;BBz&3%4xyc39-fAotC@PINw!F_~B$bB3(#qnfO zlF_-)kfvqe4m)+|n|PuvBkaCm^@%g***a3*7LvSFnx@CgKHZr;PYosPP-|4PRO7y+ z$plBW*E%LjmL^s&-u9U$=y{nn>|fE-ed{We@`8<H=ZFN~ z4wvFa4a7EQ8fyug?}5bIVa6G$23j~l zpU_*NRL%2;fW#;A#4;7D>ZtPNAn{xK9pt%8t(bGC;JNfj=1pDUnSz$M${pFLQYdcu zWLg)}um`Ua_O$;gY~JRbM9t#Z?};ImR=-8A#Di3^F+t6%E)J3&+iN6}>g4oR_g>8w zldC^1ynOu`y_j;|CQ_%vO?(EA`cr^Y-l-=-CjA|@|MynX5C@Yrm&(^EQkD*wsWT(< z_jYx-8=*yDU&f_CbJjzYZg-s`8K5(u3#$>0KV}@Asc5z0o_9AXDC5vZ3Q*j=lKiigm6$knfe2UxjEua5fFdWH4nV$2KugQUB<0T1^z$eSt9oVZoaMTenC z%3T3oeZAzq(c)eD4O#;`OuWZWGi#A9)pOb?!tx^Ab%m_O?g!tiFE3f%*&MY$=-$B3 zQKgTx74!~Yb6!Xdwvfq-4tHyk86EBxxzhA&UUP)fpHI^NWuM|}cvUALMNcyW1I)ht zCFjL~4l^=PbagVC$#(Uv%8+Bz4CyXYd>w5WQl66c8Nw>E<%o~F!`k=TviXs>TaTjW zl`EVS--p~t>y6U87+&8l{F-W1)PMmp(S6;@AwGhiw!*l zXNlDSTXN7hdOIlEX!raS%@*T3L|+##B(}_@hqLJwXzbJ6eG^b?538q=;F+76n31zt zYCJ}m&SC4Ea{eQ=Pd2#OG@X|Yj)b-@nRyTKF1?$0=_=j>HMXlm0$T;feKzhwbPmr& z>$H4F7vlEdSs#Vi4)gi;izMG?1Z!IKDMaTI5<5O7H?=L3tQ;c<$MXvy*m#cqynT3P zau`ohti5@x8BM^^lV7Bsj4!dr$buliD9QyKtH*4rzDe9@`TBd{)8nM2_yZ6)L+iSJ zu{yC{r;9953)C8^blLS&Z+RB~v-ywlzmsedO#eL57x;@Q{nVy*<^4{TS*t&YtK=^^ z_zqs3E7u1hNwX!BT@KM2pHa5s37y7N(S6f5)uug=b=M8nzmvGNPB#~PCcM;(t7+tz zmxhOQ&#?@X3yq_O}*#Swu!!# z1k*&L?J{axDk9haOpR_z$L;|}hx!Wwb<|(vMVy11^#`n!1jj8L(JDxxy6C$j~|!oys)REj;N#$QNiI=a0?#>N*yaZFJ2a=!r8eHd6w z4XV@`Q1Xx;FHBVTbrEp)urNsC++I2k<*rF^A*$DZh9363!QeTenXy97rr_tjHt zMt_IvB`RCbYHn|>Np!(0`*V*#bQJQa9Q-xI=HJBT#bQ%X^Ky@Z%Hdc$uF9SiwYM^Q zxrKZw6Y}rPkb*Y!u#nv}-vbGvttlT?V*{tEIHPA~7J543E)qOcX#6ch?jKEZf|{3+ z>n%(vczR@&r#BIL1HC27b5E)-mEpPr?YF#(Jm{B|5SDs^Trnz<+iW~3KTA^(ph>PB zeaschx~-;?pp>Fz3_-#p#Y2vAAE@aEX5?Dpi@8p(lSRvSyuX|!Io zL0|7=gN59*_!lQ`%d=!U(}XEutHP8-uLe0Z#8t^8Pt!NnA&t*4LQ&D@`VhO{)*8%z zH}7xhNE83T&`d%57O4R;$u4oKKvG`Qyg_5pd#ybpXuJPVem))dGr=3@tMRW)J$haB z=wqt+f|{56HI+Ue-z?EgGW?y;J05!2FPTIyBHO@7?AWiWBYo$K#hP9S;8!AW#mgwD z`V9c`BQpq>Y|GQ*PF9aA-%7#!JAm~Fb}5m&$J8QU&G5x8av}b>_!88-+;4>R?+nre zA$>wff|{3m93;nxk0wNX6aL-hd~`kUav~4s?W(T#k)C)8(aVs@&9LjU2En#hJgL9% zjrKp8=t4zjc_nB=56de@cZ<>Ps$N8=FeL_CwMv26Lxk(pUS^v*O8q-`r2l78$sNQlG5z=HO zTbI}@Pww*g6fvBU*#2xCY#@dr9JAe0=9Q$2Io@k9Z);@cFy3q9Da;(e)CbU=*w6C= zxh_v`qFxzNW_VP^C8+5vR%lH2H(kbBK8?>D#3R4K%@zc=Fdm&moH@6yQsbuc z%tgmR){7B2x1Ol8EHf+Pe=PoCGyr6j$z4FZ?8EJP5b~o>!)j%CBfxe`TcxwV%ag^B z)-4AduSeNQ~*0-8x`% zd<(D9730YrQ*GMoX?ZNM#92{L66+I8ZEZ&?CVgkHAOBJE=>q;XaPh5nv@h?7vTZyo zeZvUli-P+syp3q_%O~j$lH?7L(3V0|JzQQG@VLth(=24#x)#vWo}qaCyr9?aXg*o> z)yijt*ck$HRzQs6J1JY20>jR@+y+PEbRlkUuY99u5$=LLkBWB0T{QRfMH&Izx$u@~ zfEjq&qB(#)`bCs*IABj*SzEDXM0a5`gtbTQiz=hizs3U1NZ&7>Yidnglc383E2Gl^ z=iElH5O2=|H3Rc5M4!i3;g#lU=q3|Gs@Cb|fN3B7L(`NmlBbX5tsiT^2pf$;rfxV< z|1*U>Ca8HihV{9lNORz$np0>LGx!@DHw-vqf|{4ztm>X5kOoWN=XiZl#^d=AsGe^_ zII;($J$>vyfl2>n3bbsWJ?U1OeS`8y`zoqaVU100+SM0GvrkXnY)3GcWa%#jCP=AMa(wnHzcTI zrV6*T3tJ6j-XBe1Yi}LKFMQa%W`|(bJAL(U>It}Ql&ZW#dtQ9fKXwzT_4(!?E?^T= zm^pySuBO`5QqtpXURmRinL0D_SiO$ac>(YiTxu|`X>*TOV>=4V3)2%Qs*MHO&=)ON z)3);t=p#(9ZhQ@e&mzlW0BB^0VW;P!?G4bRn~5S(VbHMTO&FTSb|yBz;x2Kj*;W_f zK85(=-6#ljLRt(*y8=l8;xz?`i;J#S)ijJ~XYj0Dweoidv72*hx;}sV(!4YWagx7N zQ7Gd)0j;&>7X&3_2J(bvAAJ zo$im%Xt3^qU;|In()i6myy@K|O2-VT`=9}pzAL#QOJ6#s3disoowklLqxt@lmGO*5 z`&+p4<3nL<%ow<)O|a3t!5bUv-6ykLJ>6IpujX1D)@A@nR}gfIjMZZSAs;jnweTYD z(49zJZ1L!oGuxuzCA<+u=R7sMbAc-y(J*!K{ zC#Z8XsQJWS_E)zfj?;;QTEXyx@e@KaWSz_lp@vba(#ef5%gLwJCt!qGs)&4h9t^tP zlCC3nnqKu8(Dh`K>CNa{EVU;QXqv0jCpA|Xy%IYsj3{B*4L9V5M>`WVKZvsnn4pzB zirS{`Y`X-iHA_R(fV75I8`wU;N0OGw6LM}EiD_qNZibz)H)LlR`GRutESAS(M`*fU@Nrx2%3BX(f#n4|F)@VC( ziMxs~Y_E`}7bv+AGJ_+wTRfX`d3KXa7TR-3wze^t@^{ct>=3{o!a!d>I^B3u-H?pc z@cgJgxEG)}c|x)?u8M1FeUqsMV!$hUt0h)esxM@Z-*(j#Go_9tfeQOL=Rm2YLAi!= zjnBeg<_+M$_zi)ycUpxX z(@T*RFmr{Oh76Nvp#4& zx9C4s9jHiiQIN*E8EPLEwOd3@Q1f!kiu`OsI)8cF4?35$#r?@z0DEYNRU$E6|ElY3&m{!P6*>fbW2uqLp(ok#uKJd*gZm!phbg%E*_NQa?@6APZ!L{CiR zlj@~@K;`ScBhtSo6_RkitB>#T=qyBc@G3^n;uGD8)7KZ|g1huFf5mxNdoWEv>6$7= zvm<(BxZ;x3Bj@f0yp-wappB*b5I3Pxc{gg7?24nvK%lxb!cf4R0V@lu z&lv<%dDGWzBB%5O&EaA5QkXeBY-7Q;2x~*UqnC(I;WZAN!~0{(i}-Iq>#XgwL@Dj| zc%BVNVf`lzNXe?ewy>4XFWk2oR_daQIg!rBd>rW@dWVLlze8?JQ1dFff0DfVk2ScF z>iHViSlg(?FDq7Y1w+2wRqUMerSQah|E3_aCs+Te053mzv}P<@PqEs3b92=ZY{R{1KB?JUn7>#dX109mYMi}p!mtE%9x<$<;Fp3##J!8 zd7o5V3zE1V^l?3u#I=p$QoZW8tU*uT^UYR<$Rv4Dw!6DND_OdkJGd0fJ8Oi=T3sPbs6>JGjRzn>AmixPgH z6o)nIyT%JUib1qHDl&*W*P;BwR+_6*Q&+OB#ukTVtabR~Gnf{$POA0Ku3~pTM!^r_ zn{%93-p&}O{f6iQ{6^LT%1xS41+q&o@@}+XD(*J;9G;FZo@i-Q?05+lTkJ#o#VAB! zJ{5@oDehs&u@MHKjriPX}zf3&)B=8{yW~y z)b9L$omwk{7!`#7Ka%W?_Zkz_yj&Tip_1!U!}58$N6>kY&(m~{`B~-ZE=ivLUb&aAKda2Meulcdt1@r0 z%CQ1DHy7z5?RS`GEo9WxzA4%nZTqJB*1oCv^VVv4+kC8jZkD&U`8jwAm)%6wVQsmK z%qT?aZfs+DXy9ViDV3h?byxH*6y7lsHFPZK=uhd=iu zE*okguKl{%;CxZ(%SF%NMVG9o3c0Lqush1S_M|VJ9GpU!FRdQNy#q9MY>Yza9)wOV zTFHic(Y+lX5BH~5j^Nv&>M(aya&6Y<@TQMCGHv6E9}877GVty5za!WK4E`%XF+J;{7}5}K zfI2n2e;QlnLX|YOji`udohvz#bEp(b)g_gfen3c17Sad9|aSS;SAtIc)N@dDUS zfEfaGsrO$9{dD&6EJ5Nyyv77IFW0T^dLoZR{wV}wM0b_av44_|zghz7=x{1If8hl; z`pO)^RnA$anM(cvt1@+9J5xJkn0l_sl%NegjH!elKPSCf{2Y|w6|CF{Htli@ziC8p8WL%|{0lAqySqLY3$1D9_dB7e@}`$wvL2kaFt^OscpY zFjtD!;|tyTcsIOQp|SE)9G*<67|jI17iQT;nzD^ER_6I=7M{gucfz*#^6NxjhA-BM z-j0{1zvw4or@D>;Ay+?&f9=_Plz6Uf@}Gfa0b*R&;K3qWW*4hY4 zF83_P>%+zwNe7v;Y_Mbak&fYWyG4U_puD?_g6#H`%RZ_pN~iUYWq*b@J?m`pS5Giy zgJ1*J=vZ5-WbXE9^~-4={Um*k-?2-}rZboYZT%9QeDnlJ%@6fbK7=nzzX$gf@*;1X zpo+nqqY~P4p~e^#Yy=tb77)@iKw4SiaF4oZlnX=)d0;lVA=$&;l5={%LYL9@o9u`P zqjx$+E6n`HPE;A)#9gs<9(w-ZI^jnf0!sGnytc++6jA4JQ4HB(n9h|N;O97lo1k2b z{{T)RZ($#N4cEts9Kr!ft;Tx1^3}wHA zNGb?eO`~z7Pp+ewmml5;?@}S+RjKCz6i2%S880kJ6U>}P3HItt^M0|qwgzK>rIodY zef_?!bpMpYW^jyjVfQ8Pl;8w#1~a=qk(ai;hx-R|zePp&cO}QxpOE%~o0SLEa}hKm zHWAWFW-~5Y?96qdje)`+ORj!jEv$YiMNYx^abHcb`io6DDfAtD-Alyg$1T|#orb@D zsI>z3H8s2WIbj{|-$}1hqlom?*%R149e;6tY7F}gUPJP4fi?#FD|mCA`AfxLzCB_U*?*Vb}%s@zk^$?9khZa zMvFyw2vd&4>@^H6DpSz$G`;nXrpAe91&y9Whi96{LYb#}`Xs6P%<#mP7Y3_m8K6zC zr($ciu#==I7m0yHU&jv-Vlfx#nRd07j$g{sN&TAgc7VQnqG!nW zKfXp zD;pL~P$sYqH=0K@VNIpUskZ1cp=$^zRi8?uF1HYK5!+0ak`I(~Q`^!~4A|lfzD-)< zldME?^?nsazK*Ug60|;iH|YDj(1^8?7|n;3#y)V8_EyuNA8)GeNl^3Bjd*h#`(}`) z3yDd6WlT`>a=k)YoI#o)q|JpSsCmiufu!+BgNVEg(AX~%YEYrJP$)so%Q4TI>(0@{ zBJBev>wfg$J1WC9rfB~R#dSn+OHmZGp@-`ivj=35))mrLLK4)x+<=e{%pk2Nq^*S{ zsCh{#Xl~=64AM*?EfA8R=H;df>EH~~EFoc;_^56nG6?rs_zjtEd9(U+E z2^QAWjC13Kk24oEZLMg3b$ZkT-wwKh<8Xhsy?#s8rC{~To1spIK^xVRs#uJ6WTf+r zfIdSNEn$R_HMvSM!-1WI^#+I)uVnJ;h~#_3n`P8X%i7s$gB}FSG*a2(?p(P{%q30m z5K{hlZbb4&Q&_LEBIcWsU3kB|6r-$E=`<~&zRr~k!0q-j{)d_}zTYIx@@p2lkde0` zhO$5W$wHXM@sOJ%ySDN&3bcYa4i?-@b|O1j)Av~xj}qz7DcEG(7Ka(X@E-0{h|uwN z@C0Yy9D^y>%=hV1*9zi6n;R*7Sgz{e2BjyN)L#5*PUmxs~LICa`F zxqxmGR8ZMWzmtPC#M8u6Jn6US>YFkDt<)ov1I*!Jhomrb0Ml5c≷IF>|OB^!m|k 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�U$(s8uK5CNLY|i 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 `zWs> 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 z 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 diff --git a/.nuget/NuGet.targets b/.nuget/NuGet.targets deleted file mode 100644 index 83fe906016..0000000000 --- a/.nuget/NuGet.targets +++ /dev/null @@ -1,136 +0,0 @@ - - - - $(MSBuildProjectDirectory)\..\ - - - false - - - false - - - true - - - false - - - - - - - - - - - $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) - $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) - - - - - $(SolutionDir).nuget - packages.config - - - - - $(NuGetToolsPath)\NuGet.exe - @(PackageSource) - - "$(NuGetExePath)" - mono --runtime=v4.0.30319 $(NuGetExePath) - - $(TargetDir.Trim('\\')) - - -RequireConsent - -NonInteractive - - "$(SolutionDir) " - "$(SolutionDir)" - - - $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) - $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols - - - - RestorePackages; - $(BuildDependsOn); - - - - - $(BuildDependsOn); - BuildPackage; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj b/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj index 6f6765299c..2b7280a2b5 100644 --- a/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj +++ b/Plugins/Wox.Plugin.CMD/Wox.Plugin.CMD.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true @@ -104,13 +103,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj b/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj index 63d5cf4402..907c4ff929 100644 --- a/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj +++ b/Plugins/Wox.Plugin.Caculator/Wox.Plugin.Caculator.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true @@ -87,13 +86,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - diff --git a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj index e4c42144e0..1b8afe4139 100644 --- a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj +++ b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\Wox\ - true true @@ -131,13 +130,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.sln b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.sln deleted file mode 100644 index f4fdc6d15a..0000000000 --- a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.sln +++ /dev/null @@ -1,29 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Everything", "Wox.Plugin.Everything.csproj", "{230AE83F-E92E-4E69-8355-426B305DA9C0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{9BEA8C30-8CC3-48FE-87FD-8D7E65898C1A}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {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 - EndGlobalSection -EndGlobal diff --git a/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj b/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj index ab9bcb3338..748cd7c6d8 100644 --- a/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj +++ b/Plugins/Wox.Plugin.Folder/Wox.Plugin.Folder.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true @@ -105,13 +104,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj index 31e19d2f77..8508c4e317 100644 --- a/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj +++ b/Plugins/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true @@ -92,13 +91,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj b/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj index 70e612ac2a..0f6c4c5660 100644 --- a/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj +++ b/Plugins/Wox.Plugin.Program/Wox.Plugin.Program.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true @@ -139,13 +138,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Plugins/Wox.Plugin.QueryHistory/Wox.Plugin.QueryHistory.csproj b/Plugins/Wox.Plugin.QueryHistory/Wox.Plugin.QueryHistory.csproj index 2a1c20e7e1..34fc2868db 100644 --- a/Plugins/Wox.Plugin.QueryHistory/Wox.Plugin.QueryHistory.csproj +++ b/Plugins/Wox.Plugin.QueryHistory/Wox.Plugin.QueryHistory.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true true @@ -75,13 +74,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj b/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj index 99cf44b067..2bfb924a5c 100644 --- a/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj +++ b/Plugins/Wox.Plugin.Sys/Wox.Plugin.Sys.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true @@ -123,13 +122,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj index acf918a8a8..905e83a141 100644 --- a/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj +++ b/Plugins/Wox.Plugin.WebSearch/Wox.Plugin.WebSearch.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\..\ - true @@ -129,13 +128,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Wox.Core/Wox.Core.csproj b/Wox.Core/Wox.Core.csproj index ee07a987e9..f348e9cdee 100644 --- a/Wox.Core/Wox.Core.csproj +++ b/Wox.Core/Wox.Core.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\ - true @@ -117,7 +116,6 @@ - - \ No newline at end of file + + diff --git a/Wox.CrashReporter/Wox.CrashReporter.csproj b/Wox.CrashReporter/Wox.CrashReporter.csproj index bb1afc0654..0194c1d262 100644 --- a/Wox.CrashReporter/Wox.CrashReporter.csproj +++ b/Wox.CrashReporter/Wox.CrashReporter.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\ - true @@ -89,13 +88,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Wox.Infrastructure/Wox.Infrastructure.csproj b/Wox.Infrastructure/Wox.Infrastructure.csproj index 3c10409c02..f3be4781fe 100644 --- a/Wox.Infrastructure/Wox.Infrastructure.csproj +++ b/Wox.Infrastructure/Wox.Infrastructure.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\ - true @@ -84,7 +83,6 @@ - - \ No newline at end of file + + diff --git a/Wox.Test/Wox.Test.csproj b/Wox.Test/Wox.Test.csproj index 06d8021304..8d54d3612e 100644 --- a/Wox.Test/Wox.Test.csproj +++ b/Wox.Test/Wox.Test.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\ - true @@ -71,7 +70,6 @@ - - \ No newline at end of file + + diff --git a/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj b/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj index 4dbc7473b8..8801cc14a6 100644 --- a/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj +++ b/Wox.UpdateFeedGenerator/Wox.UpdateFeedGenerator.csproj @@ -12,7 +12,6 @@ v3.5 512 ..\ - true AnyCPU @@ -68,13 +67,6 @@ - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。启用“NuGet 程序包还原”可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - \ No newline at end of file + + diff --git a/Wox/Wox.csproj b/Wox/Wox.csproj index 9e31d96248..bcf2772d78 100644 --- a/Wox/Wox.csproj +++ b/Wox/Wox.csproj @@ -14,7 +14,6 @@ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 ..\ - true 发布\ true @@ -346,7 +345,6 @@ - xcopy /Y $(ProjectDir)Themes\* $(TargetDir)Themes\ xcopy /Y /E $(ProjectDir)Images\* $(TargetDir)Images\ @@ -376,4 +374,5 @@ cd "$(TargetDir)Plugins" & del /s /q WindowsInput.dll --> - \ No newline at end of file + + From a67ced29a346e9fd200cfdf17b0da71ef322d889 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 19:32:41 +0000 Subject: [PATCH 31/75] Remove sensitive information --- Wox.Core/Properties/AssemblyInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Wox.Core/Properties/AssemblyInfo.cs b/Wox.Core/Properties/AssemblyInfo.cs index dd5baa0e63..0ca99a503a 100644 --- a/Wox.Core/Properties/AssemblyInfo.cs +++ b/Wox.Core/Properties/AssemblyInfo.cs @@ -8,9 +8,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle("Wox.Core")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Oracle Corporation")] +[assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Wox.Core")] -[assembly: AssemblyCopyright("Copyright © Oracle Corporation 2014")] +[assembly: AssemblyCopyright("The MIT License (MIT)")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] From 43686026842147d74dffb4ad87410c04c74ef6e7 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 20:32:28 +0000 Subject: [PATCH 32/75] Use consistent name convention --- Wox/MainWindow.xaml | 2 +- Wox/MainWindow.xaml.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Wox/MainWindow.xaml b/Wox/MainWindow.xaml index bfc5b9871f..4b5a315fed 100644 --- a/Wox/MainWindow.xaml +++ b/Wox/MainWindow.xaml @@ -20,7 +20,7 @@ + x:Name="tbQuery" PreviewKeyDown="TbQuery_OnPreviewKeyDown" TextChanged="TbQuery_OnTextChanged" /> diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index f87277bbbe..c3b9cd0301 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -63,7 +63,7 @@ namespace Wox tbQuery.CaretIndex = tbQuery.Text.Length; if (requery) { - TextBoxBase_OnTextChanged(null, null); + TbQuery_OnTextChanged(null, null); } })); } @@ -439,7 +439,7 @@ namespace Wox } } - private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e) + private void TbQuery_OnTextChanged(object sender, TextChangedEventArgs e) { if (ignoreTextChange) { ignoreTextChange = false; return; } From f37fd5c5e35ad3005b1932f29d81a80ab097980f Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 21:17:10 +0000 Subject: [PATCH 33/75] Move NLog.xsd, let it handled by nuget --- Wox.Infrastructure/{Logger => }/NLog.xsd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Wox.Infrastructure/{Logger => }/NLog.xsd (100%) diff --git a/Wox.Infrastructure/Logger/NLog.xsd b/Wox.Infrastructure/NLog.xsd similarity index 100% rename from Wox.Infrastructure/Logger/NLog.xsd rename to Wox.Infrastructure/NLog.xsd From cfeb637685121152fca2a392d633b2e04d0bbc35 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 21:19:32 +0000 Subject: [PATCH 34/75] Use Nlog.Schema from Nuget --- Wox.Infrastructure/NLog.xsd | 478 ++++++------------- Wox.Infrastructure/Wox.Infrastructure.csproj | 10 +- Wox.Infrastructure/packages.config | 3 +- 3 files changed, 157 insertions(+), 334 deletions(-) diff --git a/Wox.Infrastructure/NLog.xsd b/Wox.Infrastructure/NLog.xsd index edf2b7087a..f942370cac 100644 --- a/Wox.Infrastructure/NLog.xsd +++ b/Wox.Infrastructure/NLog.xsd @@ -126,6 +126,11 @@ Ignore further rules if this one matches. + + + Enable or disable logging rule. Disabled rules are ignored. + + @@ -147,6 +152,15 @@ + + + + + + + + + @@ -226,58 +240,6 @@ - - - - - - - - - - - - Name of the target. - - - - - Maximum number of log events that the buffer can keep. - - - - - Number of log events to be buffered. - - - - - Indicates whether buffer should grow as needed. - - - - - - - - - - - - - - - Name of the target. - - - - - Layout used to format log messages. - - - - - @@ -540,6 +502,7 @@ + @@ -567,6 +530,11 @@ Indicates whether to use default row highlighting rules. + + + The encoding for writing messages to the . + + Indicates whether the error stream (stderr) should be used instead of the output stream (stdout). @@ -667,6 +635,7 @@ + @@ -693,6 +662,11 @@ Indicates whether to send the log messages to the standard error instead of the standard output. + + + The encoding for writing messages to the . + + @@ -709,7 +683,6 @@ - @@ -762,11 +735,6 @@ Indicates whether to keep the database connection open between the log events. - - - Indicates whether to use database transactions. Some data providers require this. - - Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used. @@ -855,7 +823,7 @@ - + @@ -917,7 +885,8 @@ - + + @@ -949,11 +918,16 @@ Name of the machine on which Event Log service is running. - + Value to be used as the event Source. + + + Optional entrytype. When not set, or when not convertable to then determined by + + @@ -986,30 +960,32 @@ - + + - + - + + - - + + @@ -1036,11 +1012,16 @@ File encoding. - + Line ending mode. + + + Maximum number of archive files that should be kept. + + Way file archives are numbered. @@ -1058,17 +1039,17 @@ - Size in bytes above which log files will be automatically archived. + Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: - + - Maximum number of archive files that should be kept. + Indicates whether to compress archive files into the zip archive format. - Gets ors set a value indicating whether a managed file stream is forced, instead of used the native implementation. + Gets or set a value indicating whether a managed file stream is forced, instead of used the native implementation. @@ -1081,11 +1062,6 @@ Indicates whether to replace file contents on each write instead of appending log message at the end. - - - Indicates whether to delete old log file on startup. - - Name of the file to write to. @@ -1103,7 +1079,12 @@ - Indicates whether to create directories if they don't exist. + Indicates whether to create directories if they do not exist. + + + + + Indicates whether to delete old log file on startup. @@ -1121,6 +1102,11 @@ Indicates whether concurrent writes to the log file by multiple processes on different network hosts. + + + Maximum number of log filenames that should be stored as existing. + + Indicates whether to keep log file open instead of opening and closing it on each logging event. @@ -1141,9 +1127,9 @@ Delay in milliseconds to wait before attempting to write to the file again. - + - Log file buffer size in bytes. + Indicates whether to automatically flush the file buffers after each log message. @@ -1151,23 +1137,14 @@ Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger). - + - Indicates whether to automatically flush the file buffers after each log message. + Log file buffer size in bytes. - - - - - - - - - @@ -1226,50 +1203,6 @@ - - - - - - - - - - - - - - Name of the target. - - - - - Layout used to format log messages. - - - - - Indicates whether log text should be appended to the text of the control instead of overwriting it. - - - - - Name of control to which NLog will log write log text. - - - - - Name of the Form on which the control is located. - - - - - Whether new log entry are added to the start or the end of the control - - - - - @@ -1356,6 +1289,7 @@ + @@ -1376,6 +1310,11 @@ Name of the endpoint configuration in WCF configuration file. + + + Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply) + + Client ID. @@ -1402,7 +1341,7 @@ - Layout that should be use to calcuate the value for the parameter. + Layout that should be use to calculate the value for the parameter. @@ -1427,9 +1366,9 @@ - - + + @@ -1443,6 +1382,8 @@ + + @@ -1479,9 +1420,9 @@ Indicates whether to add new lines between log entries. - + - BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). @@ -1489,9 +1430,9 @@ Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). - + - CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). @@ -1559,6 +1500,16 @@ Indicates whether the default Settings from System.Net.MailSettings should be used. + + + Folder where applications save mail messages to be processed by the local SMTP server. + + + + + Specifies how outgoing email messages will be handled. + + @@ -1569,6 +1520,13 @@ + + + + + + + @@ -1589,32 +1547,6 @@ - - - - - - - - - - - Name of the target. - - - - - Layout used to format log messages. - - - - - Message box title. - - - - - @@ -1939,6 +1871,7 @@ + @@ -1971,6 +1904,11 @@ Performance counter type. + + + The value by which to increment the counter. + + Performance counter instance name. @@ -2108,165 +2046,6 @@ - - - - - - - - - - - - - - - - - - - - - Name of the target. - - - - - Layout used to format log messages. - - - - - Indicates whether scroll bar will be moved automatically to show most recent log entries. - - - - - Name of RichTextBox to which Nlog will write. - - - - - Name of the Form on which the control is located. If there is no open form of a specified name than NLog will create a new one. - - - - - Initial height of the form with rich text box. - - - - - Maximum number of lines the rich text box will store (or 0 to disable this feature). - - - - - Indicates whether the created form will be initially minimized. - - - - - Indicates whether the created window will be a tool window. - - - - - Initial width of the form with rich text box. - - - - - Indicates whether to use default coloring rules. - - - - - - - - - - - - - - - - - - - - - - - - Condition that must be met in order to set the specified font color. - - - - - Background color. - - - - - Font color. - - - - - Font style of matched text. - - - - - - - - - - - - - - - - Indicates whether to ignore case when comparing texts. - - - - - Regular expression to be matched. You must specify either text or regex. - - - - - Text to be matched. You must specify either text or regex. - - - - - Indicates whether to match whole words only. - - - - - Background color. Names are identical with KnownColor enum extended with Empty value which means that background color won't be changed. - - - - - Font color. Names are identical with KnownColor enum extended with Empty value which means that font color won't be changed. - - - - - Font style of matched text. Possible values are the same as in FontStyle enum in System.Drawing. - - - @@ -2320,6 +2099,7 @@ + @@ -2332,6 +2112,11 @@ Name of the target. + + + Should we include the BOM (Byte-order-mark) for UTF? Influences the property. This will only work for UTF-8. + + Encoding. @@ -2339,12 +2124,12 @@ - Web service method name. + Web service method name. Only used with Soap. - Web service namespace. + Web service namespace. Only used with Soap. @@ -2459,6 +2244,43 @@ + + + + + + + + + + Option to suppress the extra spaces in the output json + + + + + + + + + + + + + + Determines wether or not this attribute will be Json encoded. + + + + + Layout that will be rendered as the attribute's value. + + + + + Name of the attribute. + + + diff --git a/Wox.Infrastructure/Wox.Infrastructure.csproj b/Wox.Infrastructure/Wox.Infrastructure.csproj index f3be4781fe..a5ef083e79 100644 --- a/Wox.Infrastructure/Wox.Infrastructure.csproj +++ b/Wox.Infrastructure/Wox.Infrastructure.csproj @@ -40,8 +40,9 @@ False ..\packages\Newtonsoft.Json.6.0.8\lib\net35\Newtonsoft.Json.dll - - ..\packages\NLog.3.2.0.0\lib\net35\NLog.dll + + ..\packages\NLog.4.2.0\lib\net35\NLog.dll + True @@ -77,7 +78,7 @@ Always - + Designer @@ -90,5 +91,4 @@ --> - - + \ No newline at end of file diff --git a/Wox.Infrastructure/packages.config b/Wox.Infrastructure/packages.config index 59d02e4dd2..0c8252da99 100644 --- a/Wox.Infrastructure/packages.config +++ b/Wox.Infrastructure/packages.config @@ -1,5 +1,6 @@  - + + \ No newline at end of file From f3038e4fefd893126847d5ccfdbd1312bb943a57 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sat, 31 Oct 2015 22:40:11 +0000 Subject: [PATCH 35/75] Fix System.ArgumentException Fix System.ArgumentException("Illegal characters in path") when parsing path string --- .../ProgramSources/AppPathsProgramSource.cs | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs b/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs index 5b50d72df1..16e0961b3d 100644 --- a/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs +++ b/Plugins/Wox.Plugin.Program/ProgramSources/AppPathsProgramSource.cs @@ -1,21 +1,21 @@ using System; using System.Collections.Generic; +using Wox.Infrastructure.Logger; namespace Wox.Plugin.Program.ProgramSources { [Serializable] - [global::System.ComponentModel.Browsable(false)] - public class AppPathsProgramSource: AbstractProgramSource + [System.ComponentModel.Browsable(false)] + public class AppPathsProgramSource : AbstractProgramSource { public AppPathsProgramSource() { - this.BonusPoints = -10; + BonusPoints = -10; } - public AppPathsProgramSource(ProgramSource source) - : this() + public AppPathsProgramSource(ProgramSource source) : this() { - this.BonusPoints = source.BonusPoints; + BonusPoints = source.BonusPoints; } public override List LoadPrograms() @@ -33,17 +33,31 @@ namespace Wox.Plugin.Program.ProgramSources if (root == null) return; foreach (var item in root.GetSubKeyNames()) { - using (var key = root.OpenSubKey(item)) + try { - object path = key.GetValue(""); - if (path is string && global::System.IO.File.Exists((string)path)) + using (var key = root.OpenSubKey(item)) { - var entry = CreateEntry((string)path); + string path = key.GetValue("") as string; + if (path == null) continue; + + // fix path like this ""\"C:\\folder\\executable.exe\""" + const int begin = 0; + int end = path.Length - 1; + const char quotationMark = '"'; + if (path[begin] == quotationMark && path[end] == quotationMark) + { + path = path.Substring(begin + 1, path.Length - 2); + } + + if (!System.IO.File.Exists(path)) continue; + var entry = CreateEntry(path); entry.ExecuteName = item; list.Add(entry); } - - key.Close(); + } + catch (Exception e) + { + Log.Error(e.StackTrace); } } } From bb3b982dea8f57bcc1e503ca691b28860bb0ff84 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sun, 1 Nov 2015 17:25:44 +0000 Subject: [PATCH 36/75] Refactoring Query Dispatch half lines of code :) --- Wox.Core/Plugin/PluginManager.cs | 74 ++++++++++++++++--- .../QueryDispatcher/BaseQueryDispatcher.cs | 44 ----------- .../ExclusiveQueryDispatcher.cs | 24 ------ .../QueryDispatcher/GenericQueryDispatcher.cs | 14 ---- .../QueryDispatcher/IQueryDispatcher.cs | 7 -- .../Plugin/QueryDispatcher/QueryDispatcher.cs | 23 ------ Wox.Core/Wox.Core.csproj | 8 +- Wox.Plugin/PluginPair.cs | 4 +- Wox/MainWindow.xaml.cs | 2 +- 9 files changed, 66 insertions(+), 134 deletions(-) delete mode 100644 Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs delete mode 100644 Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs delete mode 100644 Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs delete mode 100644 Wox.Core/Plugin/QueryDispatcher/IQueryDispatcher.cs delete mode 100644 Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 9fcd7a36b1..7aaa7cb724 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; @@ -90,7 +91,7 @@ namespace Wox.Core.Plugin { Stopwatch sw = new Stopwatch(); sw.Start(); - pair.Plugin.Init(new PluginInitContext() + pair.Plugin.Init(new PluginInitContext { CurrentPluginMetadata = pair.Metadata, Proxy = HttpProxy.Instance, @@ -114,7 +115,7 @@ namespace Wox.Core.Plugin PluginInstaller.Install(path); } - public static void Query(Query query) + public static void QueryForAllPlugins(Query query) { query.ActionKeyword = string.Empty; query.Search = query.RawQuery; @@ -125,9 +126,38 @@ namespace Wox.Core.Plugin } if (!string.IsNullOrEmpty(query.ActionKeyword)) { - query.Search = string.Join(Wox.Plugin.Query.Seperater, query.Terms.Skip(1).ToArray()); + query.Search = string.Join(Query.Seperater, query.Terms.Skip(1).ToArray()); + } + QueryDispatch(query); + } + + private static void QueryDispatch(Query query) + { + var pluginPairs = IsExclusivePluginQuery(query) ? GetExclusivePlugins(query) : GetGenericPlugins(); + foreach (var plugin in pluginPairs) + { + var customizedPluginConfig = UserSettingStorage.Instance. + CustomizedPluginConfigs.FirstOrDefault(o => o.ID == plugin.Metadata.ID); + if (customizedPluginConfig != null && customizedPluginConfig.Disabled) + { + return; + } + if (query.IsIntantQuery && IsInstantSearchPlugin(plugin.Metadata)) + { + Debug.WriteLine(string.Format("Plugin {0} is executing instant search.", plugin.Metadata.Name)); + using (new Timeit(" => instant search took: ")) + { + QueryForPlugin(plugin, query); + } + } + else + { + ThreadPool.QueueUserWorkItem(state => + { + QueryForPlugin(plugin, query); + }); + } } - QueryDispatcher.QueryDispatcher.Dispatch(query); } public static List AllPlugins @@ -170,14 +200,14 @@ namespace Wox.Core.Plugin return LoadInstantSearches().Any(o => o.Value.IsInstantQuery(query)); } - public static bool IsInstantSearchPlugin(PluginMetadata pluginMetadata) + private static bool IsInstantSearchPlugin(PluginMetadata pluginMetadata) { //todo:to improve performance, any instant search plugin that takes long than 200ms will not consider a instant plugin anymore return pluginMetadata.Language.ToUpper() == AllowedLanguage.CSharp && LoadInstantSearches().Any(o => o.Key.Metadata.ID == pluginMetadata.ID); } - internal static void ExecutePluginQuery(PluginPair pair, Query query) + private static void QueryForPlugin(PluginPair pair, Query query) { try { @@ -223,23 +253,23 @@ namespace Wox.Core.Plugin /// public static PluginPair GetPlugin(string id) { - return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id); + return plugins.FirstOrDefault(o => o.Metadata.ID == id); } - internal static List> LoadExclusiveSearchPlugins() + private static List> LoadExclusiveSearchPlugins() { if (exclusiveSearchPlugins != null) return exclusiveSearchPlugins; exclusiveSearchPlugins = AssemblyHelper.LoadPluginInterfaces(); return exclusiveSearchPlugins; } - internal static PluginPair GetExclusivePlugin(Query query) + private static PluginPair GetExclusivePlugin(Query query) { KeyValuePair plugin = LoadExclusiveSearchPlugins().FirstOrDefault(o => o.Value.IsExclusiveQuery((query))); return plugin.Key; } - internal static PluginPair GetActionKeywordPlugin(Query query) + private static PluginPair GetActionKeywordPlugin(Query query) { //if a query doesn't contain a vaild action keyword, it should not be a action keword plugin query if (string.IsNullOrEmpty(query.ActionKeyword)) return null; @@ -260,7 +290,26 @@ namespace Wox.Core.Plugin return null; } - internal static bool IsExclusivePluginQuery(Query query) + private static List GetExclusivePlugins(Query query) + { + List pluginPairs = new List(); + var exclusivePluginPair = GetExclusivePlugin(query) ?? + GetActionKeywordPlugin(query); + if (exclusivePluginPair != null) + { + pluginPairs.Add(exclusivePluginPair); + } + + return pluginPairs; + } + + private static List GetGenericPlugins() + { + return plugins.Where(o => IsGenericPlugin(o.Metadata)).ToList(); + } + + + private static bool IsExclusivePluginQuery(Query query) { return GetExclusivePlugin(query) != null || GetActionKeywordPlugin(query) != null; } @@ -293,5 +342,6 @@ namespace Wox.Core.Plugin return contextContextMenus; } + } } diff --git a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs deleted file mode 100644 index aeb886536a..0000000000 --- a/Wox.Core/Plugin/QueryDispatcher/BaseQueryDispatcher.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Threading; -using Wox.Core.UserSettings; -using Wox.Infrastructure; -using Wox.Plugin; - -namespace Wox.Core.Plugin.QueryDispatcher -{ - public abstract class BaseQueryDispatcher : IQueryDispatcher - { - protected abstract List GetPlugins(Query query); - - 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)) - { - Debug.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); - }); - } - } - } - } -} diff --git a/Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs deleted file mode 100644 index f31ae2ac92..0000000000 --- a/Wox.Core/Plugin/QueryDispatcher/ExclusiveQueryDispatcher.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using Wox.Plugin; - -namespace Wox.Core.Plugin.QueryDispatcher -{ - public class ExclusiveQueryDispatcher : BaseQueryDispatcher - { - protected override List GetPlugins(Query query) - { - List pluginPairs = new List(); - var exclusivePluginPair = PluginManager.GetExclusivePlugin(query) ?? - PluginManager.GetActionKeywordPlugin(query); - if (exclusivePluginPair != null) - { - pluginPairs.Add(exclusivePluginPair); - } - - return pluginPairs; - } - - - - } -} diff --git a/Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs deleted file mode 100644 index 9787930982..0000000000 --- a/Wox.Core/Plugin/QueryDispatcher/GenericQueryDispatcher.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Wox.Plugin; - -namespace Wox.Core.Plugin.QueryDispatcher -{ - public class GenericQueryDispatcher : BaseQueryDispatcher - { - protected override List GetPlugins(Query query) - { - return PluginManager.AllPlugins.Where(o => PluginManager.IsGenericPlugin(o.Metadata)).ToList(); - } - } -} \ No newline at end of file diff --git a/Wox.Core/Plugin/QueryDispatcher/IQueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/IQueryDispatcher.cs deleted file mode 100644 index c5312a0332..0000000000 --- a/Wox.Core/Plugin/QueryDispatcher/IQueryDispatcher.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Wox.Core.Plugin.QueryDispatcher -{ - internal interface IQueryDispatcher - { - void Dispatch(Wox.Plugin.Query query); - } -} diff --git a/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs b/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs deleted file mode 100644 index 5d2cc0e413..0000000000 --- a/Wox.Core/Plugin/QueryDispatcher/QueryDispatcher.cs +++ /dev/null @@ -1,23 +0,0 @@ - -using Wox.Plugin; - -namespace Wox.Core.Plugin.QueryDispatcher -{ - internal static class QueryDispatcher - { - private static readonly IQueryDispatcher exclusivePluginDispatcher = new ExclusiveQueryDispatcher(); - private static readonly IQueryDispatcher genericQueryDispatcher = new GenericQueryDispatcher(); - - public static void Dispatch(Query query) - { - if (PluginManager.IsExclusivePluginQuery(query)) - { - exclusivePluginDispatcher.Dispatch(query); - } - else - { - genericQueryDispatcher.Dispatch(query); - } - } - } -} diff --git a/Wox.Core/Wox.Core.csproj b/Wox.Core/Wox.Core.csproj index f348e9cdee..2c2b888578 100644 --- a/Wox.Core/Wox.Core.csproj +++ b/Wox.Core/Wox.Core.csproj @@ -65,7 +65,6 @@ - @@ -80,10 +79,6 @@ - - - - @@ -123,5 +118,4 @@ --> - - + \ No newline at end of file diff --git a/Wox.Plugin/PluginPair.cs b/Wox.Plugin/PluginPair.cs index 1b5da1b174..85d228c9c7 100644 --- a/Wox.Plugin/PluginPair.cs +++ b/Wox.Plugin/PluginPair.cs @@ -2,8 +2,8 @@ { public class PluginPair { - public IPlugin Plugin { get; set; } - public PluginMetadata Metadata { get; set; } + public IPlugin Plugin { get; internal set; } + public PluginMetadata Metadata { get; internal set; } internal long InitTime { get; set; } diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index c3b9cd0301..11d74834bb 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -501,7 +501,7 @@ namespace Wox private void Query(Query q) { - PluginManager.Query(q); + PluginManager.QueryForAllPlugins(q); StopProgress(); } From 8c7bac7dbb8a57cd8fe6a4c7b859c84f8ec96eab Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sun, 1 Nov 2015 19:47:20 +0000 Subject: [PATCH 37/75] Refactoring GetExclusivePlugin and GetActionKeywordPlugin System plugin = plugin with action keyword * Non system plugin = exclusive plugin + action keyword plugin --- Plugins/Wox.Plugin.CMD/CMD.cs | 18 +++-- .../PluginIndicator.cs | 2 +- Wox.Core/Plugin/PluginManager.cs | 78 +++++-------------- Wox.Plugin/Query.cs | 20 ++--- Wox/ActionKeyword.xaml.cs | 2 +- 5 files changed, 41 insertions(+), 79 deletions(-) diff --git a/Plugins/Wox.Plugin.CMD/CMD.cs b/Plugins/Wox.Plugin.CMD/CMD.cs index 6c0f6aeb86..b34f92f9cf 100644 --- a/Plugins/Wox.Plugin.CMD/CMD.cs +++ b/Plugins/Wox.Plugin.CMD/CMD.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using WindowsInput; using WindowsInput.Native; using Wox.Infrastructure.Hotkey; +using Wox.Infrastructure.Logger; using Wox.Plugin.Features; using Control = System.Windows.Controls.Control; @@ -22,14 +23,13 @@ namespace Wox.Plugin.CMD { List results = new List(); List pushedResults = new List(); - if (query.Search == ">") + string cmd = query.Search; + if (string.IsNullOrEmpty(cmd)) { return GetAllHistoryCmds(); } - - if (query.Search.StartsWith(">") && query.Search.Length > 1) + else { - string cmd = query.Search.Substring(1); var queryCmd = GetCurrentCmd(cmd); context.API.PushResults(query, context.CurrentPluginMetadata, new List() { queryCmd }); pushedResults.Add(queryCmd); @@ -49,7 +49,7 @@ namespace Wox.Plugin.CMD basedir = excmd; dir = cmd; } - else if (Directory.Exists(Path.GetDirectoryName(excmd))) + else if (Directory.Exists(Path.GetDirectoryName(excmd) ?? string.Empty)) { basedir = Path.GetDirectoryName(excmd); var dirn = Path.GetDirectoryName(cmd); @@ -72,10 +72,12 @@ namespace Wox.Plugin.CMD })); } } - catch (Exception) { } - + catch (Exception e) + { + Log.Error(e); + } + return results; } - return results; } private List GetHistoryCmds(string cmd, Result result) diff --git a/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs b/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs index fe0a2a8f40..e247436eb8 100644 --- a/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs +++ b/Plugins/Wox.Plugin.PluginIndicator/PluginIndicator.cs @@ -17,7 +17,7 @@ namespace Wox.Plugin.PluginIndicator List results = new List(); if (allPlugins.Count == 0) { - allPlugins = context.API.GetAllPlugins().Where(o => !PluginManager.IsGenericPlugin(o.Metadata)).ToList(); + allPlugins = context.API.GetAllPlugins().Where(o => !PluginManager.IsSystemPlugin(o.Metadata)).ToList(); } foreach (PluginMetadata metadata in allPlugins.Select(o => o.Metadata)) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 7aaa7cb724..f5b491f433 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -21,11 +21,9 @@ namespace Wox.Core.Plugin ///
public static class PluginManager { - public const string ActionKeywordWildcardSign = "*"; - private static List pluginMetadatas; private static List> instantSearches; - private static List> exclusiveSearchPlugins; + private static IEnumerable exclusiveSearchPlugins; private static List> contextMenuPlugins; public static IPublicAPI API { get; private set; } @@ -133,7 +131,8 @@ namespace Wox.Core.Plugin private static void QueryDispatch(Query query) { - var pluginPairs = IsExclusivePluginQuery(query) ? GetExclusivePlugins(query) : GetGenericPlugins(); + var nonSystemPlugin = GetNonSystemPlugin(query); + var pluginPairs = nonSystemPlugin != null ? new List { nonSystemPlugin } : GetSystemPlugins(); foreach (var plugin in pluginPairs) { var customizedPluginConfig = UserSettingStorage.Instance. @@ -175,24 +174,16 @@ namespace Wox.Core.Plugin /// private static bool IsVailldActionKeyword(string actionKeyword) { + if (string.IsNullOrEmpty(actionKeyword) || actionKeyword == Query.ActionKeywordWildcardSign) 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; + if (pair == null) return false; + var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pair.Metadata.ID); + return customizedPluginConfig == null || !customizedPluginConfig.Disabled; } - public static bool IsGenericPlugin(PluginMetadata metadata) + public static bool IsSystemPlugin(PluginMetadata metadata) { - return metadata.ActionKeyword == ActionKeywordWildcardSign; + return metadata.ActionKeyword == Query.ActionKeywordWildcardSign; } public static bool IsInstantQuery(string query) @@ -256,62 +247,29 @@ namespace Wox.Core.Plugin return plugins.FirstOrDefault(o => o.Metadata.ID == id); } - private static List> LoadExclusiveSearchPlugins() - { - if (exclusiveSearchPlugins != null) return exclusiveSearchPlugins; - exclusiveSearchPlugins = AssemblyHelper.LoadPluginInterfaces(); - return exclusiveSearchPlugins; - } - private static PluginPair GetExclusivePlugin(Query query) { - KeyValuePair plugin = LoadExclusiveSearchPlugins().FirstOrDefault(o => o.Value.IsExclusiveQuery((query))); - return plugin.Key; + exclusiveSearchPlugins = exclusiveSearchPlugins ?? + plugins.Where(p => p.Plugin.GetType().GetInterfaces().Contains(typeof(IExclusiveQuery))); + var plugin = exclusiveSearchPlugins.FirstOrDefault(p => ((IExclusiveQuery)p.Plugin).IsExclusiveQuery(query)); + return plugin; } private static PluginPair GetActionKeywordPlugin(Query query) { //if a query doesn't contain a vaild action keyword, it should not be a action keword plugin query if (string.IsNullOrEmpty(query.ActionKeyword)) return null; - - PluginPair actionKeywordPluginPair = AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionKeyword); - if (actionKeywordPluginPair != null) - { - var customizedPluginConfig = UserSettingStorage.Instance. - CustomizedPluginConfigs.FirstOrDefault(o => o.ID == actionKeywordPluginPair.Metadata.ID); - if (customizedPluginConfig != null && customizedPluginConfig.Disabled) - { - return null; - } - - return actionKeywordPluginPair; - } - - return null; + return plugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionKeyword); } - private static List GetExclusivePlugins(Query query) + private static PluginPair GetNonSystemPlugin(Query query) { - List pluginPairs = new List(); - var exclusivePluginPair = GetExclusivePlugin(query) ?? - GetActionKeywordPlugin(query); - if (exclusivePluginPair != null) - { - pluginPairs.Add(exclusivePluginPair); - } - - return pluginPairs; + return GetExclusivePlugin(query) ?? GetActionKeywordPlugin(query); } - private static List GetGenericPlugins() + private static List GetSystemPlugins() { - return plugins.Where(o => IsGenericPlugin(o.Metadata)).ToList(); - } - - - private static bool IsExclusivePluginQuery(Query query) - { - return GetExclusivePlugin(query) != null || GetActionKeywordPlugin(query) != null; + return plugins.Where(o => IsSystemPlugin(o.Metadata)).ToList(); } public static List GetPluginContextMenus(Result result) diff --git a/Wox.Plugin/Query.cs b/Wox.Plugin/Query.cs index 0ec0882ea3..e4c6e0fa3a 100644 --- a/Wox.Plugin/Query.cs +++ b/Wox.Plugin/Query.cs @@ -43,8 +43,8 @@ namespace Wox.Plugin { get { - var index = string.IsNullOrEmpty(ActionKeyword) ? 1 : 2; - return string.Join(Seperater, Terms.Skip(index).ToArray()); + var index = String.IsNullOrEmpty(ActionKeyword) ? 1 : 2; + return String.Join(Seperater, Terms.Skip(index).ToArray()); } } @@ -62,11 +62,11 @@ namespace Wox.Plugin { try { - return string.IsNullOrEmpty(ActionKeyword) ? Terms[index] : Terms[index + 1]; + return String.IsNullOrEmpty(ActionKeyword) ? Terms[index] : Terms[index + 1]; } catch (IndexOutOfRangeException) { - return string.Empty; + return String.Empty; } } @@ -83,7 +83,7 @@ namespace Wox.Plugin { // replace multiple white spaces with one white space Terms = rawQuery.Split(new[] { Seperater }, StringSplitOptions.RemoveEmptyEntries); - RawQuery = string.Join(Seperater, Terms.ToArray()); + RawQuery = String.Join(Seperater, Terms.ToArray()); ActionParameters = new List(); ParseQuery(); @@ -91,7 +91,7 @@ namespace Wox.Plugin private void ParseQuery() { - if (string.IsNullOrEmpty(RawQuery)) return; + if (String.IsNullOrEmpty(RawQuery)) return; string[] strings = RawQuery.Split(' '); //todo:not exactly correct. query that didn't containing a space should be a valid query @@ -100,7 +100,7 @@ namespace Wox.Plugin ActionName = strings[0]; for (int i = 1; i < strings.Length; i++) { - if (!string.IsNullOrEmpty(strings[i])) + if (!String.IsNullOrEmpty(strings[i])) { ActionParameters.Add(strings[i]); } @@ -111,13 +111,15 @@ namespace Wox.Plugin public string GetAllRemainingParameter() { - string[] strings = RawQuery.Split(new char[] { ' ' }, 2, System.StringSplitOptions.None); + string[] strings = RawQuery.Split(new char[] { ' ' }, 2, StringSplitOptions.None); if (strings.Length > 1) { return strings[1]; } - return string.Empty; + return String.Empty; } + + public const string ActionKeywordWildcardSign = "*"; } } diff --git a/Wox/ActionKeyword.xaml.cs b/Wox/ActionKeyword.xaml.cs index 87499a4f25..4bfe80e445 100644 --- a/Wox/ActionKeyword.xaml.cs +++ b/Wox/ActionKeyword.xaml.cs @@ -45,7 +45,7 @@ namespace Wox } //check new action keyword didn't used by other plugin - if (tbAction.Text.Trim() != PluginManager.ActionKeywordWildcardSign && PluginManager.AllPlugins.Exists(o => o.Metadata.ActionKeyword == tbAction.Text.Trim())) + if (tbAction.Text.Trim() != Query.ActionKeywordWildcardSign && PluginManager.AllPlugins.Exists(o => o.Metadata.ActionKeyword == tbAction.Text.Trim())) { MessageBox.Show(InternationalizationManager.Instance.GetTranslation("newActionKeywordHasBeenAssigned")); return; From 79461d52c2ba18f70ade65f0c6a8a6cdc895b1ce Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sun, 1 Nov 2015 22:59:56 +0000 Subject: [PATCH 38/75] Rearrange code Fields -> Properties -> Init method -> Query methods -> Is methods -> Get Methods --- Wox.Core/Plugin/PluginManager.cs | 76 ++++++++++++++++---------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index f5b491f433..4bf0c40550 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -26,8 +26,6 @@ namespace Wox.Core.Plugin private static IEnumerable exclusiveSearchPlugins; private static List> contextMenuPlugins; - public static IPublicAPI API { get; private set; } - private static List plugins = new List(); /// @@ -35,17 +33,27 @@ namespace Wox.Core.Plugin /// private static List pluginDirectories = new List(); - private static void SetupPluginDirectories() + public static List AllPlugins { - pluginDirectories.Add(PluginDirectory); - MakesurePluginDirectoriesExist(); + get + { + return plugins.OrderBy(o => o.Metadata.Name).ToList(); + } } + public static IPublicAPI API { private set; get; } + public static string PluginDirectory { get { return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Plugins"); } } + private static void SetupPluginDirectories() + { + pluginDirectories.Add(PluginDirectory); + MakesurePluginDirectoriesExist(); + } + private static void MakesurePluginDirectoriesExist() { foreach (string pluginDirectory in pluginDirectories) @@ -159,11 +167,33 @@ namespace Wox.Core.Plugin } } - public static List AllPlugins + private static void QueryForPlugin(PluginPair pair, Query query) { - get + try { - return plugins.OrderBy(o => o.Metadata.Name).ToList(); + Stopwatch sw = new Stopwatch(); + sw.Start(); + List results = pair.Plugin.Query(query) ?? new List(); + results.ForEach(o => + { + o.PluginID = pair.Metadata.ID; + }); + sw.Stop(); + Debug.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); } } @@ -198,36 +228,6 @@ namespace Wox.Core.Plugin LoadInstantSearches().Any(o => o.Key.Metadata.ID == pluginMetadata.ID); } - private static void QueryForPlugin(PluginPair pair, Query query) - { - try - { - Stopwatch sw = new Stopwatch(); - sw.Start(); - List results = pair.Plugin.Query(query) ?? new List(); - results.ForEach(o => - { - o.PluginID = pair.Metadata.ID; - }); - sw.Stop(); - Debug.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); - } - } - private static List> LoadInstantSearches() { if (instantSearches != null) return instantSearches; From 79fdba969b0f514902082bbc07919550e591cbe0 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Sun, 1 Nov 2015 23:32:17 +0000 Subject: [PATCH 39/75] Don't sort plugins every time, sort it when set it --- Wox.Core/Plugin/PluginManager.cs | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 4bf0c40550..1bd0d0069f 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; @@ -25,8 +24,7 @@ namespace Wox.Core.Plugin private static List> instantSearches; private static IEnumerable exclusiveSearchPlugins; private static List> contextMenuPlugins; - - private static List plugins = new List(); + private static List plugins; /// /// Directories that will hold Wox plugin directory @@ -35,10 +33,8 @@ namespace Wox.Core.Plugin public static List AllPlugins { - get - { - return plugins.OrderBy(o => o.Metadata.Name).ToList(); - } + get { return plugins; } + private set { plugins = value.OrderBy(o => o.Metadata.Name).ToList(); } } public static IPublicAPI API { private set; get; } @@ -81,16 +77,17 @@ namespace Wox.Core.Plugin SetupPluginDirectories(); API = api; - plugins.Clear(); + AllPlugins?.Clear(); pluginMetadatas = PluginConfig.Parse(pluginDirectories); - plugins.AddRange(new CSharpPluginLoader().LoadPlugin(pluginMetadatas)); - plugins.AddRange(new JsonRPCPluginLoader().LoadPlugin(pluginMetadatas)); + AllPlugins = (new CSharpPluginLoader().LoadPlugin(pluginMetadatas)). + Concat(new JsonRPCPluginLoader().LoadPlugin(pluginMetadatas)). + ToList(); //load plugin i18n languages ResourceMerger.ApplyPluginLanguages(); - foreach (PluginPair pluginPair in plugins) + foreach (PluginPair pluginPair in AllPlugins) { PluginPair pair = pluginPair; ThreadPool.QueueUserWorkItem(o => @@ -205,7 +202,7 @@ namespace Wox.Core.Plugin private static bool IsVailldActionKeyword(string actionKeyword) { if (string.IsNullOrEmpty(actionKeyword) || actionKeyword == Query.ActionKeywordWildcardSign) return false; - PluginPair pair = plugins.FirstOrDefault(o => o.Metadata.ActionKeyword == actionKeyword); + PluginPair pair = AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == actionKeyword); if (pair == null) return false; var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pair.Metadata.ID); return customizedPluginConfig == null || !customizedPluginConfig.Disabled; @@ -244,13 +241,13 @@ namespace Wox.Core.Plugin /// public static PluginPair GetPlugin(string id) { - return plugins.FirstOrDefault(o => o.Metadata.ID == id); + return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id); } private static PluginPair GetExclusivePlugin(Query query) { exclusiveSearchPlugins = exclusiveSearchPlugins ?? - plugins.Where(p => p.Plugin.GetType().GetInterfaces().Contains(typeof(IExclusiveQuery))); + AllPlugins.Where(p => p.Plugin.GetType().GetInterfaces().Contains(typeof(IExclusiveQuery))); var plugin = exclusiveSearchPlugins.FirstOrDefault(p => ((IExclusiveQuery)p.Plugin).IsExclusiveQuery(query)); return plugin; } @@ -259,7 +256,7 @@ namespace Wox.Core.Plugin { //if a query doesn't contain a vaild action keyword, it should not be a action keword plugin query if (string.IsNullOrEmpty(query.ActionKeyword)) return null; - return plugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionKeyword); + return AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionKeyword); } private static PluginPair GetNonSystemPlugin(Query query) @@ -269,7 +266,7 @@ namespace Wox.Core.Plugin private static List GetSystemPlugins() { - return plugins.Where(o => IsSystemPlugin(o.Metadata)).ToList(); + return AllPlugins.Where(o => IsSystemPlugin(o.Metadata)).ToList(); } public static List GetPluginContextMenus(Result result) From bfa0db3ba368d37ba3c23247dd3e84b8a047ec83 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 00:04:05 +0000 Subject: [PATCH 40/75] Replace all Stopwatch with Timeit --- Wox.Core/Plugin/PluginManager.cs | 43 ++++++++------------ Wox.Infrastructure/Timeit.cs | 27 ++++++++++--- Wox/ImageLoader/ImageLoader.cs | 67 +++++++++++++++----------------- 3 files changed, 69 insertions(+), 68 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 1bd0d0069f..7d99c2ec34 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -92,17 +92,16 @@ namespace Wox.Core.Plugin PluginPair pair = pluginPair; ThreadPool.QueueUserWorkItem(o => { - Stopwatch sw = new Stopwatch(); - sw.Start(); - pair.Plugin.Init(new PluginInitContext + using (var time = new Timeit($"Plugin init: {pair.Metadata.Name}")) { - CurrentPluginMetadata = pair.Metadata, - Proxy = HttpProxy.Instance, - API = API - }); - sw.Stop(); - Debug.WriteLine(string.Format("Plugin init:{0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); - pair.InitTime = sw.ElapsedMilliseconds; + pair.Plugin.Init(new PluginInitContext + { + CurrentPluginMetadata = pair.Metadata, + Proxy = HttpProxy.Instance, + API = API + }); + pair.InitTime = time.Current; + } InternationalizationManager.Instance.UpdatePluginMetadataTranslations(pair); }); } @@ -168,25 +167,15 @@ namespace Wox.Core.Plugin { try { - Stopwatch sw = new Stopwatch(); - sw.Start(); - List results = pair.Plugin.Query(query) ?? new List(); - results.ForEach(o => + using (var time = new Timeit("Preload programs")) { - o.PluginID = pair.Metadata.ID; - }); - sw.Stop(); - Debug.WriteLine(string.Format("Plugin query: {0} - {1}", pair.Metadata.Name, sw.ElapsedMilliseconds)); - pair.QueryCount += 1; - if (pair.QueryCount == 1) - { - pair.AvgQueryTime = sw.ElapsedMilliseconds; + var results = pair.Plugin.Query(query) ?? new List(); + results.ForEach(o => { o.PluginID = pair.Metadata.ID; }); + var seconds = time.Current; + pair.QueryCount += 1; + pair.AvgQueryTime = pair.QueryCount == 1 ? seconds : (pair.AvgQueryTime + seconds) / 2; + API.PushResults(query, pair.Metadata, results); } - else - { - pair.AvgQueryTime = (pair.AvgQueryTime + sw.ElapsedMilliseconds) / 2; - } - API.PushResults(query, pair.Metadata, results); } catch (System.Exception e) { diff --git a/Wox.Infrastructure/Timeit.cs b/Wox.Infrastructure/Timeit.cs index 7a857bee4b..1e92cd8deb 100644 --- a/Wox.Infrastructure/Timeit.cs +++ b/Wox.Infrastructure/Timeit.cs @@ -1,23 +1,38 @@ using System; +using System.Collections.Generic; using System.Diagnostics; +using Wox.Plugin; namespace Wox.Infrastructure { public class Timeit : IDisposable { - private Stopwatch stopwatch = new Stopwatch(); - private string name; + private readonly Stopwatch _stopwatch = new Stopwatch(); + private readonly string _name; public Timeit(string name) { - this.name = name; - stopwatch.Start(); + _name = name; + _stopwatch.Start(); } + public long Current + { + get + { + _stopwatch.Stop(); + long seconds = _stopwatch.ElapsedMilliseconds; + _stopwatch.Start(); + Debug.WriteLine(_name + ":" + _stopwatch.ElapsedMilliseconds + "ms"); + return seconds; + } + } + + public void Dispose() { - stopwatch.Stop(); - Debug.WriteLine(name + ":" + stopwatch.ElapsedMilliseconds + "ms"); + _stopwatch.Stop(); + Debug.WriteLine(_name + ":" + _stopwatch.ElapsedMilliseconds + "ms"); } } } diff --git a/Wox/ImageLoader/ImageLoader.cs b/Wox/ImageLoader/ImageLoader.cs index 62924c1710..712090a6fe 100644 --- a/Wox/ImageLoader/ImageLoader.cs +++ b/Wox/ImageLoader/ImageLoader.cs @@ -80,50 +80,47 @@ namespace Wox.ImageLoader public static ImageSource Load(string path, bool addToCache = true) { - Stopwatch sw = new Stopwatch(); - sw.Start(); - - if (string.IsNullOrEmpty(path)) return null; - if (addToCache) + using (new Timeit($"Loading image path: {path}")) { - ImageCacheStroage.Instance.Add(path); - } - - ImageSource img = null; - if (imageCache.ContainsKey(path)) - { - img = imageCache[path]; - } - else - { - string ext = Path.GetExtension(path).ToLower(); - - if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) + if (string.IsNullOrEmpty(path)) return null; + if (addToCache) { - img = new BitmapImage(new Uri(path)); - } - else if (selfExts.Contains(ext) && File.Exists(path)) - { - img = GetIcon(path); - } - else if (!string.IsNullOrEmpty(path) && imageExts.Contains(ext) && File.Exists(path)) - { - img = new BitmapImage(new Uri(path)); + ImageCacheStroage.Instance.Add(path); } - - if (img != null && addToCache) + ImageSource img = null; + if (imageCache.ContainsKey(path)) { - if (!imageCache.ContainsKey(path)) + img = imageCache[path]; + } + else + { + string ext = Path.GetExtension(path).ToLower(); + + if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) { - imageCache.Add(path, img); + img = new BitmapImage(new Uri(path)); + } + else if (selfExts.Contains(ext) && File.Exists(path)) + { + img = GetIcon(path); + } + else if (!string.IsNullOrEmpty(path) && imageExts.Contains(ext) && File.Exists(path)) + { + img = new BitmapImage(new Uri(path)); + } + + + if (img != null && addToCache) + { + if (!imageCache.ContainsKey(path)) + { + imageCache.Add(path, img); + } } } + return img; } - - sw.Stop(); - Debug.WriteLine(string.Format("Loading image path: {0} - {1}ms",path,sw.ElapsedMilliseconds)); - return img; } // http://blogs.msdn.com/b/oldnewthing/archive/2011/01/27/10120844.aspx From a3117fa61d683d7089b2eba6d7ca85b1eda57843 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 00:09:42 +0000 Subject: [PATCH 41/75] Misc --- Wox.Core/Plugin/PluginManager.cs | 15 ++++++--------- Wox.Infrastructure/Timeit.cs | 2 +- Wox.Plugin/Query.cs | 7 ++++++- Wox/ActionKeyword.xaml.cs | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index 7d99c2ec34..d6b36bbb26 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -141,14 +141,10 @@ namespace Wox.Core.Plugin { var customizedPluginConfig = UserSettingStorage.Instance. CustomizedPluginConfigs.FirstOrDefault(o => o.ID == plugin.Metadata.ID); - if (customizedPluginConfig != null && customizedPluginConfig.Disabled) - { - return; - } + if (customizedPluginConfig != null && customizedPluginConfig.Disabled) return; if (query.IsIntantQuery && IsInstantSearchPlugin(plugin.Metadata)) { - Debug.WriteLine(string.Format("Plugin {0} is executing instant search.", plugin.Metadata.Name)); - using (new Timeit(" => instant search took: ")) + using (new Timeit($"Plugin {plugin.Metadata.Name} is executing instant search")) { QueryForPlugin(plugin, query); } @@ -190,16 +186,17 @@ namespace Wox.Core.Plugin /// private static bool IsVailldActionKeyword(string actionKeyword) { - if (string.IsNullOrEmpty(actionKeyword) || actionKeyword == Query.ActionKeywordWildcardSign) return false; + if (string.IsNullOrEmpty(actionKeyword) || actionKeyword == Query.WildcardSign) return false; PluginPair pair = AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == actionKeyword); if (pair == null) return false; - var customizedPluginConfig = UserSettingStorage.Instance.CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pair.Metadata.ID); + var customizedPluginConfig = UserSettingStorage.Instance. + CustomizedPluginConfigs.FirstOrDefault(o => o.ID == pair.Metadata.ID); return customizedPluginConfig == null || !customizedPluginConfig.Disabled; } public static bool IsSystemPlugin(PluginMetadata metadata) { - return metadata.ActionKeyword == Query.ActionKeywordWildcardSign; + return metadata.ActionKeyword == Query.WildcardSign; } public static bool IsInstantQuery(string query) diff --git a/Wox.Infrastructure/Timeit.cs b/Wox.Infrastructure/Timeit.cs index 1e92cd8deb..6b6e0d704d 100644 --- a/Wox.Infrastructure/Timeit.cs +++ b/Wox.Infrastructure/Timeit.cs @@ -23,7 +23,7 @@ namespace Wox.Infrastructure _stopwatch.Stop(); long seconds = _stopwatch.ElapsedMilliseconds; _stopwatch.Start(); - Debug.WriteLine(_name + ":" + _stopwatch.ElapsedMilliseconds + "ms"); + Debug.WriteLine(_name + " : " + _stopwatch.ElapsedMilliseconds + "ms"); return seconds; } } diff --git a/Wox.Plugin/Query.cs b/Wox.Plugin/Query.cs index e4c6e0fa3a..538b23f9df 100644 --- a/Wox.Plugin/Query.cs +++ b/Wox.Plugin/Query.cs @@ -27,6 +27,11 @@ namespace Wox.Plugin public const string Seperater = " "; + /// + /// * is used for System Plugin + /// + public const string WildcardSign = "*"; + internal string ActionKeyword { get; set; } internal bool IsIntantQuery { get; set; } @@ -120,6 +125,6 @@ namespace Wox.Plugin return String.Empty; } - public const string ActionKeywordWildcardSign = "*"; + } } diff --git a/Wox/ActionKeyword.xaml.cs b/Wox/ActionKeyword.xaml.cs index 4bfe80e445..0e8b8e1382 100644 --- a/Wox/ActionKeyword.xaml.cs +++ b/Wox/ActionKeyword.xaml.cs @@ -45,7 +45,7 @@ namespace Wox } //check new action keyword didn't used by other plugin - if (tbAction.Text.Trim() != Query.ActionKeywordWildcardSign && PluginManager.AllPlugins.Exists(o => o.Metadata.ActionKeyword == tbAction.Text.Trim())) + if (tbAction.Text.Trim() != Query.WildcardSign && PluginManager.AllPlugins.Exists(o => o.Metadata.ActionKeyword == tbAction.Text.Trim())) { MessageBox.Show(InternationalizationManager.Instance.GetTranslation("newActionKeywordHasBeenAssigned")); return; From ac3a28287632f001570cc844769cf25154547aa4 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 01:06:57 +0000 Subject: [PATCH 42/75] Fix bug for CMD This bug is introduced since commit: 73dadde5f077896129aa574d028c0343485f3ddc --- Plugins/Wox.Plugin.CMD/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Wox.Plugin.CMD/plugin.json b/Plugins/Wox.Plugin.CMD/plugin.json index 949a499983..329dcd02c6 100644 --- a/Plugins/Wox.Plugin.CMD/plugin.json +++ b/Plugins/Wox.Plugin.CMD/plugin.json @@ -1,6 +1,6 @@ { "ID":"D409510CD0D2481F853690A07E6DC426", - "ActionKeyword":"*", + "ActionKeyword":">", "Name":"Shell", "Description":"Provide executing commands from Wox. Commands should start with >", "Author":"qianlifeng", From b5a8312167d810938af7ca1a1f81f0363ecfe2d0 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 02:47:43 +0000 Subject: [PATCH 43/75] Add startup time measurement --- Wox/App.xaml.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Wox/App.xaml.cs b/Wox/App.xaml.cs index 5fb45331f8..d90577ac92 100644 --- a/Wox/App.xaml.cs +++ b/Wox/App.xaml.cs @@ -5,6 +5,7 @@ using System.Windows; using Wox.CommandArgs; using Wox.Core.Plugin; using Wox.Helper; +using Wox.Infrastructure; namespace Wox { @@ -27,14 +28,18 @@ namespace Wox protected override void OnStartup(StartupEventArgs e) { - base.OnStartup(e); - DispatcherUnhandledException += ErrorReporting.DispatcherUnhandledException; - AppDomain.CurrentDomain.UnhandledException += ErrorReporting.UnhandledExceptionHandle; + using (new Timeit("Startup Time")) + { + base.OnStartup(e); + DispatcherUnhandledException += ErrorReporting.DispatcherUnhandledException; + AppDomain.CurrentDomain.UnhandledException += ErrorReporting.UnhandledExceptionHandle; + + Window = new MainWindow(); + PluginManager.Init(Window); + ImageLoader.ImageLoader.PreloadImages(); + CommandArgsFactory.Execute(e.Args.ToList()); + } - Window = new MainWindow(); - PluginManager.Init(Window); - ImageLoader.ImageLoader.PreloadImages(); - CommandArgsFactory.Execute(e.Args.ToList()); } public bool OnActivate(IList args) From 881e414043dd546617b0b0d39db0d87768f47fd2 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 02:49:38 +0000 Subject: [PATCH 44/75] Fix ResourceMerger 1. Fix duplication for loading resource. 2. Fix null reference when plugin is not loaded. 3. speedup. --- Wox.Core/Plugin/PluginManager.cs | 3 ++- Wox.Core/Theme/Theme.cs | 5 ++-- Wox.Core/UI/ResourceMerger.cs | 35 ++++++++++++++++++++++----- Wox.Core/i18n/Internationalization.cs | 23 ++++++------------ Wox/App.xaml | 4 +-- 5 files changed, 43 insertions(+), 27 deletions(-) diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index d6b36bbb26..f04bf72804 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -20,6 +20,7 @@ namespace Wox.Core.Plugin /// public static class PluginManager { + public const string DirectoryName = "Plugins"; private static List pluginMetadatas; private static List> instantSearches; private static IEnumerable exclusiveSearchPlugins; @@ -41,7 +42,7 @@ namespace Wox.Core.Plugin public static string PluginDirectory { - get { return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Plugins"); } + get { return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), DirectoryName); } } private static void SetupPluginDirectories() diff --git a/Wox.Core/Theme/Theme.cs b/Wox.Core/Theme/Theme.cs index b20e95cdd0..4fba143bcd 100644 --- a/Wox.Core/Theme/Theme.cs +++ b/Wox.Core/Theme/Theme.cs @@ -14,11 +14,12 @@ namespace Wox.Core.Theme { public class Theme : IUIResource,ITheme { + public const string DirectoryName = "Themes"; private static List themeDirectories = new List(); static Theme() { - themeDirectories.Add(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Themes")); + themeDirectories.Add(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), DirectoryName)); MakesureThemeDirectoriesExist(); } @@ -55,7 +56,7 @@ namespace Wox.Core.Theme UserSettingStorage.Instance.Theme = themeName; UserSettingStorage.Instance.Save(); - ResourceMerger.ApplyResources(); + ResourceMerger.ApplyThemeResource(); } public ResourceDictionary GetResourceDictionary() diff --git a/Wox.Core/UI/ResourceMerger.cs b/Wox.Core/UI/ResourceMerger.cs index 6ad940c3f5..0d1539d896 100644 --- a/Wox.Core/UI/ResourceMerger.cs +++ b/Wox.Core/UI/ResourceMerger.cs @@ -1,20 +1,42 @@ using System; +using System.Linq; using System.Windows; using Wox.Core.i18n; +using Wox.Core.Plugin; using Wox.Plugin; namespace Wox.Core.UI { - public class ResourceMerger + public static class ResourceMerger { - internal static void ApplyResources() + private static void RemoveResource(string resourceDirectoryName) { - Application.Current.Resources.MergedDictionaries.Clear(); - ApplyPluginLanguages(); - ApplyThemeAndLanguageResources(); + var mergedDictionaries = Application.Current.Resources.MergedDictionaries; + foreach (var resource in mergedDictionaries) + { + int directoryPosition = resource.Source.Segments.Length - 2; + string currentDirectoryName = resource.Source.Segments[directoryPosition]; + if (currentDirectoryName == resourceDirectoryName) + { + mergedDictionaries.Remove(resource); + break; + } + } } - internal static void ApplyThemeAndLanguageResources() + public static void ApplyThemeResource() + { + RemoveResource(Theme.Theme.DirectoryName); + ApplyUIResources(); + } + + public static void ApplyLanguageResources() + { + RemoveResource(Internationalization.DirectoryName); + ApplyUIResources(); + } + + private static void ApplyUIResources() { var UIResources = AssemblyHelper.LoadInterfacesFromAppDomain(); foreach (var uiResource in UIResources) @@ -25,6 +47,7 @@ namespace Wox.Core.UI internal static void ApplyPluginLanguages() { + RemoveResource(PluginManager.DirectoryName); var pluginI18ns = AssemblyHelper.LoadInterfacesFromAppDomain(); foreach (var pluginI18n in pluginI18ns) { diff --git a/Wox.Core/i18n/Internationalization.cs b/Wox.Core/i18n/Internationalization.cs index cf9878fd7d..3f8e4ecbea 100644 --- a/Wox.Core/i18n/Internationalization.cs +++ b/Wox.Core/i18n/Internationalization.cs @@ -14,7 +14,8 @@ namespace Wox.Core.i18n { public class Internationalization : IInternationalization, IUIResource { - private static string DefaultLanguageDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Languages"); + public const string DirectoryName = "Languages"; + private static readonly string DefaultDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), DirectoryName); static Internationalization() { @@ -23,11 +24,11 @@ namespace Wox.Core.i18n private static void MakesureThemeDirectoriesExist() { - if (!Directory.Exists(DefaultLanguageDirectory)) + if (!Directory.Exists(DefaultDirectory)) { try { - Directory.CreateDirectory(DefaultLanguageDirectory); + Directory.CreateDirectory(DefaultDirectory); } catch (System.Exception e) { @@ -69,15 +70,14 @@ namespace Wox.Core.i18n UserSettingStorage.Instance.Language = language.LanguageCode; UserSettingStorage.Instance.Save(); - ResourceMerger.ApplyResources(); - UpdateAllPluginMetadataTranslations(); + ResourceMerger.ApplyLanguageResources(); } public ResourceDictionary GetResourceDictionary() { return new ResourceDictionary { - Source = new Uri(GetLanguageFile(DefaultLanguageDirectory), UriKind.Absolute) + Source = new Uri(GetLanguageFile(DefaultDirectory), UriKind.Absolute) }; } @@ -111,15 +111,6 @@ namespace Wox.Core.i18n } - internal void UpdateAllPluginMetadataTranslations() - { - List> plugins = AssemblyHelper.LoadPluginInterfaces(); - foreach (var plugin in plugins) - { - UpdatePluginMetadataTranslations(plugin.Key); - } - } - internal void UpdatePluginMetadataTranslations(PluginPair pluginPair) { var pluginI18n = pluginPair.Plugin as IPluginI18n; @@ -142,7 +133,7 @@ namespace Wox.Core.i18n private string GetLanguagePath(Language language) { - string path = Path.Combine(DefaultLanguageDirectory, language.LanguageCode + ".xaml"); + string path = Path.Combine(DefaultDirectory, language.LanguageCode + ".xaml"); if (File.Exists(path)) { return path; diff --git a/Wox/App.xaml b/Wox/App.xaml index 449be94262..2f32256d20 100644 --- a/Wox/App.xaml +++ b/Wox/App.xaml @@ -5,8 +5,8 @@ - - + + From 96b6832dff23efdbdcb0e32b06f940025c1afcda Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 13:42:52 +0000 Subject: [PATCH 45/75] Remove LoadInterfacesFromAppDomain Much faster. ApplyPluginLanguages is 10 times faster now. 7ms vs 100ms. --- Wox.Core/AssemblyHelper.cs | 9 ------- Wox.Core/Theme/Theme.cs | 2 +- Wox.Core/UI/ResourceMerger.cs | 35 +++++++++------------------ Wox.Core/i18n/Internationalization.cs | 2 +- 4 files changed, 13 insertions(+), 35 deletions(-) diff --git a/Wox.Core/AssemblyHelper.cs b/Wox.Core/AssemblyHelper.cs index dd47eb73b5..ec1e27218b 100644 --- a/Wox.Core/AssemblyHelper.cs +++ b/Wox.Core/AssemblyHelper.cs @@ -23,14 +23,5 @@ namespace Wox.Core } return results; } - - public static List LoadInterfacesFromAppDomain() where T : class - { - var interfaceObjects = AppDomain.CurrentDomain.GetAssemblies() - .SelectMany(s => s.GetTypes()) - .Where(p => p.IsClass && !p.IsAbstract && p.GetInterfaces().Contains(typeof(T))); - - return interfaceObjects.Select(interfaceObject => (T) Activator.CreateInstance(interfaceObject)).ToList(); - } } } diff --git a/Wox.Core/Theme/Theme.cs b/Wox.Core/Theme/Theme.cs index 4fba143bcd..114b5742c7 100644 --- a/Wox.Core/Theme/Theme.cs +++ b/Wox.Core/Theme/Theme.cs @@ -56,7 +56,7 @@ namespace Wox.Core.Theme UserSettingStorage.Instance.Theme = themeName; UserSettingStorage.Instance.Save(); - ResourceMerger.ApplyThemeResource(); + ResourceMerger.ApplyThemeResource(this); } public ResourceDictionary GetResourceDictionary() diff --git a/Wox.Core/UI/ResourceMerger.cs b/Wox.Core/UI/ResourceMerger.cs index 0d1539d896..c9a22493f5 100644 --- a/Wox.Core/UI/ResourceMerger.cs +++ b/Wox.Core/UI/ResourceMerger.cs @@ -24,44 +24,31 @@ namespace Wox.Core.UI } } - public static void ApplyThemeResource() + public static void ApplyThemeResource(Theme.Theme t) { RemoveResource(Theme.Theme.DirectoryName); - ApplyUIResources(); + Application.Current.Resources.MergedDictionaries.Add(t.GetResourceDictionary()); } - public static void ApplyLanguageResources() + public static void ApplyLanguageResources(Internationalization i) { RemoveResource(Internationalization.DirectoryName); - ApplyUIResources(); - } - - private static void ApplyUIResources() - { - var UIResources = AssemblyHelper.LoadInterfacesFromAppDomain(); - foreach (var uiResource in UIResources) - { - Application.Current.Resources.MergedDictionaries.Add(uiResource.GetResourceDictionary()); - } + Application.Current.Resources.MergedDictionaries.Add(i.GetResourceDictionary()); } internal static void ApplyPluginLanguages() { RemoveResource(PluginManager.DirectoryName); - var pluginI18ns = AssemblyHelper.LoadInterfacesFromAppDomain(); - foreach (var pluginI18n in pluginI18ns) + 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())). + Where(file => !string.IsNullOrEmpty(file)))) { - string languageFile = InternationalizationManager.Instance.GetLanguageFile(pluginI18n.GetLanguagesFolder()); - if (!string.IsNullOrEmpty(languageFile)) + Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary { - Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary - { - Source = new Uri(languageFile, UriKind.Absolute) - }); - } + Source = new Uri(languageFile, UriKind.Absolute) + }); } } - - } } \ No newline at end of file diff --git a/Wox.Core/i18n/Internationalization.cs b/Wox.Core/i18n/Internationalization.cs index 3f8e4ecbea..cc0d80e837 100644 --- a/Wox.Core/i18n/Internationalization.cs +++ b/Wox.Core/i18n/Internationalization.cs @@ -70,7 +70,7 @@ namespace Wox.Core.i18n UserSettingStorage.Instance.Language = language.LanguageCode; UserSettingStorage.Instance.Save(); - ResourceMerger.ApplyLanguageResources(); + ResourceMerger.ApplyLanguageResources(this); } public ResourceDictionary GetResourceDictionary() From 89dc9e7e7f3c27fd409f8800df381bcce2b103e4 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 13:43:09 +0000 Subject: [PATCH 46/75] Better log info --- Wox.Infrastructure/NLog.config | 2 +- Wox.Infrastructure/Timeit.cs | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Wox.Infrastructure/NLog.config b/Wox.Infrastructure/NLog.config index 9dcf31def0..896abfdf6c 100644 --- a/Wox.Infrastructure/NLog.config +++ b/Wox.Infrastructure/NLog.config @@ -18,6 +18,6 @@ - + \ No newline at end of file diff --git a/Wox.Infrastructure/Timeit.cs b/Wox.Infrastructure/Timeit.cs index 6b6e0d704d..8bad568501 100644 --- a/Wox.Infrastructure/Timeit.cs +++ b/Wox.Infrastructure/Timeit.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using Wox.Infrastructure.Logger; using Wox.Plugin; namespace Wox.Infrastructure @@ -23,7 +24,9 @@ namespace Wox.Infrastructure _stopwatch.Stop(); long seconds = _stopwatch.ElapsedMilliseconds; _stopwatch.Start(); - Debug.WriteLine(_name + " : " + _stopwatch.ElapsedMilliseconds + "ms"); + string info = _name + " : " + _stopwatch.ElapsedMilliseconds + "ms"; + Debug.WriteLine(info); + Log.Info(info); return seconds; } } @@ -32,7 +35,9 @@ namespace Wox.Infrastructure public void Dispose() { _stopwatch.Stop(); - Debug.WriteLine(_name + ":" + _stopwatch.ElapsedMilliseconds + "ms"); + string info = _name + " : " + _stopwatch.ElapsedMilliseconds + "ms"; + Debug.WriteLine(info); + Log.Info(info); } } } From c9edc217fdc5c907be6be103545f478a26cff2ed Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 13:43:19 +0000 Subject: [PATCH 47/75] Misc --- Wox.sln | 7 +++++-- Wox/App.xaml.cs | 3 ++- Wox/ImageLoader/ImageLoader.cs | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Wox.sln b/Wox.sln index 4fa7835613..1bffc62f8f 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.21005.1 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Test", "Wox.Test\Wox.Test.csproj", "{FF742965-9A80-41A5-B042-D6C7D3A21708}" EndProject @@ -60,6 +60,9 @@ 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(Performance) = preSolution + HasPerformanceSessions = true + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU diff --git a/Wox/App.xaml.cs b/Wox/App.xaml.cs index d90577ac92..8808ef1876 100644 --- a/Wox/App.xaml.cs +++ b/Wox/App.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Windows; using Wox.CommandArgs; using Wox.Core.Plugin; @@ -34,9 +35,9 @@ namespace Wox DispatcherUnhandledException += ErrorReporting.DispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += ErrorReporting.UnhandledExceptionHandle; + //ThreadPool.QueueUserWorkItem(o => { ImageLoader.ImageLoader.PreloadImages(); }); Window = new MainWindow(); PluginManager.Init(Window); - ImageLoader.ImageLoader.PreloadImages(); CommandArgsFactory.Execute(e.Args.ToList()); } diff --git a/Wox/ImageLoader/ImageLoader.cs b/Wox/ImageLoader/ImageLoader.cs index 712090a6fe..18a5a91d09 100644 --- a/Wox/ImageLoader/ImageLoader.cs +++ b/Wox/ImageLoader/ImageLoader.cs @@ -70,7 +70,7 @@ namespace Wox.ImageLoader if (!imageCache.ContainsKey(image.Key)) { KeyValuePair copyedImg = image; - App.Window.Dispatcher.Invoke(new Action(() => imageCache.Add(copyedImg.Key, img))); + imageCache.Add(copyedImg.Key, img); } } } From a668ed5e24828bb0cc7b9358dbf221d8d864ddbc Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 18:13:53 +0000 Subject: [PATCH 48/75] Refactoring LoadPluginInterfaces --- Wox.Core/AssemblyHelper.cs | 15 -------- Wox.Core/Plugin/PluginManager.cs | 64 ++++++++++++++++++-------------- 2 files changed, 37 insertions(+), 42 deletions(-) diff --git a/Wox.Core/AssemblyHelper.cs b/Wox.Core/AssemblyHelper.cs index ec1e27218b..a07e108f17 100644 --- a/Wox.Core/AssemblyHelper.cs +++ b/Wox.Core/AssemblyHelper.cs @@ -8,20 +8,5 @@ namespace Wox.Core { internal class AssemblyHelper { - public static List> LoadPluginInterfaces() where T : class - { - List> results = new List>(); - foreach (PluginPair pluginPair in PluginManager.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(new KeyValuePair(pluginPair,type)); - } - } - return results; - } } } diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index f04bf72804..aa26b9f78c 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; @@ -22,9 +23,9 @@ namespace Wox.Core.Plugin { public const string DirectoryName = "Plugins"; private static List pluginMetadatas; - private static List> instantSearches; + private static List instantSearches; private static IEnumerable exclusiveSearchPlugins; - private static List> contextMenuPlugins; + private static List contextMenuPlugins; private static List plugins; /// @@ -109,7 +110,7 @@ namespace Wox.Core.Plugin ThreadPool.QueueUserWorkItem(o => { - LoadInstantSearches(); + GetInstantSearchesPlugins(); }); } @@ -120,16 +121,16 @@ namespace Wox.Core.Plugin public static void QueryForAllPlugins(Query query) { - query.ActionKeyword = string.Empty; + query.ActionKeyword = String.Empty; query.Search = query.RawQuery; if (query.Terms.Length == 0) return; if (IsVailldActionKeyword(query.Terms[0])) { query.ActionKeyword = query.Terms[0]; } - if (!string.IsNullOrEmpty(query.ActionKeyword)) + if (!String.IsNullOrEmpty(query.ActionKeyword)) { - query.Search = string.Join(Query.Seperater, query.Terms.Skip(1).ToArray()); + query.Search = String.Join(Query.Seperater, query.Terms.Skip(1).ToArray()); } QueryDispatch(query); } @@ -187,7 +188,7 @@ namespace Wox.Core.Plugin /// private static bool IsVailldActionKeyword(string actionKeyword) { - if (string.IsNullOrEmpty(actionKeyword) || actionKeyword == Query.WildcardSign) return false; + if (String.IsNullOrEmpty(actionKeyword) || actionKeyword == Query.WildcardSign) return false; PluginPair pair = AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == actionKeyword); if (pair == null) return false; var customizedPluginConfig = UserSettingStorage.Instance. @@ -202,22 +203,19 @@ namespace Wox.Core.Plugin public static bool IsInstantQuery(string query) { - return LoadInstantSearches().Any(o => o.Value.IsInstantQuery(query)); + return GetInstantSearchesPlugins().Any(o => ((IInstantQuery)o).IsInstantQuery(query)); } private static bool IsInstantSearchPlugin(PluginMetadata pluginMetadata) { //todo:to improve performance, any instant search plugin that takes long than 200ms will not consider a instant plugin anymore return pluginMetadata.Language.ToUpper() == AllowedLanguage.CSharp && - LoadInstantSearches().Any(o => o.Key.Metadata.ID == pluginMetadata.ID); + GetInstantSearchesPlugins().Any(o => o.Metadata.ID == pluginMetadata.ID); } - private static List> LoadInstantSearches() + private static List GetInstantSearchesPlugins() { - if (instantSearches != null) return instantSearches; - - instantSearches = AssemblyHelper.LoadPluginInterfaces(); - + instantSearches = instantSearches ?? GetPlugin(); return instantSearches; } @@ -231,6 +229,22 @@ namespace Wox.Core.Plugin return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id); } + public static List GetPlugin() 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; + } + private static PluginPair GetExclusivePlugin(Query query) { exclusiveSearchPlugins = exclusiveSearchPlugins ?? @@ -242,7 +256,7 @@ namespace Wox.Core.Plugin private static PluginPair GetActionKeywordPlugin(Query query) { //if a query doesn't contain a vaild action keyword, it should not be a action keword plugin query - if (string.IsNullOrEmpty(query.ActionKeyword)) return null; + if (String.IsNullOrEmpty(query.ActionKeyword)) return null; return AllPlugins.FirstOrDefault(o => o.Metadata.ActionKeyword == query.ActionKeyword); } @@ -258,22 +272,19 @@ namespace Wox.Core.Plugin public static List GetPluginContextMenus(Result result) { - List contextContextMenus = new List(); - if (contextMenuPlugins == null) - { - contextMenuPlugins = AssemblyHelper.LoadPluginInterfaces(); - } + contextMenuPlugins = contextMenuPlugins ?? GetPlugin(); - var contextMenuPlugin = contextMenuPlugins.FirstOrDefault(o => o.Key.Metadata.ID == result.PluginID); - if (contextMenuPlugin.Value != null) + var pluginPair = contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID); + var plugin = (IContextMenu)pluginPair?.Plugin; + if (plugin != null) { try { - return contextMenuPlugin.Value.LoadContextMenus(result); + return plugin.LoadContextMenus(result); } catch (System.Exception e) { - Log.Error(string.Format("Couldn't load plugin context menus {0}: {1}", contextMenuPlugin.Key.Metadata.Name, e.Message)); + Log.Error($"Couldn't load plugin context menus {pluginPair.Metadata.Name}: {e.Message}"); #if (DEBUG) { throw; @@ -282,8 +293,7 @@ namespace Wox.Core.Plugin } } - return contextContextMenus; + return new List(); } - } } From 818802cf5e63928b0e9db2e22e947e35b0aadc26 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 18:52:34 +0000 Subject: [PATCH 49/75] 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 From 7a38143f5eba275428e01c45e3e4860c3033003c Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 19:27:36 +0000 Subject: [PATCH 50/75] Remove AssemblyHelper --- Wox.Core/AssemblyHelper.cs | 12 ------------ Wox.Core/Wox.Core.csproj | 1 - 2 files changed, 13 deletions(-) delete mode 100644 Wox.Core/AssemblyHelper.cs diff --git a/Wox.Core/AssemblyHelper.cs b/Wox.Core/AssemblyHelper.cs deleted file mode 100644 index a07e108f17..0000000000 --- a/Wox.Core/AssemblyHelper.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Wox.Core.Plugin; -using Wox.Plugin; - -namespace Wox.Core -{ - internal class AssemblyHelper - { - } -} diff --git a/Wox.Core/Wox.Core.csproj b/Wox.Core/Wox.Core.csproj index 2c2b888578..c7e8072a24 100644 --- a/Wox.Core/Wox.Core.csproj +++ b/Wox.Core/Wox.Core.csproj @@ -64,7 +64,6 @@ - From 86da8cbd175c1954f0b57edda3719f8a84ffdc24 Mon Sep 17 00:00:00 2001 From: bao-qian Date: Mon, 2 Nov 2015 19:27:46 +0000 Subject: [PATCH 51/75] Refactoring Plugin.Feature --- Plugins/Wox.Plugin.CMD/CMD.cs | 1 - Plugins/Wox.Plugin.Everything/Main.cs | 1 - .../Wox.Plugin.Program/FileChangeWatcher.cs | 1 - Plugins/Wox.Plugin.Program/Programs.cs | 1 - .../Wox.Plugin.WebSearch/WebQueryPlugin.cs | 1 - Wox.Core/Plugin/PluginManager.cs | 4 +- Wox.Core/UI/ResourceMerger.cs | 1 - Wox.Plugin/Feature.cs | 37 +++++++++++++++++++ Wox.Plugin/Features/IContextMenu.cs | 11 +++--- Wox.Plugin/Features/IExclusiveQuery.cs | 12 +++--- Wox.Plugin/Features/IInstantQuery.cs | 16 ++++---- Wox.Plugin/IPluginI18n.cs | 14 ------- Wox.Plugin/Wox.Plugin.csproj | 3 +- 13 files changed, 59 insertions(+), 44 deletions(-) create mode 100644 Wox.Plugin/Feature.cs delete mode 100644 Wox.Plugin/IPluginI18n.cs diff --git a/Plugins/Wox.Plugin.CMD/CMD.cs b/Plugins/Wox.Plugin.CMD/CMD.cs index b34f92f9cf..59c25ef60b 100644 --- a/Plugins/Wox.Plugin.CMD/CMD.cs +++ b/Plugins/Wox.Plugin.CMD/CMD.cs @@ -8,7 +8,6 @@ using WindowsInput; using WindowsInput.Native; using Wox.Infrastructure.Hotkey; using Wox.Infrastructure.Logger; -using Wox.Plugin.Features; using Control = System.Windows.Controls.Control; namespace Wox.Plugin.CMD diff --git a/Plugins/Wox.Plugin.Everything/Main.cs b/Plugins/Wox.Plugin.Everything/Main.cs index 5aec121eb6..1a6ed8c6bb 100644 --- a/Plugins/Wox.Plugin.Everything/Main.cs +++ b/Plugins/Wox.Plugin.Everything/Main.cs @@ -7,7 +7,6 @@ using System.Reflection; using System.ServiceProcess; using Wox.Infrastructure; using Wox.Plugin.Everything.Everything; -using Wox.Plugin.Features; namespace Wox.Plugin.Everything { diff --git a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs index 559a06518d..4d258e74fc 100644 --- a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs +++ b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs @@ -2,7 +2,6 @@ using System.Diagnostics; using System.IO; using System.Threading; -using Wox.Infrastructure; namespace Wox.Plugin.Program { diff --git a/Plugins/Wox.Plugin.Program/Programs.cs b/Plugins/Wox.Plugin.Program/Programs.cs index 87b2aeeeed..8e2349e435 100644 --- a/Plugins/Wox.Plugin.Program/Programs.cs +++ b/Plugins/Wox.Plugin.Program/Programs.cs @@ -7,7 +7,6 @@ using System.Reflection; using System.Windows; using IWshRuntimeLibrary; using Wox.Infrastructure; -using Wox.Plugin.Features; using Wox.Plugin.Program.ProgramSources; namespace Wox.Plugin.Program diff --git a/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs b/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs index 7e85b12df3..4de81492e6 100644 --- a/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs +++ b/Plugins/Wox.Plugin.WebSearch/WebQueryPlugin.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; -using Wox.Plugin.Features; using Wox.Plugin.WebSearch.SuggestionSources; namespace Wox.Plugin.WebSearch diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index ec8aa7de1e..0dcad32796 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; @@ -12,7 +11,6 @@ using Wox.Core.UserSettings; using Wox.Infrastructure; using Wox.Infrastructure.Logger; using Wox.Plugin; -using Wox.Plugin.Features; namespace Wox.Core.Plugin { @@ -229,7 +227,7 @@ namespace Wox.Core.Plugin return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id); } - public static IEnumerable GetPlugins() where T : class + public static IEnumerable GetPlugins() where T : IFeatures { return from p in AllPlugins where p.Plugin is T select p; } diff --git a/Wox.Core/UI/ResourceMerger.cs b/Wox.Core/UI/ResourceMerger.cs index 0e73a502ef..369eb0e46e 100644 --- a/Wox.Core/UI/ResourceMerger.cs +++ b/Wox.Core/UI/ResourceMerger.cs @@ -3,7 +3,6 @@ using System.Linq; using System.Windows; using Wox.Core.i18n; using Wox.Core.Plugin; -using Wox.Infrastructure; using Wox.Plugin; namespace Wox.Core.UI diff --git a/Wox.Plugin/Feature.cs b/Wox.Plugin/Feature.cs new file mode 100644 index 0000000000..e12ef754ef --- /dev/null +++ b/Wox.Plugin/Feature.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; + +namespace Wox.Plugin +{ + public interface IFeatures { } + + public interface IContextMenu : IFeatures + { + List LoadContextMenus(Result selectedResult); + } + + public interface IExclusiveQuery : IFeatures + { + bool IsExclusiveQuery(Query query); + } + + /// + /// Represent plugin query will be executed in UI thread directly. Don't do long-running operation in Query method if you implement this interface + /// This will improve the performance of instant search like websearch or cmd plugin + /// + public interface IInstantQuery : IFeatures + { + bool IsInstantQuery(string query); + } + + /// + /// Represent plugins that support internationalization + /// + public interface IPluginI18n : IFeatures + { + string GetLanguagesFolder(); + + string GetTranslatedPluginTitle(); + + string GetTranslatedPluginDescription(); + } +} diff --git a/Wox.Plugin/Features/IContextMenu.cs b/Wox.Plugin/Features/IContextMenu.cs index ce42446640..e6bfc927d2 100644 --- a/Wox.Plugin/Features/IContextMenu.cs +++ b/Wox.Plugin/Features/IContextMenu.cs @@ -1,9 +1,8 @@ -using System.Collections.Generic; - +using System; namespace Wox.Plugin.Features { - public interface IContextMenu - { - List LoadContextMenus(Result selectedResult); - } + [Obsolete("Delete Wox.Plugin.Features using directive, " + + "and use Wox.Plugin.Feature.IContextMenu instead, " + + "this method will be removed in v1.3.0")] + public interface IContextMenu { } } \ No newline at end of file diff --git a/Wox.Plugin/Features/IExclusiveQuery.cs b/Wox.Plugin/Features/IExclusiveQuery.cs index ad816e4bda..a433033505 100644 --- a/Wox.Plugin/Features/IExclusiveQuery.cs +++ b/Wox.Plugin/Features/IExclusiveQuery.cs @@ -1,7 +1,9 @@ -namespace Wox.Plugin.Features +using System; + +namespace Wox.Plugin.Features { - public interface IExclusiveQuery - { - bool IsExclusiveQuery(Query query); - } + [Obsolete("Delete Wox.Plugin.Features using directive, " + + "and use Wox.Plugin.Feature.IInstantQuery instead, " + + "this method will be removed in v1.3.0")] + public interface IExclusiveQuery { } } diff --git a/Wox.Plugin/Features/IInstantQuery.cs b/Wox.Plugin/Features/IInstantQuery.cs index 00044ed6c0..2fe81fad71 100644 --- a/Wox.Plugin/Features/IInstantQuery.cs +++ b/Wox.Plugin/Features/IInstantQuery.cs @@ -1,11 +1,9 @@ -namespace Wox.Plugin.Features +using System; + +namespace Wox.Plugin.Features { - /// - /// Represent plugin query will be executed in UI thread directly. Don't do long-running operation in Query method if you implement this interface - /// This will improve the performance of instant search like websearch or cmd plugin - /// - public interface IInstantQuery - { - bool IsInstantQuery(string query); - } + [Obsolete("Delete Wox.Plugin.Features using directive, " + + "and use Wox.Plugin.Feature.IInstantQuery instead, " + + "this method will be removed in v1.3.0")] + public interface IInstantQuery { } } \ No newline at end of file diff --git a/Wox.Plugin/IPluginI18n.cs b/Wox.Plugin/IPluginI18n.cs deleted file mode 100644 index f0bdad2ff5..0000000000 --- a/Wox.Plugin/IPluginI18n.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Wox.Plugin -{ - /// - /// Represent plugins that support internationalization - /// - public interface IPluginI18n - { - string GetLanguagesFolder(); - - string GetTranslatedPluginTitle(); - - string GetTranslatedPluginDescription(); - } -} \ No newline at end of file diff --git a/Wox.Plugin/Wox.Plugin.csproj b/Wox.Plugin/Wox.Plugin.csproj index 7f75332bd9..11c1b4c89b 100644 --- a/Wox.Plugin/Wox.Plugin.csproj +++ b/Wox.Plugin/Wox.Plugin.csproj @@ -40,11 +40,11 @@ + - @@ -59,6 +59,7 @@ +