From 27f43569f55ad010215e0fa32613fcbac4eb3c2f Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 5 Aug 2019 13:55:19 -0700 Subject: [PATCH] Fixed: Edge case where import fails due to DB relationship mismatch Closes #3243 --- .../Specifications/SameFileSpecificationFixture.cs | 14 ++++++++++++++ .../Specifications/SameFileSpecification.cs | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/SameFileSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/SameFileSpecificationFixture.cs index 01853ee3b..1c52b0740 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/SameFileSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/SameFileSpecificationFixture.cs @@ -3,6 +3,7 @@ using FizzWare.NBuilder; using FluentAssertions; using Marr.Data; using NUnit.Framework; +using NzbDrone.Core.Datastore; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.EpisodeImport.Specifications; using NzbDrone.Core.Parser.Model; @@ -92,5 +93,18 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeFalse(); } + + [Test] + public void should_be_accepted_if_file_cannot_be_fetched() + { + _localEpisode.Episodes = Builder.CreateListOfSize(1) + .TheFirst(1) + .With(e => e.EpisodeFileId = 1) + .With(e => e.EpisodeFile = new LazyLoaded((EpisodeFile)null)) + .Build() + .ToList(); + + Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeTrue(); + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameFileSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameFileSpecification.cs index 9876ff492..1aa54e804 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameFileSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/SameFileSpecification.cs @@ -30,6 +30,16 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications return Decision.Accept(); } + var episodeFile = episodeFiles.First().Value; + + if (episodeFile == null) + { + var episode = localEpisode.Episodes.First(); + _logger.Trace("Unable to get episode file details from the DB. EpisodeId: {0} EpisodeFileId: {1}", episode.Id, episode.EpisodeFileId); + + return Decision.Accept(); + } + if (episodeFiles.First().Value.Size == localEpisode.Size) { _logger.Debug("'{0}' Has the same filesize as existing file", localEpisode.Path);