From c199fd05d30e08968e5b03df15af8e02148c8c2d Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 19 Sep 2024 20:03:40 -0700 Subject: [PATCH] Fixed: Don't set last write time on episode files if difference is within the same second Closes #7228 --- src/NzbDrone.Common/Extensions/DateTimeExtensions.cs | 7 ++++++- .../MediaFiles/UpdateEpisodeFileService.cs | 10 +++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Common/Extensions/DateTimeExtensions.cs b/src/NzbDrone.Common/Extensions/DateTimeExtensions.cs index 75be57cb6..38ff663ae 100644 --- a/src/NzbDrone.Common/Extensions/DateTimeExtensions.cs +++ b/src/NzbDrone.Common/Extensions/DateTimeExtensions.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace NzbDrone.Common.Extensions { @@ -38,5 +38,10 @@ namespace NzbDrone.Common.Extensions { return dateTime >= afterDateTime && dateTime <= beforeDateTime; } + + public static DateTime WithoutTicks(this DateTime dateTime) + { + return dateTime.AddTicks(-(dateTime.Ticks % TimeSpan.TicksPerSecond)); + } } } diff --git a/src/NzbDrone.Core/MediaFiles/UpdateEpisodeFileService.cs b/src/NzbDrone.Core/MediaFiles/UpdateEpisodeFileService.cs index 172cb5aba..539cc1f64 100644 --- a/src/NzbDrone.Core/MediaFiles/UpdateEpisodeFileService.cs +++ b/src/NzbDrone.Core/MediaFiles/UpdateEpisodeFileService.cs @@ -84,7 +84,7 @@ namespace NzbDrone.Core.MediaFiles if (DateTime.TryParse(fileDate + ' ' + fileTime, out var airDate)) { // avoiding false +ve checks and set date skewing by not using UTC (Windows) - var oldDateTime = _diskProvider.FileGetLastWrite(filePath); + var oldLastWrite = _diskProvider.FileGetLastWrite(filePath); if (OsInfo.IsNotWindows && airDate < EpochTime) { @@ -92,12 +92,12 @@ namespace NzbDrone.Core.MediaFiles airDate = EpochTime; } - if (!DateTime.Equals(airDate, oldDateTime)) + if (!DateTime.Equals(airDate.WithoutTicks(), oldLastWrite.WithoutTicks())) { try { _diskProvider.FileSetLastWriteTime(filePath, airDate); - _logger.Debug("Date of file [{0}] changed from '{1}' to '{2}'", filePath, oldDateTime, airDate); + _logger.Debug("Date of file [{0}] changed from '{1}' to '{2}'", filePath, oldLastWrite, airDate); return true; } @@ -125,11 +125,11 @@ namespace NzbDrone.Core.MediaFiles airDateUtc = EpochTime; } - if (!DateTime.Equals(airDateUtc, oldLastWrite)) + if (!DateTime.Equals(airDateUtc.WithoutTicks(), oldLastWrite.WithoutTicks())) { try { - _diskProvider.FileSetLastWriteTime(filePath, airDateUtc); + _diskProvider.FileSetLastWriteTime(filePath, airDateUtc.AddMilliseconds(oldLastWrite.Millisecond)); _logger.Debug("Date of file [{0}] changed from '{1}' to '{2}'", filePath, oldLastWrite, airDateUtc); return true;