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;
- }
+
}
///