diff --git a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs index 2dabe59fa38..179b8dabe75 100644 --- a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs @@ -56,9 +56,14 @@ public List MovieSearch(int movieId, bool userInvokedSearch, b public List MovieSearch(Movie movie, bool userInvokedSearch, bool interactiveSearch) { + var downloadDecisions = new List(); + var searchSpec = Get(movie, userInvokedSearch, interactiveSearch); - return Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec); + var decisions = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec); + downloadDecisions.AddRange(decisions); + + return DeDupeDecisions(downloadDecisions); } private TSpec Get(Movie movie, bool userInvokedSearch, bool interactiveSearch) @@ -132,5 +137,11 @@ private List Dispatch(Func> return _makeDownloadDecision.GetSearchDecision(reports, criteriaBase).ToList(); } + + private List DeDupeDecisions(List decisions) + { + // De-dupe reports by guid so duplicate results aren't returned. Pick the one with the least rejections. + return decisions.GroupBy(d => d.RemoteMovie.Release.Guid).Select(d => d.OrderBy(v => v.Rejections.Count()).First()).ToList(); + } } }