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(); + } } }