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)) { return(result); } 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, PluginConfiguration.Instance().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) { result.Item.AddGenre(genre); } GenreHelper.CleanupGenres(result.Item); GenreHelper.RemoveDuplicateTags(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"); } } return(result); }
private void FetchSeriesInfo(MetadataResult <Series> result, string seriesDataPath, string preferredMetadataLangauge) { var series = result.Item; var settings = new XmlReaderSettings { CheckCharacters = false, IgnoreProcessingInstructions = true, IgnoreComments = true, ValidationType = ValidationType.None }; using (var streamReader = File.Open(seriesDataPath, FileMode.Open, FileAccess.Read)) using (var reader = XmlReader.Create(streamReader, settings)) { reader.MoveToContent(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "startdate": var val = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(val)) { DateTime date; if (DateTime.TryParse(val, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out date)) { date = date.ToUniversalTime(); series.PremiereDate = date; } } break; case "enddate": var endDate = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(endDate)) { DateTime date; if (DateTime.TryParse(endDate, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out date)) { date = date.ToUniversalTime(); series.EndDate = date; } } break; case "titles": using (var subtree = reader.ReadSubtree()) { var title = ParseTitle(subtree, preferredMetadataLangauge); if (!string.IsNullOrEmpty(title)) { series.Name = title; } } break; case "creators": using (var subtree = reader.ReadSubtree()) { ParseCreators(result, subtree); } break; case "description": series.Overview = ReplaceLineFeedWithNewLine(StripAniDbLinks(reader.ReadElementContentAsString())); break; case "ratings": using (var subtree = reader.ReadSubtree()) { ParseRatings(series, subtree); } break; case "resources": using (var subtree = reader.ReadSubtree()) { ParseResources(series, subtree); } break; case "characters": using (var subtree = reader.ReadSubtree()) { ParseActors(result, subtree); } break; case "tags": using (var subtree = reader.ReadSubtree()) { } break; case "categories": using (var subtree = reader.ReadSubtree()) { ParseCategories(series, subtree); } break; case "episodes": using (var subtree = reader.ReadSubtree()) { ParseEpisodes(series, subtree); } break; } } } } GenreHelper.CleanupGenres(series); GenreHelper.RemoveDuplicateTags(series); }