diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecificationFixture.cs index e2704af6be..764eb5a771 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecificationFixture.cs @@ -29,6 +29,13 @@ public void Setup() }; } + [Test] + public void should_return_true_if_no_fileinfo_available() + { + _localEpisode.FileEpisodeInfo = null; + Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeTrue(); + } + [Test] public void should_return_false_when_file_contains_the_full_season() { diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs index dc6880cd6f..cab1754dd8 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecificationFixture.cs @@ -50,6 +50,15 @@ public void should_be_accepted_if_folder_name_is_not_parseable() Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeTrue(); } + [Test] + public void should_be_accepted_if_file_name_is_not_parseable() + { + _localEpisode.Path = @"C:\Test\Unsorted\Series.Title.S01E01\AFDAFD.mkv".AsOsAgnostic(); + _localEpisode.FileEpisodeInfo = null; + + Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeTrue(); + } + [Test] public void should_should_be_accepted_for_full_season() { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecification.cs index 37ecbbf40a..64734ed011 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/FullSeasonSpecification.cs @@ -16,6 +16,11 @@ public FullSeasonSpecification(Logger logger) public Decision IsSatisfiedBy(LocalEpisode localEpisode, DownloadClientItem downloadClientItem) { + if (localEpisode.FileEpisodeInfo == null) + { + return Decision.Accept(); + } + if (localEpisode.FileEpisodeInfo.FullSeason) { _logger.Debug("Single episode file detected as containing all episodes in the season"); diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs index 2f69ea95c8..8c85ad9589 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/MatchesFolderSpecification.cs @@ -34,11 +34,19 @@ public Decision IsSatisfiedBy(LocalEpisode localEpisode, DownloadClientItem down if (folderInfo == null) { + _logger.Debug("No folder ParsedEpisodeInfo, skipping check"); + return Decision.Accept(); + } + + if (fileInfo == null) + { + _logger.Debug("No file ParsedEpisodeInfo, skipping check"); return Decision.Accept(); } if (!folderInfo.EpisodeNumbers.Any()) { + _logger.Debug("No episode numbers in folder ParsedEpisodeInfo, skipping check"); return Decision.Accept(); }