From dcb9e34d59a6b57afae2c1da0966459a157c9750 Mon Sep 17 00:00:00 2001 From: AT <14300910+theClueless@users.noreply.github.com> Date: Sat, 16 Nov 2019 00:34:27 +0200 Subject: [PATCH 1/2] alphabet settings --- Wox.Infrastructure/Alphabet.cs | 27 ++++++++++++++++++--- Wox.Infrastructure/UserSettings/Settings.cs | 5 ++++ Wox/App.xaml.cs | 3 ++- Wox/Languages/en.xaml | 1 + Wox/SettingWindow.xaml | 3 +++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/Wox.Infrastructure/Alphabet.cs b/Wox.Infrastructure/Alphabet.cs index 157d1c9f1fc4..91979bf52697 100644 --- a/Wox.Infrastructure/Alphabet.cs +++ b/Wox.Infrastructure/Alphabet.cs @@ -6,6 +6,7 @@ using hyjiacan.util.p4n.format; using Wox.Infrastructure.Logger; using Wox.Infrastructure.Storage; +using Wox.Infrastructure.UserSettings; namespace Wox.Infrastructure { @@ -14,9 +15,11 @@ public static class Alphabet private static readonly HanyuPinyinOutputFormat Format = new HanyuPinyinOutputFormat(); private static ConcurrentDictionary PinyinCache; private static BinaryStorage> _pinyinStorage; + private static Settings _settings; - public static void Initialize() + public static void Initialize(Settings settings) { + _settings = settings; Format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); Stopwatch.Normal("|Wox.Infrastructure.Alphabet.Initialize|Preload pinyin cache", () => @@ -34,12 +37,20 @@ public static void Save() _pinyinStorage.Save(PinyinCache); } + private static string[] EmptyStringArray = new string[0]; + private static string[][] Empty2DStringArray = new string[0][]; + /// /// replace chinese character with pinyin, non chinese character won't be modified /// should be word or sentence, instead of single character. e.g. 微软 /// public static string[] Pinyin(string word) { + if (!_settings.ShouldUsePinyin) + { + return EmptyStringArray; + } + var pinyin = word.Select(c => { var pinyins = PinyinHelper.toHanyuPinyinStringArray(c); @@ -57,7 +68,7 @@ public static string[] Pinyin(string word) /// public static string[][] PinyinComination(string characters) { - if (!string.IsNullOrEmpty(characters)) + if (_settings.ShouldUsePinyin && !string.IsNullOrEmpty(characters)) { if (!PinyinCache.ContainsKey(characters)) { @@ -89,7 +100,7 @@ public static string[][] PinyinComination(string characters) } else { - return new string[][] { }; + return Empty2DStringArray; } } @@ -101,6 +112,11 @@ public static string Acronym(string[] pinyin) public static bool ContainsChinese(string word) { + if (!_settings.ShouldUsePinyin) + { + return false; + } + var chinese = word.Select(PinyinHelper.toHanyuPinyinStringArray) .Any(p => p != null); return chinese; @@ -108,6 +124,11 @@ public static bool ContainsChinese(string word) private static string[] Combination(string[] array1, string[] array2) { + if (!_settings.ShouldUsePinyin) + { + return EmptyStringArray; + } + var combination = ( from a1 in array1 from a2 in array2 diff --git a/Wox.Infrastructure/UserSettings/Settings.cs b/Wox.Infrastructure/UserSettings/Settings.cs index 75f43935751c..7371ea5d0565 100644 --- a/Wox.Infrastructure/UserSettings/Settings.cs +++ b/Wox.Infrastructure/UserSettings/Settings.cs @@ -21,6 +21,11 @@ public class Settings : BaseModel public string ResultFontWeight { get; set; } public string ResultFontStretch { get; set; } + /// + /// when false Alphabet static service will always return empty results + /// + public bool ShouldUsePinyin { get; set; } = true; + private string _querySearchPrecision { get; set; } = StringMatcher.SearchPrecisionScore.Regular.ToString(); public string QuerySearchPrecision { diff --git a/Wox/App.xaml.cs b/Wox/App.xaml.cs index b66549b38a94..0ec1614bf9af 100644 --- a/Wox/App.xaml.cs +++ b/Wox/App.xaml.cs @@ -49,11 +49,12 @@ private void OnStartup(object sender, StartupEventArgs e) RegisterDispatcherUnhandledException(); ImageLoader.Initialize(); - Alphabet.Initialize(); _settingsVM = new SettingWindowViewModel(); _settings = _settingsVM.Settings; + Alphabet.Initialize(_settings); + StringMatcher.UserSettingSearchPrecision = _settings.QuerySearchPrecision; PluginManager.LoadPlugins(_settings.PluginSettings); diff --git a/Wox/Languages/en.xaml b/Wox/Languages/en.xaml index ae8041121cb4..dca044dc11ce 100644 --- a/Wox/Languages/en.xaml +++ b/Wox/Languages/en.xaml @@ -34,6 +34,7 @@ Hide Wox on startup Hide tray icon Query Search Precision + Should Use Pinyin Plugin diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index 86d6a345a99d..9a5146c7ee05 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -55,6 +55,9 @@ Checked="OnAutoStartupChecked" Unchecked="OnAutoStartupUncheck"> + + + Date: Sat, 16 Nov 2019 01:28:07 +0200 Subject: [PATCH 2/2] added log into Alphabet service since it can induce a large perf hit --- Wox.Infrastructure/Alphabet.cs | 6 ++++++ Wox.Infrastructure/StringMatcher.cs | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Wox.Infrastructure/Alphabet.cs b/Wox.Infrastructure/Alphabet.cs index 91979bf52697..d7fae882cbcc 100644 --- a/Wox.Infrastructure/Alphabet.cs +++ b/Wox.Infrastructure/Alphabet.cs @@ -117,6 +117,12 @@ public static bool ContainsChinese(string word) return false; } + if (word.Length > 40) + { + Log.Debug($"|Wox.Infrastructure.StringMatcher.ScoreForPinyin|skip too long string: {word}"); + return false; + } + var chinese = word.Select(PinyinHelper.toHanyuPinyinStringArray) .Any(p => p != null); return chinese; diff --git a/Wox.Infrastructure/StringMatcher.cs b/Wox.Infrastructure/StringMatcher.cs index 9c49b4119b29..5b82b18918f0 100644 --- a/Wox.Infrastructure/StringMatcher.cs +++ b/Wox.Infrastructure/StringMatcher.cs @@ -131,12 +131,6 @@ public static int ScoreForPinyin(string source, string target) { if (!string.IsNullOrEmpty(source) && !string.IsNullOrEmpty(target)) { - if(source.Length > 40) - { - Log.Debug($"|Wox.Infrastructure.StringMatcher.ScoreForPinyin|skip too long string: {source}"); - return 0; - } - if (Alphabet.ContainsChinese(source)) { var combination = Alphabet.PinyinComination(source);