public Task<IEnumerable<RemoteSearchResult>> GetMovieSearchResults(ItemLookupInfo idInfo, CancellationToken cancellationToken) { return GetSearchResults(idInfo, "movie", cancellationToken); }
private async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ItemLookupInfo idInfo, string searchType, CancellationToken cancellationToken) { var name = idInfo.Name; var year = idInfo.Year; int? yearInName = null; var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); var tmdbImageUrl = tmdbSettings.images.base_url + "original"; NameParser.ParseName(name, out name, out yearInName); year = year ?? yearInName; _logger.Info("MovieDbProvider: Finding id for item: " + name); var language = idInfo.MetadataLanguage.ToLower(); //nope - search for it //var searchType = item is BoxSet ? "collection" : "movie"; var results = await GetSearchResults(name, searchType, year, language, tmdbImageUrl, cancellationToken).ConfigureAwait(false); if (results.Count == 0) { //try in english if wasn't before if (!string.Equals(language, "en", StringComparison.OrdinalIgnoreCase)) { results = await GetSearchResults(name, searchType, year, "en", tmdbImageUrl, cancellationToken).ConfigureAwait(false); } } if (results.Count == 0) { // try with dot and _ turned to space var originalName = name; name = name.Replace(",", " "); name = name.Replace(".", " "); name = name.Replace("_", " "); name = name.Replace("-", " "); name = name.Replace("!", " "); name = name.Replace("?", " "); name = name.Trim(); // Search again if the new name is different if (!string.Equals(name, originalName)) { results = await GetSearchResults(name, searchType, year, language, tmdbImageUrl, cancellationToken).ConfigureAwait(false); if (results.Count == 0 && !string.Equals(language, "en", StringComparison.OrdinalIgnoreCase)) { //one more time, in english results = await GetSearchResults(name, searchType, year, "en", tmdbImageUrl, cancellationToken).ConfigureAwait(false); } } } return results.Where(i => { if (year.HasValue && i.ProductionYear.HasValue) { return year.Value == i.ProductionYear.Value; } return true; }); }
private void FillLookupData(ItemLookupInfo lookupInfo, IHasMetadata item, MetadataRawTable table) { var propInfos = GetItemProperties(lookupInfo.GetType()); var name = lookupInfo.Name; if (lookupInfo.Year.HasValue) { name = string.Format("{0} ({1})", name, lookupInfo.Year.Value); } table.LookupData.Add(new KeyValuePair<string, object>("Name", name)); foreach (var propInfo in propInfos) { switch (propInfo.Name) { case "ProviderIds": table.LookupData.Add(new KeyValuePair<string, object>(propInfo.Name, FlattenProviderIds(lookupInfo.ProviderIds, item, ", "))); break; case "SeriesProviderIds": var seasonInfo = lookupInfo as SeasonInfo; if (seasonInfo != null) { table.LookupData.Add(new KeyValuePair<string, object>(propInfo.Name, FlattenProviderIds(seasonInfo.SeriesProviderIds, new Series(), ", "))); } var episodeInfo = lookupInfo as EpisodeInfo; if (episodeInfo != null) { table.LookupData.Add(new KeyValuePair<string, object>(propInfo.Name, FlattenProviderIds(episodeInfo.SeriesProviderIds, new Series(), ", "))); } break; case "Name": case "Year": case "IsAutomated": case "MetadataCountryCode": break; default: var value = propInfo.GetValue(lookupInfo); if (value != null) { if (propInfo.PropertyType == typeof(DateTime?)) { DateTime? dateValue = (DateTime?)value; table.LookupData.Add(new KeyValuePair<string, object>(propInfo.Name, dateValue.Value.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern))); } else { table.LookupData.Add(new KeyValuePair<string, object>(propInfo.Name, value)); } } break; } } }