From a1db7a8f1ed0acf43d97143c33249e5e9ccd1784 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 30 Jan 2021 22:47:06 -0500 Subject: [PATCH] Fixed: Sorting in Interactive search duplicates results Fixes #5760 Fixes #5765 Co-Authored-By: Mark McDowall Co-Authored-By: Taloth --- src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs index 2dabe59fa..179b8dabe 100644 --- a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs @@ -56,9 +56,14 @@ namespace NzbDrone.Core.IndexerSearch 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 @@ namespace NzbDrone.Core.IndexerSearch 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(); + } } }