aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheMelmacian <76712303+TheMelmacian@users.noreply.github.com>2025-02-03 16:54:35 -0500
committerBond_009 <bond.009@outlook.com>2025-02-03 16:54:35 -0500
commit51207edf44c4ec74a621a3ea9c5b9ee55c006009 (patch)
tree6512b11c2236e6ef5418935f963dfb46bb091ca5
parentcfeb879519539573575ccc0b60c9c6010fda1543 (diff)
Backport pull request #13092 from jellyfin/release-10.10.z
Fix: handling of <set> elements in NfoParser Original-merge: f333ef74b3cc8444e12ac1210f94daf59c766969 Merged-by: joshuaboniface <joshua@boniface.me> Backported-by: Bond_009 <bond.009@outlook.com>
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs23
-rw-r--r--MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs4
-rw-r--r--tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs18
-rw-r--r--tests/Jellyfin.XbmcMetadata.Tests/Test Data/Lilo & Stitch.nfo7
4 files changed, 38 insertions, 14 deletions
diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
index 2d65188b6..ae7e0322a 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
@@ -82,21 +82,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (!string.IsNullOrWhiteSpace(val) && movie is not null)
{
- // TODO Handle this better later
- if (!val.Contains('<', StringComparison.Ordinal))
+ try
{
- movie.CollectionName = val;
+ ParseSetXml(val, movie);
}
- else
+ catch (Exception ex)
{
- try
- {
- ParseSetXml(val, movie);
- }
- catch (Exception ex)
- {
- Logger.LogError(ex, "Error parsing set node");
- }
+ Logger.LogError(ex, "Error parsing set node");
}
}
@@ -139,7 +131,12 @@ namespace MediaBrowser.XbmcMetadata.Parsers
// Loop through each element
while (!reader.EOF && reader.ReadState == ReadState.Interactive)
{
- if (reader.NodeType == XmlNodeType.Element)
+ if (reader.NodeType == XmlNodeType.Text && reader.Depth == 1)
+ {
+ movie.CollectionName = reader.Value;
+ break;
+ }
+ else if (reader.NodeType == XmlNodeType.Element)
{
switch (reader.Name)
{
diff --git a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs
index bc344d87e..e85e369d9 100644
--- a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs
+++ b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs
@@ -115,7 +115,9 @@ namespace MediaBrowser.XbmcMetadata.Savers
{
if (!string.IsNullOrEmpty(movie.CollectionName))
{
- writer.WriteElementString("set", movie.CollectionName);
+ writer.WriteStartElement("set");
+ writer.WriteElementString("name", movie.CollectionName);
+ writer.WriteEndElement();
}
}
}
diff --git a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs
index b9833c225..9c2655154 100644
--- a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs
+++ b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs
@@ -257,5 +257,23 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers
Assert.Throws<ArgumentException>(() => _parser.Fetch(result, string.Empty, CancellationToken.None));
}
+
+ [Fact]
+ public void Parsing_Fields_With_Escaped_Xml_Special_Characters_Success()
+ {
+ var result = new MetadataResult<Video>()
+ {
+ Item = new Movie()
+ };
+
+ _parser.Fetch(result, "Test Data/Lilo & Stitch.nfo", CancellationToken.None);
+ var item = (Movie)result.Item;
+
+ Assert.Equal("Lilo & Stitch", item.Name);
+ Assert.Equal("Lilo & Stitch", item.OriginalTitle);
+ Assert.Equal("Lilo & Stitch Collection", item.CollectionName);
+ Assert.StartsWith(">>", item.Overview, StringComparison.InvariantCulture);
+ Assert.EndsWith("<<", item.Overview, StringComparison.InvariantCulture);
+ }
}
}
diff --git a/tests/Jellyfin.XbmcMetadata.Tests/Test Data/Lilo & Stitch.nfo b/tests/Jellyfin.XbmcMetadata.Tests/Test Data/Lilo & Stitch.nfo
new file mode 100644
index 000000000..1eab687a2
--- /dev/null
+++ b/tests/Jellyfin.XbmcMetadata.Tests/Test Data/Lilo & Stitch.nfo
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<movie>
+ <title>Lilo &amp; Stitch</title>
+ <originaltitle>Lilo &amp; Stitch</originaltitle>
+ <set>Lilo &amp; Stitch Collection</set>
+ <plot>&gt;&gt;As Stitch, a runaway genetic experiment from a faraway planet, wreaks havoc on the Hawaiian Islands, he becomes the mischievous adopted alien "puppy" of an independent little girl named Lilo and learns about loyalty, friendship, and ʻohana, the Hawaiian tradition of family.&lt;&lt;</plot>
+</movie>