fix: write livetv recording NFO dateadded as UTC (#16863)

fix: write livetv recording NFO dateadded as UTC
This commit is contained in:
Tayfun Akgüç
2026-05-18 21:22:20 +03:00
committed by GitHub
parent 077ad5c574
commit 8deb5c1d2a
2 changed files with 65 additions and 1 deletions

View File

@@ -288,7 +288,7 @@ public class RecordingsMetadataManager
null,
"dateadded",
null,
DateTime.Now.ToString(DateAddedFormat, CultureInfo.InvariantCulture)).ConfigureAwait(false);
DateTime.UtcNow.ToString(DateAddedFormat, CultureInfo.InvariantCulture)).ConfigureAwait(false);
if (item.ProductionYear.HasValue)
{

View File

@@ -0,0 +1,64 @@
using System;
using System.Globalization;
using System.IO;
using System.Threading.Tasks;
using System.Xml;
using Jellyfin.Extensions;
using Jellyfin.LiveTv.Recordings;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.LiveTv;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Xunit;
namespace Jellyfin.LiveTv.Tests.Recordings;
public sealed class RecordingsMetadataManagerTests
{
private readonly string _tempDir =
Path.Combine(Path.GetTempPath(), "jellyfin-test-" + Guid.NewGuid());
[Fact]
public async Task SaveRecordingMetadata_DateAddedIsUtc()
{
Directory.CreateDirectory(_tempDir);
var recordingPath = Path.Combine(_tempDir, "test-recording.ts");
FileHelper.CreateEmpty(recordingPath);
var config = new Mock<IConfigurationManager>();
config.Setup(c => c.GetConfiguration("livetv"))
.Returns(new LiveTvOptions { SaveRecordingNFO = true, SaveRecordingImages = false });
config.Setup(c => c.GetConfiguration("xbmcmetadata"))
.Returns(new XbmcMetadataOptions());
var libraryManager = new Mock<ILibraryManager>();
libraryManager
.Setup(l => l.GetItemList(It.IsAny<InternalItemsQuery>()))
.Returns(Array.Empty<BaseItem>());
var manager = new RecordingsMetadataManager(
NullLogger<RecordingsMetadataManager>.Instance,
config.Object,
libraryManager.Object);
var timer = new TimerInfo { Name = "Test Recording", ProgramId = null };
var beforeUtc = DateTime.UtcNow.AddSeconds(-2);
await manager.SaveRecordingMetadata(timer, recordingPath, null);
var afterUtc = DateTime.UtcNow.AddSeconds(2);
var doc = new XmlDocument();
doc.Load(Path.ChangeExtension(recordingPath, ".nfo"));
var dateAddedText = doc.SelectSingleNode("//dateadded")?.InnerText ?? string.Empty;
var parsed = DateTime.ParseExact(
dateAddedText,
"yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture);
Assert.InRange(parsed, beforeUtc, afterUtc);
}
}