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