diff --git a/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs index 5aa6ae0f5..bba1c5ea0 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/AudioTagServiceFixture.cs @@ -5,12 +5,15 @@ using System.IO; using System.Linq; using FizzWare.NBuilder; using FluentAssertions; +using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Core.Books; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaFiles; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; using NzbDrone.Test.Common.AutoMoq; @@ -166,7 +169,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture } [Test] - [TestCaseSource(typeof(TestCaseFactory), "TestCases")] + [TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))] public void should_read_duration(string filename, string[] ignored) { var path = Path.Combine(_testdir, filename); @@ -177,7 +180,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture } [Test] - [TestCaseSource(typeof(TestCaseFactory), "TestCases")] + [TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))] public void should_read_write_tags(string filename, string[] skipProperties) { GivenFileCopy(filename); @@ -198,7 +201,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture } [Test] - [TestCaseSource(typeof(TestCaseFactory), "TestCases")] + [TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))] public void should_read_audiotag_from_file_with_no_tags(string filename, string[] skipProperties) { GivenFileCopy(filename); @@ -220,7 +223,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture } [Test] - [TestCaseSource(typeof(TestCaseFactory), "TestCases")] + [TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))] public void should_read_parsedtrackinfo_from_file_with_no_tags(string filename, string[] skipProperties) { GivenFileCopy(filename); @@ -235,7 +238,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture } [Test] - [TestCaseSource(typeof(TestCaseFactory), "TestCases")] + [TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))] public void should_set_quality_and_mediainfo_for_corrupt_file(string filename, string[] skipProperties) { // use missing to simulate corrupt @@ -250,7 +253,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture } [Test] - [TestCaseSource(typeof(TestCaseFactory), "TestCases")] + [TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))] public void should_read_file_with_only_title_tag(string filename, string[] ignored) { GivenFileCopy(filename); @@ -270,7 +273,7 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture } [Test] - [TestCaseSource(typeof(TestCaseFactory), "TestCases")] + [TestCaseSource(typeof(TestCaseFactory), nameof(TestCaseFactory.TestCases))] public void should_remove_date_from_tags_when_not_in_metadata(string filename, string[] ignored) { GivenFileCopy(filename); @@ -365,6 +368,29 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture var fileInfo = _diskProvider.GetFileInfo(file.Path); file.Modified.Should().Be(fileInfo.LastWriteTimeUtc); file.Size.Should().Be(fileInfo.Length); + + Mocker.GetMock() + .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); + } + + [TestCase("nin.mp3")] + public void write_tags_should_not_update_tags_if_already_updated(string filename) + { + Mocker.GetMock() + .Setup(x => x.ScrubAudioTags) + .Returns(true); + + GivenFileCopy(filename); + + var file = GivenPopulatedTrackfile(0); + + file.Path = _copiedFile; + Subject.WriteTags(file, false, true); + Subject.WriteTags(file, false, true); + Subject.WriteTags(file, false, true); + + Mocker.GetMock() + .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); } [Test] diff --git a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs index 1141aa7a2..0800a309f 100644 --- a/src/NzbDrone.Core/MediaFiles/AudioTagService.cs +++ b/src/NzbDrone.Core/MediaFiles/AudioTagService.cs @@ -174,6 +174,12 @@ namespace NzbDrone.Core.MediaFiles var diff = ReadAudioTag(path).Diff(newTags); + if (!diff.Any()) + { + _logger.Debug("No tags update for {0} due to no difference", trackfile); + return; + } + _rootFolderWatchingService.ReportFileSystemChangeBeginning(path); if (_configService.ScrubAudioTags)