EpisodeXmlParser.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using MediaBrowser.Controller.Entities.TV;
  2. using MediaBrowser.Model.Logging;
  3. using System.IO;
  4. using System.Xml;
  5. namespace MediaBrowser.Controller.Providers.TV
  6. {
  7. /// <summary>
  8. /// Class EpisodeXmlParser
  9. /// </summary>
  10. public class EpisodeXmlParser : BaseItemXmlParser<Episode>
  11. {
  12. /// <summary>
  13. /// Initializes a new instance of the <see cref="EpisodeXmlParser" /> class.
  14. /// </summary>
  15. /// <param name="logger">The logger.</param>
  16. public EpisodeXmlParser(ILogger logger)
  17. : base(logger)
  18. {
  19. }
  20. /// <summary>
  21. /// Fetches the data from XML node.
  22. /// </summary>
  23. /// <param name="reader">The reader.</param>
  24. /// <param name="item">The item.</param>
  25. protected override void FetchDataFromXmlNode(XmlReader reader, Episode item)
  26. {
  27. switch (reader.Name)
  28. {
  29. case "Episode":
  30. //MB generated metadata is within an "Episode" node
  31. using (var subTree = reader.ReadSubtree())
  32. {
  33. subTree.MoveToContent();
  34. // Loop through each element
  35. while (subTree.Read())
  36. {
  37. if (subTree.NodeType == XmlNodeType.Element)
  38. {
  39. FetchDataFromXmlNode(subTree, item);
  40. }
  41. }
  42. }
  43. break;
  44. case "filename":
  45. {
  46. var filename = reader.ReadElementContentAsString();
  47. if (!string.IsNullOrWhiteSpace(filename))
  48. {
  49. // Strip off everything but the filename. Some metadata tools like MetaBrowser v1.0 will have an 'episodes' prefix
  50. // even though it's actually using the metadata folder.
  51. filename = Path.GetFileName(filename);
  52. var seasonFolder = Path.GetDirectoryName(item.Path);
  53. filename = Path.Combine(seasonFolder, "metadata", filename);
  54. if (File.Exists(filename))
  55. {
  56. item.PrimaryImagePath = filename;
  57. }
  58. }
  59. break;
  60. }
  61. case "SeasonNumber":
  62. {
  63. var number = reader.ReadElementContentAsString();
  64. if (!string.IsNullOrWhiteSpace(number))
  65. {
  66. int num;
  67. if (int.TryParse(number, out num))
  68. {
  69. item.ParentIndexNumber = num;
  70. }
  71. }
  72. break;
  73. }
  74. case "EpisodeNumber":
  75. {
  76. var number = reader.ReadElementContentAsString();
  77. if (!string.IsNullOrWhiteSpace(number))
  78. {
  79. int num;
  80. if (int.TryParse(number, out num))
  81. {
  82. item.IndexNumber = num;
  83. }
  84. }
  85. break;
  86. }
  87. case "EpisodeName":
  88. {
  89. var name = reader.ReadElementContentAsString();
  90. if (!string.IsNullOrWhiteSpace(name))
  91. {
  92. item.Name = name;
  93. }
  94. break;
  95. }
  96. default:
  97. base.FetchDataFromXmlNode(reader, item);
  98. break;
  99. }
  100. }
  101. }
  102. }