Browse Source

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.
softworkz 10 years ago
parent
commit
57fd2ed0f8
1 changed files with 11 additions and 3 deletions
  1. 11 3
      MediaBrowser.Providers/Manager/ProviderManager.cs

+ 11 - 3
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -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 new List<RemoteSearchResult>();
+            return resultList;
         }
         }
 
 
         private async Task<IEnumerable<RemoteSearchResult>> GetSearchResults<TLookupType>(IRemoteSearchProvider<TLookupType> provider, TLookupType searchInfo,
         private async Task<IEnumerable<RemoteSearchResult>> GetSearchResults<TLookupType>(IRemoteSearchProvider<TLookupType> provider, TLookupType searchInfo,