diff --git a/Wox.Plugin/Result.cs b/Wox.Plugin/Result.cs index cdeabbdc24..88b8679f24 100644 --- a/Wox.Plugin/Result.cs +++ b/Wox.Plugin/Result.cs @@ -65,17 +65,13 @@ namespace Wox.Plugin public override bool Equals(object obj) { - Result r = obj as Result; - if (r != null) - { - var equality = string.Equals(r.Title, Title) && - string.Equals(r.SubTitle, SubTitle); - return equality; - } - else - { - return false; - } + var r = obj as Result; + + var equality = string.Equals(r?.Title, Title) && + string.Equals(r?.SubTitle, SubTitle) && + string.Equals(r?.IcoPath, IcoPath); + + return equality; } public override int GetHashCode() diff --git a/Wox/ViewModel/ResultsViewModel.cs b/Wox/ViewModel/ResultsViewModel.cs index a92b84930f..674923228e 100644 --- a/Wox/ViewModel/ResultsViewModel.cs +++ b/Wox/ViewModel/ResultsViewModel.cs @@ -148,25 +148,28 @@ namespace Wox.ViewModel private List NewResults(List newRawResults, string resultId) { - var newResults = newRawResults.Select(r => new ResultViewModel(r)).ToList(); var results = Results.ToList(); + var newResults = newRawResults.Select(r => new ResultViewModel(r)).ToList(); var oldResults = results.Where(r => r.Result.PluginID == resultId).ToList(); - // intersection of A (old results) and B (new newResults) - var intersection = oldResults.Intersect(newResults).ToList(); - + // Find the same results in A (old results) and B (new newResults) + var sameResults = oldResults + .Where(t1 => newResults.Any(x => x.Result.Equals(t1.Result))) + .Select(t1 => t1) + .ToList(); + // remove result of relative complement of B in A - foreach (var result in oldResults.Except(intersection)) + foreach (var result in oldResults.Except(sameResults)) { results.Remove(result); } - // update index for result in intersection of A and B - foreach (var commonResult in intersection) + // update result with B's score and index position + foreach (var sameResult in sameResults) { - int oldIndex = results.IndexOf(commonResult); + int oldIndex = results.IndexOf(sameResult); int oldScore = results[oldIndex].Result.Score; - var newResult = newResults[newResults.IndexOf(commonResult)]; + var newResult = newResults[newResults.IndexOf(sameResult)]; int newScore = newResult.Result.Score; if (newScore != oldScore) { @@ -182,7 +185,7 @@ namespace Wox.ViewModel } // insert result in relative complement of A in B - foreach (var result in newResults.Except(intersection)) + foreach (var result in newResults.Except(sameResults)) { int newIndex = InsertIndexOf(result.Result.Score, results); results.Insert(newIndex, result);