using System; using System.Xml; using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using Microsoft.Extensions.Logging; namespace MediaBrowser.XbmcMetadata.Parsers { public class SeriesNfoParser : BaseNfoParser { protected override bool SupportsUrlAfterClosingXmlTag => true; protected override string MovieDbParserSearchString => "themoviedb.org/tv/"; /// /// Fetches the data from XML node. /// /// The reader. /// The item result. protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult itemResult) { var item = itemResult.Item; switch (reader.Name) { case "id": { string imdbId = reader.GetAttribute("IMDB"); string tmdbId = reader.GetAttribute("TMDB"); string tvdbId = reader.GetAttribute("TVDB"); if (string.IsNullOrWhiteSpace(tvdbId)) { tvdbId = reader.ReadElementContentAsString(); } if (!string.IsNullOrWhiteSpace(imdbId)) { item.SetProviderId(MetadataProviders.Imdb, imdbId); } if (!string.IsNullOrWhiteSpace(tmdbId)) { item.SetProviderId(MetadataProviders.Tmdb, tmdbId); } if (!string.IsNullOrWhiteSpace(tvdbId)) { item.SetProviderId(MetadataProviders.Tvdb, tvdbId); } break; } case "airs_dayofweek": { item.AirDays = TVUtils.GetAirDays(reader.ReadElementContentAsString()); break; } case "airs_time": { var val = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(val)) { item.AirTime = val; } break; } case "status": { var status = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(status)) { if (Enum.TryParse(status, true, out SeriesStatus seriesStatus)) { item.Status = seriesStatus; } else { Logger.LogInformation("Unrecognized series status: " + status); } } break; } default: base.FetchDataFromXmlNode(reader, itemResult); break; } } public SeriesNfoParser(ILogger logger, IConfigurationManager config, IProviderManager providerManager) : base(logger, config, providerManager) { } } }