瀏覽代碼

OmdbItemProvider: Use search instead of title API

In my configuration, the Omdb provider is the first in the list for
movie metadata. This was the default at the time I installed MB and I
never changed that (don't know what the current defaults are for a new
installation).
When I use the identify command for movies in the metadata editor, I
always get a single result only. This is due to the fact that the Omdb
provider used the title API with "t=moviename", while there is also a
search api with "s=moviename" which will return multiple results.

This commit modifies the OmdbItemProvider to use the search API variant
and enable returning multiple results
softworkz 9 年之前
父節點
當前提交
8a99144df7
共有 1 個文件被更改,包括 32 次插入4 次删除
  1. 32 4
      MediaBrowser.Providers/Omdb/OmdbItemProvider.cs

+ 32 - 4
MediaBrowser.Providers/Omdb/OmdbItemProvider.cs

@@ -59,6 +59,8 @@ namespace MediaBrowser.Providers.Omdb
 
 
         public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ItemLookupInfo searchInfo, string type, CancellationToken cancellationToken)
         public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ItemLookupInfo searchInfo, string type, CancellationToken cancellationToken)
         {
         {
+            bool isSearch = false;
+
             var list = new List<RemoteSearchResult>();
             var list = new List<RemoteSearchResult>();
 
 
             var imdbId = searchInfo.GetProviderId(MetadataProviders.Imdb);
             var imdbId = searchInfo.GetProviderId(MetadataProviders.Imdb);
@@ -75,7 +77,7 @@ namespace MediaBrowser.Providers.Omdb
                 name = parsedName.Name;
                 name = parsedName.Name;
                 year = year ?? yearInName;
                 year = year ?? yearInName;
             }
             }
-            
+
             if (string.IsNullOrWhiteSpace(imdbId))
             if (string.IsNullOrWhiteSpace(imdbId))
             {
             {
                 if (year.HasValue)
                 if (year.HasValue)
@@ -83,8 +85,10 @@ namespace MediaBrowser.Providers.Omdb
                     url += "&y=" + year.Value.ToString(CultureInfo.InvariantCulture);
                     url += "&y=" + year.Value.ToString(CultureInfo.InvariantCulture);
                 }
                 }
 
 
-                url += "&t=" + WebUtility.UrlEncode(name);
+                // &s means search and returns a list of results as opposed to t
+                url += "&s=" + WebUtility.UrlEncode(name);
                 url += "&type=" + type;
                 url += "&type=" + type;
+                isSearch = true;
             }
             }
             else
             else
             {
             {
@@ -101,9 +105,23 @@ namespace MediaBrowser.Providers.Omdb
 
 
             }).ConfigureAwait(false))
             }).ConfigureAwait(false))
             {
             {
-                var result = _jsonSerializer.DeserializeFromStream<SearchResult>(stream);
+                var resultList = new List<SearchResult>();
 
 
-                if (string.Equals(result.Response, "true", StringComparison.OrdinalIgnoreCase))
+                if (isSearch)
+                {
+                    var searchResultList = _jsonSerializer.DeserializeFromStream<SearchResultList>(stream);
+                    resultList.AddRange(searchResultList.Search);
+                }
+                else
+                {
+                    var result = _jsonSerializer.DeserializeFromStream<SearchResult>(stream);
+                    if (string.Equals(result.Response, "true", StringComparison.OrdinalIgnoreCase))
+                    {
+                        resultList.Add(result);
+                    }
+                }
+
+                foreach (var result in resultList)
                 {
                 {
                     var item = new RemoteSearchResult();
                     var item = new RemoteSearchResult();
 
 
@@ -264,5 +282,15 @@ namespace MediaBrowser.Providers.Omdb
             public string Type { get; set; }
             public string Type { get; set; }
             public string Response { get; set; }
             public string Response { get; set; }
         }
         }
+
+        private class SearchResultList
+        {
+            /// <summary>
+            /// Gets or sets the results.
+            /// </summary>
+            /// <value>The results.</value>
+            public List<SearchResult> Search { get; set; }
+        }
+
     }
     }
 }
 }