diff --git a/Helper/ResultHelper.cs b/Helper/ResultHelper.cs index 4fd27f9d3..724962b5c 100644 --- a/Helper/ResultHelper.cs +++ b/Helper/ResultHelper.cs @@ -8,6 +8,7 @@ using System.Diagnostics; using System.Linq; using System.Text; using Flow.Launcher.Plugin; +using Flow.Launcher.Plugin.SharedModels; using Microsoft.PowerToys.Run.Plugin.WindowsSettings.Properties; namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper @@ -17,6 +18,10 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper /// internal static class ResultHelper { + private static IPublicAPI? _api; + + public static void Init(IPublicAPI api) => _api = api; + /// /// Return a list with s, based on the given list. /// @@ -25,32 +30,64 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper /// A list with . internal static List GetResultList( in IEnumerable list, - string query, - in string iconPath) + Query query, + string iconPath) { - var resultList = new List(list.Count()); - + var resultList = new List(); foreach (var entry in list) { - var result = new Result - { - Action = (_) => DoOpenSettingsAction(entry), - IcoPath = iconPath, - SubTitle = $"{Resources.Area} \"{entry.Area}\" {Resources.SubtitlePreposition} {entry.Type}", - Title = entry.Name, - ContextData = entry, - }; + var result = Predicate(); + if (result is null) + continue; AddOptionalToolTip(entry, result); resultList.Add(result); - } - SetScores(resultList, query); + Result NewSettingResult(int score) => new Result() + { + Action = _ => DoOpenSettingsAction(entry), + IcoPath = iconPath, + SubTitle = $"{Resources.Area} \"{entry.Area}\" {Resources.SubtitlePreposition} {entry.Type}", + Title = entry.Name, + ContextData = entry, + Score = score + }; + + Result? Predicate() + { + Debug.Assert(_api != null, nameof(_api) + " != null"); + + var nameMatch = _api.FuzzySearch(query.Search, entry.Name); + + if (nameMatch.IsSearchPrecisionScoreMet()) + { + var settingResult = NewSettingResult(nameMatch.Score); + settingResult.TitleHighlightData = nameMatch.MatchData; + return settingResult; + } + + var areaMatch = _api.FuzzySearch(query.Search, entry.Area); + if (areaMatch.IsSearchPrecisionScoreMet()) + { + var settingResult = NewSettingResult(areaMatch.Score); + return settingResult; + } + + return entry.AltNames? + .Select(altName => _api.FuzzySearch(query.Search, altName)) + .Where(match => match.IsSearchPrecisionScoreMet()) + .Select(altNameMatch => NewSettingResult(altNameMatch.Score)) + .FirstOrDefault(); + + } + } return resultList; } + + /// /// Add a tool-tip to the given , based o the given . /// @@ -102,7 +139,7 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper if (command.Contains(' ')) { var commandSplit = command.Split(' '); - var file = commandSplit.FirstOrDefault(); + var file = commandSplit.First(); var arguments = command[file.Length..].TrimStart(); processStartInfo = new ProcessStartInfo(file, arguments) diff --git a/Helper/UnsupportedSettingsHelper.cs b/Helper/UnsupportedSettingsHelper.cs index 30f28a1db..a323f476d 100644 --- a/Helper/UnsupportedSettingsHelper.cs +++ b/Helper/UnsupportedSettingsHelper.cs @@ -64,7 +64,7 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings.Helper /// A registry value or on error. private static uint GetNumericRegistryValue(in string registryKey, in string valueName) { - object registryValueData; + object? registryValueData; try { diff --git a/Log.cs b/Log.cs index 090c9a737..7991f5a55 100644 --- a/Log.cs +++ b/Log.cs @@ -6,7 +6,7 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings { public static class Log { - private static IPublicAPI _api; + private static IPublicAPI? _api; public static void Init(IPublicAPI api) { @@ -14,11 +14,11 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings } public static void Exception(string message, Exception exception, Type type, [CallerMemberName] string methodName = "") { - _api.LogException(type.FullName, message, exception, methodName); + _api?.LogException(type.FullName, message, exception, methodName); } public static void Warn(string message, Type type, [CallerMemberName] string methodName = "") { - _api.LogWarn(type.FullName, message, methodName); + _api?.LogWarn(type.FullName, message, methodName); } } } diff --git a/Main.cs b/Main.cs index 4961266df..00fe2367e 100644 --- a/Main.cs +++ b/Main.cs @@ -82,6 +82,9 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings _settingsList = JsonSettingsListHelper.ReadAllPossibleSettings(); _settingsList = UnsupportedSettingsHelper.FilterByBuild(_settingsList); + Log.Init(_context.API); + ResultHelper.Init(_context.API); + TranslationHelper.TranslateAllSettings(_settingsList); } @@ -97,45 +100,11 @@ namespace Microsoft.PowerToys.Run.Plugin.WindowsSettings return new List(0); } - var filteredList = _settingsList - .Where(Predicate) - .OrderBy(found => found.Name); - var newList = ResultHelper.GetResultList(filteredList, query.Search, _defaultIconPath); + var newList = ResultHelper.GetResultList(_settingsList, query, _defaultIconPath); return newList; - bool Predicate(WindowsSetting found) - { - if (found.Name.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) - { - return true; - } - - // Search for Area only by key char - if (found.Area.Contains(query.Search.Replace(":", string.Empty), StringComparison.CurrentCultureIgnoreCase) - && query.Search.EndsWith(":")) - { - return true; - } - - if (found.Area.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) - { - return true; - } - - if (found.AltNames is not null) - { - foreach (var altName in found.AltNames) - { - if (altName.Contains(query.Search, StringComparison.CurrentCultureIgnoreCase)) - { - return true; - } - } - } - - return false; - } + } ///