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
This commit is contained in:
parent
9f1a8d1dc3
commit
8a99144df7
|
@ -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; }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user