diff --git a/Flow.Launcher.Plugin/SharedModels/MatchResult.cs b/Flow.Launcher.Plugin/SharedModels/MatchResult.cs index 36677d4bb29..a48347034b4 100644 --- a/Flow.Launcher.Plugin/SharedModels/MatchResult.cs +++ b/Flow.Launcher.Plugin/SharedModels/MatchResult.cs @@ -41,7 +41,7 @@ public MatchResult(bool success, SearchPrecisionScore searchPrecision, List /// /// The final score of the match result with search precision filters applied. /// - public int Score { get; private set; } + public int Score { get; set; } /// /// The raw calculated search score without any search precision filtering applied. diff --git a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj index 99c1a12e9b3..3061c3c3243 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj +++ b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj @@ -63,6 +63,7 @@ + diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index a87b002d414..1c1ea078b1b 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -91,12 +91,26 @@ private static MatchResult Match(string query, IReadOnlyCollection candi if (candidates.Count == 0) return null; - var match = candidates.Select(candidate => Main.Context.API.FuzzySearch(query, candidate)) + var match = candidates.Select(candidate => + { + var matchResult = Main.Context.API.FuzzySearch(query, candidate); + matchResult.Score = FuzzySearch(query, candidate); + return matchResult; + }) .MaxBy(match => match.Score); return match?.IsSearchPrecisionScoreMet() ?? false ? match : null; } + private static int FuzzySearch(string query, string stringToCompare) + { + var newScore = FuzzySharp.Fuzz.PartialTokenSetRatio(query.ToLower(), stringToCompare.ToLower()); + if (stringToCompare.Length < query.Length) + newScore = 0; + + return newScore; + } + public Result Result(string query, IPublicAPI api) { string title; @@ -112,13 +126,16 @@ public Result Result(string query, IPublicAPI api) { title = resultName; matchResult = Main.Context.API.FuzzySearch(query, resultName); + matchResult.Score = FuzzySearch(query, resultName); } else { // Search in both title = $"{resultName}: {Description}"; var nameMatch = Main.Context.API.FuzzySearch(query, resultName); + nameMatch.Score = FuzzySearch(query, resultName); var descriptionMatch = Main.Context.API.FuzzySearch(query, Description); + descriptionMatch.Score = FuzzySearch(query, Description); if (descriptionMatch.Score > nameMatch.Score) { for (int i = 0; i < descriptionMatch.MatchData.Count; i++) @@ -134,6 +151,31 @@ public Result Result(string query, IPublicAPI api) } } + // if (!matchResult.IsSearchPrecisionScoreMet()) + // { + // if (ExecutableName != null) // only lnk program will need this one + // matchResult = StringMatcher.FuzzySearch(query, ExecutableName); + // + // if (!matchResult.IsSearchPrecisionScoreMet()) + // return null; + // + // matchResult.MatchData = new List(); + // } + + /*var newScore = FuzzySharp.Fuzz.PartialTokenSetRatio(query.ToLower(), Name.ToLower()); + if (Name.Length < query.Length) + newScore = 0; + + var oldScore = matchResult.RawScore; + matchResult.RawScore = Math.Max(newScore, oldScore); + matchResult.RawScore *= 10; // Bypass the SearchPrecisionScore and related tests + matchResult.MatchData = new List(); + + var result = new Result + { + Title = title + $"<{matchResult.Score}> <{newScore}> <{oldScore}>", + SubTitle = LnkResolvedPath ?? FullPath,*/ + List candidates = new List(); if (!matchResult.IsSearchPrecisionScoreMet())