Fixed: (Search) Releases deduplication

pull/1880/head v1.9.1.3981
Bogdan 8 months ago
parent d4b037db78
commit 9625be723d

@ -67,7 +67,9 @@ namespace NzbDrone.Core.IndexerSearch
searchSpec.Year = request.year;
searchSpec.Genre = request.genre;
return new NewznabResults { Releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) };
var releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec);
return new NewznabResults { Releases = DeDupeReleases(releases) };
}
private async Task<NewznabResults> MusicSearch(NewznabRequest request, List<int> indexerIds, bool interactiveSearch)
@ -81,7 +83,9 @@ namespace NzbDrone.Core.IndexerSearch
searchSpec.Track = request.track;
searchSpec.Year = request.year;
return new NewznabResults { Releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) };
var releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec);
return new NewznabResults { Releases = DeDupeReleases(releases) };
}
private async Task<NewznabResults> TvSearch(NewznabRequest request, List<int> indexerIds, bool interactiveSearch)
@ -102,7 +106,9 @@ namespace NzbDrone.Core.IndexerSearch
searchSpec.Year = request.year;
searchSpec.Genre = request.genre;
return new NewznabResults { Releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) };
var releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec);
return new NewznabResults { Releases = DeDupeReleases(releases) };
}
private async Task<NewznabResults> BookSearch(NewznabRequest request, List<int> indexerIds, bool interactiveSearch)
@ -115,14 +121,18 @@ namespace NzbDrone.Core.IndexerSearch
searchSpec.Year = request.year;
searchSpec.Genre = request.genre;
return new NewznabResults { Releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) };
var releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec);
return new NewznabResults { Releases = DeDupeReleases(releases) };
}
private async Task<NewznabResults> BasicSearch(NewznabRequest request, List<int> indexerIds, bool interactiveSearch)
{
var searchSpec = Get<BasicSearchCriteria>(request, indexerIds, interactiveSearch);
return new NewznabResults { Releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec) };
var releases = await Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec);
return new NewznabResults { Releases = DeDupeReleases(releases) };
}
private TSpec Get<TSpec>(NewznabRequest query, List<int> indexerIds, bool interactiveSearch)
@ -265,5 +275,13 @@ namespace NzbDrone.Core.IndexerSearch
return Array.Empty<ReleaseInfo>();
}
private List<ReleaseInfo> DeDupeReleases(IList<ReleaseInfo> releases)
{
// De-dupe reports by guid so duplicate results aren't returned. Pick the one with the higher indexer priority.
return releases.GroupBy(r => r.Guid)
.Select(r => r.OrderBy(v => v.IndexerPriority).First())
.ToList();
}
}
}

Loading…
Cancel
Save