From c5319bb4ae9606e07d62525a022e5a67f85a7d43 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 4 Aug 2014 23:41:56 -0400 Subject: update playlist xml saving --- .../MediaBrowser.LocalMetadata.csproj | 2 + .../Parsers/BoxSetXmlParser.cs | 9 +-- .../Parsers/PlaylistXmlParser.cs | 72 ++++++++++++++++++++++ .../Providers/BoxSetXmlProvider.cs | 6 +- .../Providers/PlaylistXmlProvider.cs | 31 ++++++++++ .../Providers/TrailerXmlProvider.cs | 8 +-- .../Savers/PlaylistXmlSaver.cs | 6 +- .../Savers/XmlSaverHelpers.cs | 6 +- 8 files changed, 119 insertions(+), 21 deletions(-) create mode 100644 MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs create mode 100644 MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs (limited to 'MediaBrowser.LocalMetadata') diff --git a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj b/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj index b103d9f5a..6f8cf31d1 100644 --- a/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj +++ b/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj @@ -54,6 +54,7 @@ + @@ -69,6 +70,7 @@ + diff --git a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs index 85a72cf28..f89e29d54 100644 --- a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs +++ b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs @@ -1,17 +1,14 @@ -using System.Collections.Generic; -using System.Globalization; -using System.Xml; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; +using System.Collections.Generic; +using System.Xml; namespace MediaBrowser.LocalMetadata.Parsers { public class BoxSetXmlParser : BaseItemXmlParser { - private readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public BoxSetXmlParser(ILogger logger) : base(logger) { diff --git a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs new file mode 100644 index 000000000..83bc6a49e --- /dev/null +++ b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs @@ -0,0 +1,72 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Playlists; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Logging; +using System.Collections.Generic; +using System.Xml; + +namespace MediaBrowser.LocalMetadata.Parsers +{ + public class PlaylistXmlParser : BaseItemXmlParser + { + public PlaylistXmlParser(ILogger logger) + : base(logger) + { + } + + protected override void FetchDataFromXmlNode(XmlReader reader, Playlist item) + { + switch (reader.Name) + { + case "PlaylistItems": + + using (var subReader = reader.ReadSubtree()) + { + FetchFromCollectionItemsNode(subReader, item); + } + break; + + default: + base.FetchDataFromXmlNode(reader, item); + break; + } + } + + private void FetchFromCollectionItemsNode(XmlReader reader, Playlist item) + { + reader.MoveToContent(); + + var list = new List(); + + while (reader.Read()) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "PlaylistItem": + { + using (var subReader = reader.ReadSubtree()) + { + var child = GetLinkedChild(subReader); + + if (child != null) + { + list.Add(child); + } + } + + break; + } + + default: + reader.Skip(); + break; + } + } + } + + item.LinkedChildren = list; + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs index 871c2bd92..6e40c3594 100644 --- a/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs +++ b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs @@ -1,10 +1,10 @@ -using System.IO; -using System.Threading; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Providers; using MediaBrowser.LocalMetadata.Parsers; using MediaBrowser.Model.Logging; +using System.IO; +using System.Threading; namespace MediaBrowser.LocalMetadata.Providers { diff --git a/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs new file mode 100644 index 000000000..2279ae052 --- /dev/null +++ b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs @@ -0,0 +1,31 @@ +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Playlists; +using MediaBrowser.Controller.Providers; +using MediaBrowser.LocalMetadata.Parsers; +using MediaBrowser.Model.Logging; +using System.IO; +using System.Threading; + +namespace MediaBrowser.LocalMetadata.Providers +{ + class PlaylistXmlProvider : BaseXmlProvider + { + private readonly ILogger _logger; + + public PlaylistXmlProvider(IFileSystem fileSystem, ILogger logger) + : base(fileSystem) + { + _logger = logger; + } + + protected override void Fetch(LocalMetadataResult result, string path, CancellationToken cancellationToken) + { + new PlaylistXmlParser(_logger).Fetch(result.Item, path, cancellationToken); + } + + protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) + { + return directoryService.GetFile(Path.Combine(info.Path, "playlist.xml")); + } + } +} diff --git a/MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs index db3b2fcf0..7f96f7d96 100644 --- a/MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs +++ b/MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs @@ -1,12 +1,12 @@ -using System.Collections.Generic; -using System.IO; -using System.Threading; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.LocalMetadata.Parsers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using System.Collections.Generic; +using System.IO; +using System.Threading; namespace MediaBrowser.LocalMetadata.Providers { diff --git a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs index cdb3a2500..abc7e3b3f 100644 --- a/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs +++ b/MediaBrowser.LocalMetadata/Savers/PlaylistXmlSaver.cs @@ -1,6 +1,6 @@ using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Playlists; using System.Collections.Generic; using System.IO; using System.Text; @@ -31,7 +31,7 @@ namespace MediaBrowser.LocalMetadata.Savers return false; } - return item is BoxSet && updateType >= ItemUpdateType.MetadataDownload; + return item is Playlist && updateType >= ItemUpdateType.MetadataImport; } /// @@ -46,7 +46,7 @@ namespace MediaBrowser.LocalMetadata.Savers builder.Append(""); - XmlSaverHelpers.AddCommonNodes((BoxSet)item, builder); + XmlSaverHelpers.AddCommonNodes((Playlist)item, builder); builder.Append(""); diff --git a/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs b/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs index 491592989..a007a95cf 100644 --- a/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs +++ b/MediaBrowser.LocalMetadata/Savers/XmlSaverHelpers.cs @@ -717,7 +717,6 @@ namespace MediaBrowser.LocalMetadata.Savers { builder.Append("<" + singularNodeName + ">"); - builder.Append("" + SecurityElement.Escape(link.ItemName) + ""); builder.Append("" + SecurityElement.Escape(link.ItemType) + ""); if (link.ItemYear.HasValue) @@ -725,10 +724,7 @@ namespace MediaBrowser.LocalMetadata.Savers builder.Append("" + SecurityElement.Escape(link.ItemYear.Value.ToString(UsCulture)) + ""); } - if (link.ItemIndexNumber.HasValue) - { - builder.Append("" + SecurityElement.Escape(link.ItemIndexNumber.Value.ToString(UsCulture)) + ""); - } + builder.Append("" + SecurityElement.Escape((link.Path ?? string.Empty)) + ""); builder.Append(""); } -- cgit v1.2.3