diff options
| author | BaronGreenback <jimcartlidge@yahoo.co.uk> | 2021-02-28 10:12:14 +0000 |
|---|---|---|
| committer | BaronGreenback <jimcartlidge@yahoo.co.uk> | 2021-02-28 10:12:14 +0000 |
| commit | 80ca3da55c7d8ec9cf06a619fc895c1e427c45ff (patch) | |
| tree | 95f5ddce05f6ede680b815cfe5dbf413ce6fb352 /MediaBrowser.XbmcMetadata | |
| parent | 1d6f489f17919e557987b2616048dc8def790f43 (diff) | |
| parent | f8c9c37c29efa6d42b79d6db3aa8a69a60106765 (diff) | |
Merge remote-tracking branch 'upstream/master' into FixFor5280Part2
Diffstat (limited to 'MediaBrowser.XbmcMetadata')
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs index f0c50d8e51..eb93148c6a 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs @@ -43,19 +43,23 @@ namespace MediaBrowser.XbmcMetadata.Parsers { item.ResetPeople(); - var xml = streamReader.ReadToEnd(); + var xmlFile = streamReader.ReadToEnd(); var srch = "</episodedetails>"; - var index = xml.IndexOf(srch, StringComparison.OrdinalIgnoreCase); + var index = xmlFile.IndexOf(srch, StringComparison.OrdinalIgnoreCase); + + var xml = xmlFile; if (index != -1) { - xml = xml.Substring(0, index + srch.Length); + xml = xmlFile.Substring(0, index + srch.Length); + xmlFile = xmlFile.Substring(index + srch.Length); } // These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions try { + // Extract episode details from the first episodedetails block using (var stringReader = new StringReader(xml)) using (var reader = XmlReader.Create(stringReader, settings)) { @@ -77,6 +81,25 @@ namespace MediaBrowser.XbmcMetadata.Parsers } } } + + // Extract the last episode number from nfo + // This is needed because XBMC metadata uses multiple episodedetails blocks instead of episodenumberend tag + while ((index = xmlFile.IndexOf(srch, StringComparison.OrdinalIgnoreCase)) != -1) + { + xml = xmlFile.Substring(0, index + srch.Length); + xmlFile = xmlFile.Substring(index + srch.Length); + + using (var stringReader = new StringReader(xml)) + using (var reader = XmlReader.Create(stringReader, settings)) + { + reader.MoveToContent(); + + if (reader.ReadToDescendant("episode") && int.TryParse(reader.ReadElementContentAsString(), out var num)) + { + item.Item.IndexNumberEnd = Math.Max(num, item.Item.IndexNumberEnd ?? num); + } + } + } } catch (XmlException) { |
