From b6ed048f940d9e7a7de10d97fc8287e27a35cc3e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 7 Feb 2013 17:47:24 -0800 Subject: [PATCH] Ignore specials when doing sample check #ND-168 fixed Fixed: Ignore sample check when importing specials (Season 0) --- .../ImportFileFixture.cs | 84 ++++++++++++++++--- NzbDrone.Core/Providers/DiskScanProvider.cs | 21 +++-- 2 files changed, 85 insertions(+), 20 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs index 3181147fd..6b4c7338c 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/ImportFileFixture.cs @@ -28,6 +28,16 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests }; private readonly long SIZE = 80.Megabytes(); + private Series _series; + + [SetUp] + public void Setup() + { + _series = Builder + .CreateNew() + .With(s => s.IsDaily = false) + .Build(); + } public void With80MBFile() { @@ -36,6 +46,11 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Returns(80.Megabytes()); } + public void WithDailySeries() + { + _series.IsDaily = true; + } + [Test] public void import_new_file_should_succeed() { @@ -403,10 +418,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests [Test] public void should_return_null_if_file_size_is_under_70MB_and_runTime_under_3_minutes() { - var series = Builder - .CreateNew() - .Build(); - const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; Mocker.GetMock() @@ -421,14 +432,12 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Setup(s => s.GetRunTime(path)) .Returns(60); - Mocker.Resolve().ImportFile(series, path).Should().BeNull(); + Mocker.Resolve().ImportFile(_series, path).Should().BeNull(); } [Test] public void should_import_if_file_size_is_under_70MB_but_runTime_over_3_minutes() { - var fakeSeries = Builder.CreateNew().Build(); - var fakeEpisode = Builder.CreateNew() .With(e => e.EpisodeFileId = 0) .With(e => e.EpisodeFile = null) @@ -451,7 +460,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); - var result = Mocker.Resolve().ImportFile(fakeSeries, path); + var result = Mocker.Resolve().ImportFile(_series, path); VerifyFileImport(result, Mocker, fakeEpisode, 20.Megabytes()); Mocker.GetMock().Verify(p => p.DeleteFile(It.IsAny()), Times.Never()); @@ -462,8 +471,6 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests { With80MBFile(); - var fakeSeries = Builder.CreateNew().Build(); - var fakeEpisode = Builder.CreateNew() .With(e => e.EpisodeFileId = 0) .With(e => e.EpisodeFile = null) @@ -482,12 +489,67 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests Mocker.GetMock() .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); - var result = Mocker.Resolve().ImportFile(fakeSeries, path); + var result = Mocker.Resolve().ImportFile(_series, path); VerifyFileImport(result, Mocker, fakeEpisode, SIZE); Mocker.GetMock().Verify(p => p.DeleteFile(It.IsAny()), Times.Never()); } + [Test] + public void should_import_special_even_if_file_size_is_under_70MB_and_runTime_under_3_minutes() + { + With80MBFile(); + + var fakeEpisode = Builder.CreateNew() + .With(e => e.EpisodeFileId = 0) + .With(e => e.EpisodeFile = null) + .Build(); + + const string path = @"C:\Test\TV\30.rock.s00e01.pre-pilot.avi"; + + Mocker.GetMock() + .Setup(m => m.Exists(path)) + .Returns(false); + + Mocker.GetMock() + .Setup(d => d.GetSize(path)) + .Returns(20.Megabytes()); + + Mocker.GetMock() + .Setup(s => s.GetRunTime(path)) + .Returns(60); + + Mocker.GetMock() + .Setup(e => e.GetEpisodesByParseResult(It.IsAny())).Returns(new List { fakeEpisode }); + + var result = Mocker.Resolve().ImportFile(_series, path); + + VerifyFileImport(result, Mocker, fakeEpisode, 20.Megabytes()); + Mocker.GetMock().Verify(p => p.DeleteFile(It.IsAny()), Times.Never()); + } + + [Test] + public void should_return_null_if_daily_series_with_file_size_is_under_70MB_and_runTime_under_3_minutes() + { + WithDailySeries(); + + const string path = @"C:\Test\TV\30.rock.s01e01.pilot.avi"; + + Mocker.GetMock() + .Setup(m => m.Exists(path)) + .Returns(false); + + Mocker.GetMock() + .Setup(d => d.GetSize(path)) + .Returns(20.Megabytes()); + + Mocker.GetMock() + .Setup(s => s.GetRunTime(path)) + .Returns(60); + + Mocker.Resolve().ImportFile(_series, path).Should().BeNull(); + } + private static void VerifyFileImport(EpisodeFile result, AutoMoqer Mocker, Episode fakeEpisode, long size) { result.Should().NotBeNull(); diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index 62eec4eec..51f3572a2 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -111,20 +111,23 @@ namespace NzbDrone.Core.Providers return null; } - long size = _diskProvider.GetSize(filePath); - var runTime = _mediaInfoProvider.GetRunTime(filePath); - - if(size < Constants.IgnoreFileSize && runTime < 180) - { - Logger.Trace("[{0}] appears to be a sample. skipping.", filePath); - return null; - } - var parseResult = Parser.ParsePath(filePath); if (parseResult == null) return null; + var size = _diskProvider.GetSize(filePath); + var runTime = _mediaInfoProvider.GetRunTime(filePath); + + if(series.IsDaily || parseResult.SeasonNumber > 0) + { + if (size < Constants.IgnoreFileSize && runTime < 180) + { + Logger.Trace("[{0}] appears to be a sample. skipping.", filePath); + return null; + } + } + if (!_diskProvider.IsChildOfPath(filePath, series.Path)) parseResult.SceneSource = true;