mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-06 09:03:03 +03:00
Merge branch 'master' into xml-parsing-cleanup
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
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)
|
||||
{
|
||||
@@ -141,6 +177,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
||||
|
||||
break;
|
||||
case "airsafter_season":
|
||||
case "displayafterseason":
|
||||
if (reader.TryReadInt(out var airsAfterSeason))
|
||||
{
|
||||
item.AirsAfterSeasonNumber = airsAfterSeason;
|
||||
|
||||
@@ -60,13 +60,13 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return Path.ChangeExtension(item.Path, ".nfo");
|
||||
|
||||
// only allow movie object to read movie.nfo, not owned videos (which will be itemtype video, not movie)
|
||||
if (!item.IsInMixedFolder && item.ItemType == typeof(Movie))
|
||||
{
|
||||
yield return Path.Combine(item.ContainingFolderPath, "movie.nfo");
|
||||
}
|
||||
|
||||
yield return Path.ChangeExtension(item.Path, ".nfo");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user