aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-09-20 02:58:08 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-09-20 02:58:08 -0400
commit7cebc1f007df16305643887a2af07bfb247f8f91 (patch)
tree489c07353fbb650aa6ff4da31b57ea839eb42f35
parent9d69352fcfe7320bb6fa4c3297fd4f993f3c8de8 (diff)
fixes #2376 - Movieset format changed in Kodi v16 - Emby fails on importing nfos with this tags
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs73
1 files changed, 72 insertions, 1 deletions
diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
index 85f9f92ba..0283e4a7b 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
@@ -1,4 +1,7 @@
-using System.Linq;
+using System;
+using System.IO;
+using System.Linq;
+using System.Text;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
@@ -70,6 +73,17 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
movie.CollectionName = val;
}
+ else
+ {
+ try
+ {
+ ParseSetXml(val, movie);
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error parsing set node", ex);
+ }
+ }
}
break;
@@ -109,6 +123,63 @@ namespace MediaBrowser.XbmcMetadata.Parsers
}
}
+ private void ParseSetXml(string xml, Movie movie)
+ {
+ using (var ms = new MemoryStream())
+ {
+ //xml = xml.Substring(xml.IndexOf('<'));
+ //xml = xml.Substring(0, xml.LastIndexOf('>'));
+ xml = "<set>" + xml + "</set>";
+
+ var bytes = Encoding.UTF8.GetBytes(xml);
+
+ ms.Write(bytes, 0, bytes.Length);
+ ms.Position = 0;
+
+ // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions
+ try
+ {
+ var settings = XmlReaderSettingsFactory.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(ms, settings))
+ {
+ reader.MoveToContent();
+ reader.Read();
+
+ // Loop through each element
+ while (!reader.EOF && reader.ReadState == ReadState.Interactive)
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "name":
+ movie.CollectionName = reader.ReadElementContentAsString();
+ break;
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ else
+ {
+ reader.Read();
+ }
+ }
+ }
+ }
+ catch (XmlException)
+ {
+
+ }
+ }
+ }
+
public MovieNfoParser(ILogger logger, IConfigurationManager config, IProviderManager providerManager, IFileSystem fileSystem, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(logger, config, providerManager, fileSystem, xmlReaderSettingsFactory)
{
}