diff options
Diffstat (limited to 'MediaBrowser.Controller/Providers/TV/EpisodeXmlParser.cs')
| -rw-r--r-- | MediaBrowser.Controller/Providers/TV/EpisodeXmlParser.cs | 164 |
1 files changed, 104 insertions, 60 deletions
diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeXmlParser.cs b/MediaBrowser.Controller/Providers/TV/EpisodeXmlParser.cs index 1cb604a51c..7133d87451 100644 --- a/MediaBrowser.Controller/Providers/TV/EpisodeXmlParser.cs +++ b/MediaBrowser.Controller/Providers/TV/EpisodeXmlParser.cs @@ -1,60 +1,104 @@ -using MediaBrowser.Controller.Entities.TV;
-using System.IO;
-using System.Xml;
-
-namespace MediaBrowser.Controller.Providers.TV
-{
- public class EpisodeXmlParser : BaseItemXmlParser<Episode>
- {
- protected override void FetchDataFromXmlNode(XmlReader reader, Episode item)
- {
- switch (reader.Name)
- {
- 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":
- {
- string number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- item.ParentIndexNumber = int.Parse(number);
- }
- break;
- }
-
- case "EpisodeNumber":
- {
- string number = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(number))
- {
- item.IndexNumber = int.Parse(number);
- }
- break;
- }
-
- case "EpisodeName":
- item.Name = reader.ReadElementContentAsString();
- break;
-
- default:
- base.FetchDataFromXmlNode(reader, item);
- break;
- }
- }
- }
-}
+using MediaBrowser.Controller.Entities.TV; +using System.IO; +using System.Xml; + +namespace MediaBrowser.Controller.Providers.TV +{ + /// <summary> + /// Class EpisodeXmlParser + /// </summary> + public class EpisodeXmlParser : BaseItemXmlParser<Episode> + { + /// <summary> + /// Fetches the data from XML node. + /// </summary> + /// <param name="reader">The reader.</param> + /// <param name="item">The item.</param> + 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; + } + } + } +} |
