diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs index ba410b4bb..6bd561f75 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs @@ -77,7 +77,6 @@ namespace NzbDrone.Core.Test.Download }); } - [TestCase(DownloadItemStatus.Downloading)] [TestCase(DownloadItemStatus.Failed)] [TestCase(DownloadItemStatus.Queued)] @@ -92,7 +91,6 @@ namespace NzbDrone.Core.Test.Download AssertNoAttemptedImport(); } - [Test] public void should_not_process_if_matching_history_is_not_found_and_no_category_specified() { @@ -116,8 +114,6 @@ namespace NzbDrone.Core.Test.Download AssertCompletedDownload(); } - - [Test] public void should_not_process_if_storage_directory_in_drone_factory() { @@ -132,7 +128,6 @@ namespace NzbDrone.Core.Test.Download AssertNoAttemptedImport(); } - [Test] public void should_not_process_if_output_path_is_empty() { @@ -143,7 +138,6 @@ namespace NzbDrone.Core.Test.Download AssertNoAttemptedImport(); } - [Test] public void should_not_mark_as_imported_if_all_files_were_rejected() { diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs index 22244a059..61f9a3955 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesImportServiceFixture.cs @@ -210,6 +210,48 @@ namespace NzbDrone.Core.Test.MediaFiles result.First().Result.Should().Be(ImportResultType.Rejected); } + [Test] + public void should_not_delete_if_there_is_large_rar_file() + { + GivenValidSeries(); + + var localEpisode = new LocalEpisode(); + + var imported = new List(); + imported.Add(new ImportDecision(localEpisode)); + + Mocker.GetMock() + .Setup(s => s.GetImportDecisions(It.IsAny>(), It.IsAny(), true, null)) + .Returns(imported); + + Mocker.GetMock() + .Setup(s => s.Import(It.IsAny>(), true, null)) + .Returns(imported.Select(i => new ImportResult(i)).ToList()); + + Mocker.GetMock() + .Setup(s => s.IsSample(It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny())) + .Returns(true); + + Mocker.GetMock() + .Setup(s => s.GetFiles(It.IsAny(), SearchOption.AllDirectories)) + .Returns(new []{ _videoFiles.First().Replace(".ext", ".rar") }); + + Mocker.GetMock() + .Setup(s => s.GetFileSize(It.IsAny())) + .Returns(15.Megabytes()); + + Subject.ProcessRootFolder(new DirectoryInfo(_droneFactory)); + + Mocker.GetMock() + .Verify(v => v.DeleteFolder(It.IsAny(), true), Times.Never()); + + ExceptionVerification.ExpectedWarns(1); + } + private void VerifyNoImport() { Mocker.GetMock().Verify(c => c.Import(It.IsAny>(), true, null), diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs index ff8caf8ab..9b33ac9bb 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs @@ -48,8 +48,6 @@ namespace NzbDrone.Core.MediaFiles return _downloadedEpisodesImportService.ProcessRootFolder(new DirectoryInfo(downloadedEpisodesFolder)); } - - public void Execute(DownloadedEpisodesScanCommand message) { var importResults = ProcessDroneFactoryFolder(); diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs index bd27654a6..e1c9376a4 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesImportService.cs @@ -183,6 +183,7 @@ namespace NzbDrone.Core.MediaFiles private bool ShouldDeleteFolder(DirectoryInfo directoryInfo, Series series) { var videoFiles = _diskScanService.GetVideoFiles(directoryInfo.FullName); + var rarFiles = _diskProvider.GetFiles(directoryInfo.FullName, SearchOption.AllDirectories).Where(f => Path.GetExtension(f) == ".rar"); foreach (var videoFile in videoFiles) { @@ -205,6 +206,12 @@ namespace NzbDrone.Core.MediaFiles } } + if (rarFiles.Any(f => _diskProvider.GetFileSize(f) > 10.Megabytes())) + { + _logger.Warn("RAR file detected, will require manual cleanup"); + return false; + } + return true; }