From ef13a18450c742e29144acf0ccf7e3ccc4621398 Mon Sep 17 00:00:00 2001 From: TheMelmacian <76712303+TheMelmacian@users.noreply.github.com> Date: Sat, 23 Nov 2024 11:18:27 +0100 Subject: [PATCH 1/2] fix(MovieNfoParser): parsing of elements --- .../Parsers/MovieNfoParser.cs | 23 ++++++++----------- .../Parsers/MovieNfoParserTests.cs | 18 +++++++++++++++ .../Test Data/Lilo & Stitch.nfo | 7 ++++++ 3 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 tests/Jellyfin.XbmcMetadata.Tests/Test Data/Lilo & Stitch.nfo diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs index 2d65188b63..ae7e0322a7 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/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs index 075c70da88..599b3cc4e1 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(() => _parser.Fetch(result, string.Empty, CancellationToken.None)); } + + [Fact] + public void Parsing_Fields_With_Escaped_Xml_Special_Characters_Success() + { + var result = new MetadataResult