diff --git a/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/SameFileSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/SameFileSpecificationFixture.cs index 920fec899..c77f00504 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/SameFileSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/TrackImport/Specifications/SameFileSpecificationFixture.cs @@ -92,5 +92,18 @@ public void should_be_reject_if_file_size_is_the_same() Subject.IsSatisfiedBy(_localTrack, null).Accepted.Should().BeFalse(); } + + [Test] + public void should_be_accepted_if_file_cannot_be_fetched() + { + _localTrack.Tracks = Builder.CreateListOfSize(1) + .TheFirst(1) + .With(e => e.TrackFileId = 1) + .With(e => e.TrackFile = new LazyLoaded((TrackFile)null)) + .Build() + .ToList(); + + Subject.IsSatisfiedBy(_localTrack, null).Accepted.Should().BeTrue(); + } } } diff --git a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameFileSpecification.cs b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameFileSpecification.cs index 1453c4e2f..b01f06e50 100644 --- a/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameFileSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/TrackImport/Specifications/SameFileSpecification.cs @@ -15,9 +15,9 @@ public SameFileSpecification(Logger logger) _logger = logger; } - public Decision IsSatisfiedBy(LocalTrack item, DownloadClientItem downloadClientItem) + public Decision IsSatisfiedBy(LocalTrack localTrack, DownloadClientItem downloadClientItem) { - var trackFiles = item.Tracks.Where(e => e.TrackFileId != 0).Select(e => e.TrackFile).ToList(); + var trackFiles = localTrack.Tracks.Where(e => e.TrackFileId != 0).Select(e => e.TrackFile).ToList(); if (trackFiles.Count == 0) { @@ -31,9 +31,19 @@ public Decision IsSatisfiedBy(LocalTrack item, DownloadClientItem downloadClient return Decision.Accept(); } - if (trackFiles.First().Value.Size == item.Size) + var trackFile = trackFiles.First().Value; + + if (trackFile == null) { - _logger.Debug("'{0}' Has the same filesize as existing file", item.Path); + var track = localTrack.Tracks.First(); + _logger.Trace("Unable to get track file details from the DB. TrackId: {0} TrackFileId: {1}", track.Id, track.TrackFileId); + + return Decision.Accept(); + } + + if (trackFiles.First().Value.Size == localTrack.Size) + { + _logger.Debug("'{0}' Has the same filesize as existing file", localTrack.Path); return Decision.Reject("Has the same filesize as existing file"); }