diff --git a/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs index 867f40e98..8a4b43a46 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs @@ -12,6 +12,7 @@ using NzbDrone.Common.Extensions; using System.Collections.Generic; using NzbDrone.Test.Common; +using NzbDrone.Common.Disk; namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture { @@ -47,10 +48,15 @@ public static IEnumerable TestCases private readonly string testdir = Path.Combine(TestContext.CurrentContext.TestDirectory, "Files", "Media"); private string copiedFile; private AudioTag testTags; + private IDiskProvider _diskProvider; [SetUp] public void Setup() { + _diskProvider = Mocker.Resolve("ActualDiskProvider"); + + Mocker.SetConstant(_diskProvider); + Mocker.GetMock() .Setup(x => x.WriteAudioTags) .Returns(WriteAudioTagsType.Sync); @@ -344,6 +350,7 @@ private TrackFile GivenPopulatedTrackfile() var file = Builder.CreateNew() .With(x => x.Tracks = new List { tracks[0] }) + .With(x => x.Artist = artist) .Build(); return file; @@ -357,5 +364,24 @@ public void get_metadata_should_not_fail_with_missing_country() tag.MusicBrainzReleaseCountry.Should().BeNull(); } + + [TestCase("nin.mp3")] + public void write_tags_should_update_trackfile_size_and_modified(string filename) + { + Mocker.GetMock() + .Setup(x => x.ScrubAudioTags) + .Returns(true); + + GivenFileCopy(filename); + + var file = GivenPopulatedTrackfile(); + + file.Path = copiedFile; + Subject.WriteTags(file, false, true); + + var fileInfo = _diskProvider.GetFileInfo(file.Path); + file.Modified.Should().Be(fileInfo.LastWriteTimeUtc); + file.Size.Should().Be(fileInfo.Length); + } } } diff --git a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs index 8aae5cacb..36f053239 100644 --- a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs +++ b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs @@ -104,10 +104,13 @@ public AudioTag GetTrackMetadata(TrackFile trackfile) }; } - private void UpdateTrackfileSize(TrackFile trackfile, string path) + private void UpdateTrackfileSizeAndModified(TrackFile trackfile, string path) { // update the saved file size so that the importer doesn't get confused on the next scan - trackfile.Size = _diskProvider.GetFileSize(path); + var fileInfo = _diskProvider.GetFileInfo(path); + trackfile.Size = fileInfo.Length; + trackfile.Modified = fileInfo.LastWriteTimeUtc; + if (trackfile.Id > 0) { _mediaFileService.Update(trackfile); @@ -190,7 +193,7 @@ public void WriteTags(TrackFile trackfile, bool newDownload, bool force = false) _logger.Debug($"Writing tags for {trackfile}"); newTags.Write(path); - UpdateTrackfileSize(trackfile, path); + UpdateTrackfileSizeAndModified(trackfile, path); _eventAggregator.PublishEvent(new TrackFileRetaggedEvent(trackfile.Artist.Value, trackfile, diff, _configService.ScrubAudioTags)); } @@ -276,7 +279,7 @@ public void RemoveMusicBrainzTags(TrackFile trackfile) RemoveMusicBrainzTags(path); - UpdateTrackfileSize(trackfile, path); + UpdateTrackfileSizeAndModified(trackfile, path); } public List GetRetagPreviewsByArtist(int artistId)