public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken) { var results = new Dictionary <string, RemoteSearchResult>(); var aid = searchInfo.ProviderIds.GetOrDefault(ProviderNames.AniList); if (!string.IsNullOrEmpty(aid)) { var anime = await _api.GetAnime(aid); if (anime != null && !results.ContainsKey(aid)) { results.Add(aid, ToSearchResult(anime)); } } if (!string.IsNullOrEmpty(searchInfo.Name)) { var search = await _api.Search(searchInfo.Name); foreach (var a in search) { if (!results.ContainsKey(a.id.ToString())) { results.Add(a.id.ToString(), ToSearchResult(a)); } } var cleaned = AniDbTitleMatcher.GetComparableName(searchInfo.Name); if (String.Compare(cleaned, searchInfo.Name, StringComparison.OrdinalIgnoreCase) != 0) { search = await _api.Search(cleaned); foreach (var a in search) { if (!results.ContainsKey(a.id.ToString())) { results.Add(a.id.ToString(), ToSearchResult(a)); } } } } return(results.Values); }
public async Task Identify(SeriesInfo info) { if (!string.IsNullOrEmpty(info.ProviderIds.GetOrDefault(ProviderNames.AniList)) && !Plugin.Instance.CheckForceRefreshFlag()) { return; } if (string.IsNullOrEmpty(info.Name)) { return; } try { var search = await _api.Search(info.Name); var cleaned = AniDbTitleMatcher.GetComparableName(info.Name); if (!search.Any() && String.Compare(info.Name, cleaned, StringComparison.OrdinalIgnoreCase) != 0) { search = await _api.Search(cleaned); } var first = search.FirstOrDefault(); if (first == null) { return; } info.ProviderIds.Remove(ProviderNames.AniList); info.ProviderIds.Add(ProviderNames.AniList, first.id.ToString()); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); // ignore } }
public async Task <MetadataResult <Series> > GetMetadata(SeriesInfo info, CancellationToken cancellationToken) { var result = new MetadataResult <Series>(); var aid = info.ProviderIds.GetOrDefault(ProviderNames.AniList); if (string.IsNullOrEmpty(aid) && !string.IsNullOrEmpty(info.Name)) { var search = await _api.Search(info.Name); foreach (var a in search) { if (string.IsNullOrEmpty(aid)) { if (Equals_check.Compare_strings(a.title_english, info.Name)) { aid = a.id.ToString(); } if (Equals_check.Compare_strings(a.title_japanese, info.Name)) { aid = a.id.ToString(); } if (Equals_check.Compare_strings(a.title_romaji, info.Name)) { aid = a.id.ToString(); } _log.Log(LogSeverity.Info, a.title_romaji + "vs" + info.Name); } } if (string.IsNullOrEmpty(aid)) { var cleaned = AniDbTitleMatcher.GetComparableName(Equals_check.clear_name(info.Name)); if (String.Compare(cleaned, info.Name, StringComparison.OrdinalIgnoreCase) != 0) { search = await _api.Search(cleaned); foreach (var b in search) { if (Equals_check.Compare_strings(b.title_english, info.Name)) { aid = b.id.ToString(); } if (Equals_check.Compare_strings(b.title_japanese, info.Name)) { aid = b.id.ToString(); } if (Equals_check.Compare_strings(b.title_romaji, info.Name)) { aid = b.id.ToString(); } } } } if (string.IsNullOrEmpty(aid)) { search = await _api.Search(Equals_check.clear_name(info.Name)); foreach (var b in search) { if (Equals_check.Compare_strings(b.title_english, info.Name)) { aid = b.id.ToString(); } if (Equals_check.Compare_strings(b.title_japanese, info.Name)) { aid = b.id.ToString(); } if (Equals_check.Compare_strings(b.title_romaji, info.Name)) { aid = b.id.ToString(); } } } } if (!string.IsNullOrEmpty(aid)) { result.Item = new Series(); result.HasMetadata = true; result.Item.ProviderIds.Add(ProviderNames.AniList, aid); var anime = await _api.GetAnime(aid); result.Item.Name = SelectName(anime, Plugin.Instance.Configuration.TitlePreference, info.MetadataLanguage ?? "en"); result.Item.Overview = anime.description; DateTime start; if (DateTime.TryParse(anime.start_date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out start)) { result.Item.PremiereDate = start; } DateTime end; if (DateTime.TryParse(anime.end_date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out end)) { result.Item.EndDate = end; } if (anime.genres != null) { foreach (var genre in anime.genres) { if (!string.IsNullOrEmpty(genre)) { result.Item.AddGenre(genre); } } GenreHelper.CleanupGenres(result.Item); } if (!string.IsNullOrEmpty(anime.image_url_lge)) { StoreImageUrl(aid, anime.image_url_lge, "image"); } if (!string.IsNullOrEmpty(anime.image_url_banner)) { StoreImageUrl(aid, anime.image_url_banner, "banner"); } if (string.IsNullOrEmpty(result.Item.Name)) { if (!string.IsNullOrEmpty(anime.title_romaji)) { result.Item.Name = anime.title_romaji; } } } return(result); }