From 28c7f30971f9fc88443787ef0f05177a38845fad Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 4 Jun 2022 18:31:47 -0500 Subject: [PATCH] Fixed: Sorting in Interactive search duplicates results Fixes #1906 Fixes #1911 Co-Authored-By: Mark McDowall --- .../IndexerSearch/NzbSearchService.cs | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs index ffd51c6ba..89ff4e779 100644 --- a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs @@ -55,6 +55,8 @@ namespace NzbDrone.Core.IndexerSearch public List ArtistSearch(Artist artist, bool missingOnly, bool userInvokedSearch, bool interactiveSearch) { + var downloadDecisions = new List(); + var searchSpec = Get(artist, userInvokedSearch, interactiveSearch); var albums = _albumService.GetAlbumsByArtist(artist.Id); @@ -62,11 +64,16 @@ namespace NzbDrone.Core.IndexerSearch searchSpec.Albums = albums; - return Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec); + var decisions = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec); + downloadDecisions.AddRange(decisions); + + return DeDupeDecisions(downloadDecisions); } public List AlbumSearch(Album album, bool missingOnly, bool userInvokedSearch, bool interactiveSearch) { + var downloadDecisions = new List(); + var artist = _artistService.GetArtist(album.ArtistId); var searchSpec = Get(artist, new List { album }, userInvokedSearch, interactiveSearch); @@ -82,7 +89,10 @@ namespace NzbDrone.Core.IndexerSearch searchSpec.Disambiguation = album.Disambiguation; } - return Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec); + var decisions = Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec); + downloadDecisions.AddRange(decisions); + + return DeDupeDecisions(downloadDecisions); } private TSpec Get(Artist artist, List albums, bool userInvokedSearch, bool interactiveSearch) @@ -150,5 +160,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. + return decisions.DistinctBy(d => d.RemoteAlbum.Release.Guid).ToList(); + } } }