using MediaBrowser.Controller.Entities.TV; using System.IO; using System.Xml; namespace MediaBrowser.Controller.Providers.TV { /// /// Class EpisodeXmlParser /// public class EpisodeXmlParser : BaseItemXmlParser { /// /// Fetches the data from XML node. /// /// The reader. /// The item. protected override void FetchDataFromXmlNode(XmlReader reader, Episode item) { switch (reader.Name) { case "Episode": //MB generated metadata is within an "Episode" node using (var subTree = reader.ReadSubtree()) { subTree.MoveToContent(); // Loop through each element while (subTree.Read()) { if (subTree.NodeType == XmlNodeType.Element) { FetchDataFromXmlNode(subTree, item); } } } break; case "filename": { string filename = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(filename)) { // Strip off everything but the filename. Some metadata tools like MetaBrowser v1.0 will have an 'episodes' prefix // even though it's actually using the metadata folder. filename = Path.GetFileName(filename); string seasonFolder = Path.GetDirectoryName(item.Path); item.PrimaryImagePath = Path.Combine(seasonFolder, "metadata", filename); } break; } case "SeasonNumber": { var number = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(number)) { int num; if (int.TryParse(number, out num)) { item.ParentIndexNumber = num; } } break; } case "EpisodeNumber": { var number = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(number)) { int num; if (int.TryParse(number, out num)) { item.IndexNumber = num; } } break; } case "EpisodeName": { var name = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(name)) { item.Name = name; } break; } default: base.FetchDataFromXmlNode(reader, item); break; } } } }