|
|
@ -18,6 +18,59 @@ namespace MediaBrowser.Providers.Savers
|
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
|
public static class XmlSaverHelpers
|
|
|
|
public static class XmlSaverHelpers
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
private static readonly Dictionary<string, string> CommonTags = new[] {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"Added",
|
|
|
|
|
|
|
|
"AspectRatio",
|
|
|
|
|
|
|
|
"BirthDate",
|
|
|
|
|
|
|
|
"Budget",
|
|
|
|
|
|
|
|
"certification",
|
|
|
|
|
|
|
|
"Chapters",
|
|
|
|
|
|
|
|
"ContentRating",
|
|
|
|
|
|
|
|
"CustomRating",
|
|
|
|
|
|
|
|
"CriticRating",
|
|
|
|
|
|
|
|
"CriticRatingSummary",
|
|
|
|
|
|
|
|
"DeathDate",
|
|
|
|
|
|
|
|
"EndDate",
|
|
|
|
|
|
|
|
"Genres",
|
|
|
|
|
|
|
|
"Genre",
|
|
|
|
|
|
|
|
"GamesDbId",
|
|
|
|
|
|
|
|
"IMDB_ID",
|
|
|
|
|
|
|
|
"IMDB",
|
|
|
|
|
|
|
|
"IMDbId",
|
|
|
|
|
|
|
|
"Language",
|
|
|
|
|
|
|
|
"LocalTitle",
|
|
|
|
|
|
|
|
"LockData",
|
|
|
|
|
|
|
|
"LockedFields",
|
|
|
|
|
|
|
|
"MediaInfo",
|
|
|
|
|
|
|
|
"MPAARating",
|
|
|
|
|
|
|
|
"MusicbrainzId",
|
|
|
|
|
|
|
|
"MusicBrainzReleaseGroupId",
|
|
|
|
|
|
|
|
"Overview",
|
|
|
|
|
|
|
|
"Persons",
|
|
|
|
|
|
|
|
"PremiereDate",
|
|
|
|
|
|
|
|
"ProductionYear",
|
|
|
|
|
|
|
|
"Rating",
|
|
|
|
|
|
|
|
"Revenue",
|
|
|
|
|
|
|
|
"RottenTomatoesId",
|
|
|
|
|
|
|
|
"RunningTime",
|
|
|
|
|
|
|
|
"Runtime",
|
|
|
|
|
|
|
|
"SortTitle",
|
|
|
|
|
|
|
|
"Studios",
|
|
|
|
|
|
|
|
"Tags",
|
|
|
|
|
|
|
|
"TagLine",
|
|
|
|
|
|
|
|
"Taglines",
|
|
|
|
|
|
|
|
"TMDbCollectionId",
|
|
|
|
|
|
|
|
"TMDbId",
|
|
|
|
|
|
|
|
"Trailer",
|
|
|
|
|
|
|
|
"TVcomId",
|
|
|
|
|
|
|
|
"TvDbId",
|
|
|
|
|
|
|
|
"Type",
|
|
|
|
|
|
|
|
"Website",
|
|
|
|
|
|
|
|
"Zap2ItId"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
/// The us culture
|
|
|
|
/// The us culture
|
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
@ -33,58 +86,6 @@ namespace MediaBrowser.Providers.Savers
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (File.Exists(path))
|
|
|
|
if (File.Exists(path))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
xmlTagsUsed.AddRange(new[]
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"MediaInfo",
|
|
|
|
|
|
|
|
"ContentRating",
|
|
|
|
|
|
|
|
"MPAARating",
|
|
|
|
|
|
|
|
"certification",
|
|
|
|
|
|
|
|
"Persons",
|
|
|
|
|
|
|
|
"Type",
|
|
|
|
|
|
|
|
"Overview",
|
|
|
|
|
|
|
|
"CustomRating",
|
|
|
|
|
|
|
|
"LocalTitle",
|
|
|
|
|
|
|
|
"SortTitle",
|
|
|
|
|
|
|
|
"PremiereDate",
|
|
|
|
|
|
|
|
"EndDate",
|
|
|
|
|
|
|
|
"Budget",
|
|
|
|
|
|
|
|
"Revenue",
|
|
|
|
|
|
|
|
"Rating",
|
|
|
|
|
|
|
|
"ProductionYear",
|
|
|
|
|
|
|
|
"Website",
|
|
|
|
|
|
|
|
"AspectRatio",
|
|
|
|
|
|
|
|
"Language",
|
|
|
|
|
|
|
|
"RunningTime",
|
|
|
|
|
|
|
|
"Runtime",
|
|
|
|
|
|
|
|
"TagLine",
|
|
|
|
|
|
|
|
"Taglines",
|
|
|
|
|
|
|
|
"IMDB_ID",
|
|
|
|
|
|
|
|
"IMDB",
|
|
|
|
|
|
|
|
"IMDbId",
|
|
|
|
|
|
|
|
"TMDbId",
|
|
|
|
|
|
|
|
"TVcomId",
|
|
|
|
|
|
|
|
"TvDbId",
|
|
|
|
|
|
|
|
"RottenTomatoesId",
|
|
|
|
|
|
|
|
"MusicbrainzId",
|
|
|
|
|
|
|
|
"TMDbCollectionId",
|
|
|
|
|
|
|
|
"Genres",
|
|
|
|
|
|
|
|
"Genre",
|
|
|
|
|
|
|
|
"Studios",
|
|
|
|
|
|
|
|
"Tags",
|
|
|
|
|
|
|
|
"Added",
|
|
|
|
|
|
|
|
"LockData",
|
|
|
|
|
|
|
|
"Trailer",
|
|
|
|
|
|
|
|
"CriticRating",
|
|
|
|
|
|
|
|
"CriticRatingSummary",
|
|
|
|
|
|
|
|
"GamesDbId",
|
|
|
|
|
|
|
|
"BirthDate",
|
|
|
|
|
|
|
|
"DeathDate",
|
|
|
|
|
|
|
|
"LockedFields",
|
|
|
|
|
|
|
|
"Chapters",
|
|
|
|
|
|
|
|
"MusicBrainzReleaseGroupId",
|
|
|
|
|
|
|
|
"Zap2ItId"
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var position = xml.ToString().LastIndexOf("</", StringComparison.OrdinalIgnoreCase);
|
|
|
|
var position = xml.ToString().LastIndexOf("</", StringComparison.OrdinalIgnoreCase);
|
|
|
|
xml.Insert(position, GetCustomTags(path, xmlTagsUsed));
|
|
|
|
xml.Insert(position, GetCustomTags(path, xmlTagsUsed));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -140,7 +141,7 @@ namespace MediaBrowser.Providers.Savers
|
|
|
|
/// <param name="path">The path.</param>
|
|
|
|
/// <param name="path">The path.</param>
|
|
|
|
/// <param name="xmlTagsUsed">The XML tags used.</param>
|
|
|
|
/// <param name="xmlTagsUsed">The XML tags used.</param>
|
|
|
|
/// <returns>System.String.</returns>
|
|
|
|
/// <returns>System.String.</returns>
|
|
|
|
private static string GetCustomTags(string path, IEnumerable<string> xmlTagsUsed)
|
|
|
|
private static string GetCustomTags(string path, List<string> xmlTagsUsed)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var settings = new XmlReaderSettings
|
|
|
|
var settings = new XmlReaderSettings
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -150,8 +151,6 @@ namespace MediaBrowser.Providers.Savers
|
|
|
|
ValidationType = ValidationType.None
|
|
|
|
ValidationType = ValidationType.None
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var tagsDictionary = xmlTagsUsed.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var builder = new StringBuilder();
|
|
|
|
var builder = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
|
|
using (var streamReader = new StreamReader(path, Encoding.UTF8))
|
|
|
|
using (var streamReader = new StreamReader(path, Encoding.UTF8))
|
|
|
@ -166,7 +165,9 @@ namespace MediaBrowser.Providers.Savers
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (reader.NodeType == XmlNodeType.Element)
|
|
|
|
if (reader.NodeType == XmlNodeType.Element)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!tagsDictionary.ContainsKey(reader.Name))
|
|
|
|
var name = reader.Name;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!CommonTags.ContainsKey(name) && !xmlTagsUsed.Contains(name, StringComparer.OrdinalIgnoreCase))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
builder.AppendLine(reader.ReadOuterXml());
|
|
|
|
builder.AppendLine(reader.ReadOuterXml());
|
|
|
|
}
|
|
|
|
}
|
|
|
|