|
@@ -43,19 +43,23 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
{
|
|
{
|
|
item.ResetPeople();
|
|
item.ResetPeople();
|
|
|
|
|
|
- var xml = streamReader.ReadToEnd();
|
|
|
|
|
|
+ var xmlFile = streamReader.ReadToEnd();
|
|
|
|
|
|
var srch = "</episodedetails>";
|
|
var srch = "</episodedetails>";
|
|
- var index = xml.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
|
|
|
|
|
|
+ var index = xmlFile.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
|
|
|
|
+
|
|
|
|
+ var xml = xmlFile;
|
|
|
|
|
|
if (index != -1)
|
|
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
|
|
// These are not going to be valid xml so no sense in causing the provider to fail and spamming the log with exceptions
|
|
try
|
|
try
|
|
{
|
|
{
|
|
|
|
+ // Extract episode details from the first episodedetails block
|
|
using (var stringReader = new StringReader(xml))
|
|
using (var stringReader = new StringReader(xml))
|
|
using (var reader = XmlReader.Create(stringReader, settings))
|
|
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)
|
|
catch (XmlException)
|
|
{
|
|
{
|