diff --git a/Flow.Launcher.Plugin/SharedModels/MatchResult.cs b/Flow.Launcher.Plugin/SharedModels/MatchResult.cs index 36677d4bb..a48347034 100644 --- a/Flow.Launcher.Plugin/SharedModels/MatchResult.cs +++ b/Flow.Launcher.Plugin/SharedModels/MatchResult.cs @@ -41,7 +41,7 @@ namespace Flow.Launcher.Plugin.SharedModels /// /// 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 e9515fab4..7ffd5b5dc 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj +++ b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj @@ -62,6 +62,7 @@ + diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 6c7ff1dc1..2492e87d4 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -91,12 +91,26 @@ namespace Flow.Launcher.Plugin.Program.Programs 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 @@ namespace Flow.Launcher.Plugin.Program.Programs { 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 @@ namespace Flow.Launcher.Plugin.Program.Programs } } + // 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() && !string.IsNullOrEmpty(query))