|
@@ -1,6 +1,7 @@
|
|
|
using System;
|
|
|
using System.Globalization;
|
|
|
using System.IO;
|
|
|
+using System.Text;
|
|
|
using System.Threading;
|
|
|
using System.Xml;
|
|
|
using MediaBrowser.Common.Configuration;
|
|
@@ -81,7 +82,10 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
|
}
|
|
|
|
|
|
// Extract the last episode number from nfo
|
|
|
+ // Retrieves all title and plot tags from the rest of the nfo and concatenates them with the first episode
|
|
|
// This is needed because XBMC metadata uses multiple episodedetails blocks instead of episodenumberend tag
|
|
|
+ var name = new StringBuilder(item.Item.Name);
|
|
|
+ var overview = new StringBuilder(item.Item.Overview);
|
|
|
while ((index = xmlFile.IndexOf(srch, StringComparison.OrdinalIgnoreCase)) != -1)
|
|
|
{
|
|
|
xml = xmlFile.Substring(0, index + srch.Length);
|
|
@@ -92,12 +96,44 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
|
{
|
|
|
reader.MoveToContent();
|
|
|
|
|
|
- if (reader.ReadToDescendant("episode") && int.TryParse(reader.ReadElementContentAsString(), out var num))
|
|
|
+ while (!reader.EOF && reader.ReadState == ReadState.Interactive)
|
|
|
{
|
|
|
- item.Item.IndexNumberEnd = Math.Max(num, item.Item.IndexNumberEnd ?? num);
|
|
|
+ cancellationToken.ThrowIfCancellationRequested();
|
|
|
+
|
|
|
+ if (reader.NodeType == XmlNodeType.Element)
|
|
|
+ {
|
|
|
+ switch (reader.Name)
|
|
|
+ {
|
|
|
+ case "name":
|
|
|
+ case "title":
|
|
|
+ case "localtitle":
|
|
|
+ name.Append(" / ").Append(reader.ReadElementContentAsString());
|
|
|
+ break;
|
|
|
+ case "episode":
|
|
|
+ {
|
|
|
+ if (int.TryParse(reader.ReadElementContentAsString(), out var num))
|
|
|
+ {
|
|
|
+ item.Item.IndexNumberEnd = Math.Max(num, item.Item.IndexNumberEnd ?? num);
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ case "biography":
|
|
|
+ case "plot":
|
|
|
+ case "review":
|
|
|
+ overview.Append(" / ").Append(reader.ReadElementContentAsString());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ reader.Read();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ item.Item.Name = name.ToString();
|
|
|
+ item.Item.Overview = overview.ToString();
|
|
|
}
|
|
|
catch (XmlException)
|
|
|
{
|
|
@@ -172,6 +208,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ case "displayafterseason":
|
|
|
case "airsafter_season":
|
|
|
{
|
|
|
var val = reader.ReadElementContentAsString();
|