Add XML declaration and clean up Kodi metadata generation

Closes #7753
This commit is contained in:
Mark McDowall 2025-03-23 19:55:36 -07:00
parent d10107739b
commit 88d56361c4
No known key found for this signature in database
2 changed files with 223 additions and 201 deletions

View file

@ -0,0 +1,9 @@
using System.IO;
using System.Text;
namespace NzbDrone.Common;
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}

View file

@ -8,6 +8,7 @@
using System.Xml;
using System.Xml.Linq;
using NLog;
using NzbDrone.Common;
using NzbDrone.Common.Disk;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Serializer;
@ -149,13 +150,7 @@ public override MetadataFileResult SeriesMetadata(Series series, SeriesMetadataR
if (Settings.SeriesMetadata)
{
_logger.Debug("Generating Series Metadata for: {0}", series.Title);
var sb = new StringBuilder();
var xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;
xws.Indent = false;
using (var xw = XmlWriter.Create(sb, xws))
{
var tvShow = new XElement("tvshow");
tvShow.Add(new XElement("title", series.Title));
@ -248,11 +243,23 @@ public override MetadataFileResult SeriesMetadata(Series series, SeriesMetadataR
tvShow.Add(new XElement("episodeguide", JsonSerializer.Serialize(episodeGuide, serializerSettings)));
}
var doc = new XDocument(tvShow);
doc.Save(xw);
var doc = new XDocument(tvShow)
{
Declaration = new XDeclaration("1.0", "UTF-8", "yes"),
};
xmlResult += doc.ToString();
}
var sb = new StringBuilder();
using var sw = new Utf8StringWriter();
using var xw = XmlWriter.Create(sw, new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true
});
doc.Save(xw);
xw.Flush();
xmlResult += sw.ToString();
}
if (Settings.SeriesMetadataUrl)
@ -280,16 +287,19 @@ public override MetadataFileResult EpisodeMetadata(Series series, EpisodeFile ep
var watched = GetExistingWatchedStatus(series, episodeFile.RelativePath);
var xmlResult = string.Empty;
var xws = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true
};
foreach (var episode in episodeFile.Episodes.Value)
{
var sb = new StringBuilder();
var xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;
xws.Indent = false;
using (var xw = XmlWriter.Create(sb, xws))
var doc = new XDocument
{
var doc = new XDocument();
Declaration = new XDeclaration("1.0", "UTF-8", "yes")
};
var image = episode.Images.SingleOrDefault(i => i.CoverType == MediaCoverTypes.Screenshot);
var details = new XElement("episodedetails");
@ -381,13 +391,16 @@ public override MetadataFileResult EpisodeMetadata(Series series, EpisodeFile ep
// details.Add(new XElement("credits", tvdbEpisode.Writer.FirstOrDefault()));
// details.Add(new XElement("director", tvdbEpisode.Directors.FirstOrDefault()));
using var sw = new Utf8StringWriter();
using var xw = XmlWriter.Create(sw, xws);
doc.Add(details);
doc.Save(xw);
xw.Flush();
xmlResult += doc.ToString();
xmlResult += sw.ToString();
xmlResult += Environment.NewLine;
}
}
return new MetadataFileResult(GetEpisodeMetadataFilename(episodeFile.RelativePath), xmlResult.Trim(Environment.NewLine.ToCharArray()));
}