Remote-Search: Allow result aggregation of multiple providers

Previously, when a remote search (without provider restriction) was
executed, the search used results from the first provider that returned
at least a single result only. Other providers are ignored.

This commit changes the behaviour in a way that all available providers
are queried until a certain number of search results has been collected.
The number is hardcoded to 10 (like it was before), but could be
parametrized in the future.
This commit is contained in:
softworkz 2015-10-01 02:36:46 +02:00
parent 9f1a8d1dc3
commit 57fd2ed0f8

View File

@ -727,6 +727,8 @@ namespace MediaBrowser.Providers.Manager
where TItemType : BaseItem, new() where TItemType : BaseItem, new()
where TLookupType : ItemLookupInfo where TLookupType : ItemLookupInfo
{ {
const int maxResults = 10;
// Give it a dummy path just so that it looks like a file system item // Give it a dummy path just so that it looks like a file system item
var dummy = new TItemType var dummy = new TItemType
{ {
@ -755,6 +757,8 @@ namespace MediaBrowser.Providers.Manager
searchInfo.SearchInfo.MetadataCountryCode = ConfigurationManager.Configuration.MetadataCountryCode; searchInfo.SearchInfo.MetadataCountryCode = ConfigurationManager.Configuration.MetadataCountryCode;
} }
var resultList = new List<RemoteSearchResult>();
foreach (var provider in providers) foreach (var provider in providers)
{ {
try try
@ -765,7 +769,12 @@ namespace MediaBrowser.Providers.Manager
if (list.Count > 0) if (list.Count > 0)
{ {
return list.Take(10); resultList.AddRange(list.Take(maxResults - resultList.Count));
}
if (resultList.Count >= maxResults)
{
return resultList;
} }
} }
catch (Exception ex) catch (Exception ex)
@ -774,8 +783,7 @@ namespace MediaBrowser.Providers.Manager
} }
} }
// Nothing found return resultList;
return new List<RemoteSearchResult>();
} }
private async Task<IEnumerable<RemoteSearchResult>> GetSearchResults<TLookupType>(IRemoteSearchProvider<TLookupType> provider, TLookupType searchInfo, private async Task<IEnumerable<RemoteSearchResult>> GetSearchResults<TLookupType>(IRemoteSearchProvider<TLookupType> provider, TLookupType searchInfo,