EpisodeXmlParser.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. string 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. string seasonFolder = Path.GetDirectoryName(item.Path);
  53. item.PrimaryImagePath = Path.Combine(seasonFolder, "metadata", filename);
  54. }
  55. break;
  56. }
  57. case "SeasonNumber":
  58. {
  59. var number = reader.ReadElementContentAsString();
  60. if (!string.IsNullOrWhiteSpace(number))
  61. {
  62. int num;
  63. if (int.TryParse(number, out num))
  64. {
  65. item.ParentIndexNumber = num;
  66. }
  67. }
  68. break;
  69. }
  70. case "EpisodeNumber":
  71. {
  72. var number = reader.ReadElementContentAsString();
  73. if (!string.IsNullOrWhiteSpace(number))
  74. {
  75. int num;
  76. if (int.TryParse(number, out num))
  77. {
  78. item.IndexNumber = num;
  79. }
  80. }
  81. break;
  82. }
  83. case "EpisodeName":
  84. {
  85. var name = reader.ReadElementContentAsString();
  86. if (!string.IsNullOrWhiteSpace(name))
  87. {
  88. item.Name = name;
  89. }
  90. break;
  91. }
  92. default:
  93. base.FetchDataFromXmlNode(reader, item);
  94. break;
  95. }
  96. }
  97. }
  98. }