Fix Result object comparison bug

This commit is contained in:
Jeremy Wu
2019-08-31 16:58:15 +10:00
parent dedac39d99
commit 909fbaab95
2 changed files with 20 additions and 21 deletions

View File

@@ -65,17 +65,13 @@ namespace Wox.Plugin
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
Result r = obj as Result; var r = obj as Result;
if (r != null)
{ var equality = string.Equals(r?.Title, Title) &&
var equality = string.Equals(r.Title, Title) && string.Equals(r?.SubTitle, SubTitle) &&
string.Equals(r.SubTitle, SubTitle); string.Equals(r?.IcoPath, IcoPath);
return equality;
} return equality;
else
{
return false;
}
} }
public override int GetHashCode() public override int GetHashCode()

View File

@@ -148,25 +148,28 @@ namespace Wox.ViewModel
private List<ResultViewModel> NewResults(List<Result> newRawResults, string resultId) private List<ResultViewModel> NewResults(List<Result> newRawResults, string resultId)
{ {
var newResults = newRawResults.Select(r => new ResultViewModel(r)).ToList();
var results = Results.ToList(); var results = Results.ToList();
var newResults = newRawResults.Select(r => new ResultViewModel(r)).ToList();
var oldResults = results.Where(r => r.Result.PluginID == resultId).ToList(); var oldResults = results.Where(r => r.Result.PluginID == resultId).ToList();
// intersection of A (old results) and B (new newResults) // Find the same results in A (old results) and B (new newResults)
var intersection = oldResults.Intersect(newResults).ToList(); 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 // 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); results.Remove(result);
} }
// update index for result in intersection of A and B // update result with B's score and index position
foreach (var commonResult in intersection) foreach (var sameResult in sameResults)
{ {
int oldIndex = results.IndexOf(commonResult); int oldIndex = results.IndexOf(sameResult);
int oldScore = results[oldIndex].Result.Score; int oldScore = results[oldIndex].Result.Score;
var newResult = newResults[newResults.IndexOf(commonResult)]; var newResult = newResults[newResults.IndexOf(sameResult)];
int newScore = newResult.Result.Score; int newScore = newResult.Result.Score;
if (newScore != oldScore) if (newScore != oldScore)
{ {
@@ -182,7 +185,7 @@ namespace Wox.ViewModel
} }
// insert result in relative complement of A in B // 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); int newIndex = InsertIndexOf(result.Result.Score, results);
results.Insert(newIndex, result); results.Insert(newIndex, result);