PlaylistXmlParser.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using MediaBrowser.Controller.Entities;
  2. using MediaBrowser.Controller.Playlists;
  3. using MediaBrowser.Controller.Providers;
  4. using MediaBrowser.Model.Logging;
  5. using System.Collections.Generic;
  6. using System.Xml;
  7. namespace MediaBrowser.LocalMetadata.Parsers
  8. {
  9. public class PlaylistXmlParser : BaseItemXmlParser<Playlist>
  10. {
  11. public PlaylistXmlParser(ILogger logger)
  12. : base(logger)
  13. {
  14. }
  15. protected override void FetchDataFromXmlNode(XmlReader reader, Playlist item)
  16. {
  17. switch (reader.Name)
  18. {
  19. case "OwnerUserId":
  20. {
  21. item.OwnerUserId = reader.ReadElementContentAsString();
  22. break;
  23. }
  24. case "PlaylistMediaType":
  25. {
  26. item.PlaylistMediaType = reader.ReadElementContentAsString();
  27. break;
  28. }
  29. case "PlaylistItems":
  30. using (var subReader = reader.ReadSubtree())
  31. {
  32. FetchFromCollectionItemsNode(subReader, item);
  33. }
  34. break;
  35. default:
  36. base.FetchDataFromXmlNode(reader, item);
  37. break;
  38. }
  39. }
  40. private void FetchFromCollectionItemsNode(XmlReader reader, Playlist item)
  41. {
  42. reader.MoveToContent();
  43. var list = new List<LinkedChild>();
  44. while (reader.Read())
  45. {
  46. if (reader.NodeType == XmlNodeType.Element)
  47. {
  48. switch (reader.Name)
  49. {
  50. case "PlaylistItem":
  51. {
  52. using (var subReader = reader.ReadSubtree())
  53. {
  54. var child = GetLinkedChild(subReader);
  55. if (child != null)
  56. {
  57. list.Add(child);
  58. }
  59. }
  60. break;
  61. }
  62. default:
  63. reader.Skip();
  64. break;
  65. }
  66. }
  67. }
  68. item.LinkedChildren = list;
  69. }
  70. }
  71. }