From 4ac9fd939a41b25f82ae070f8bc7b0ab5ba55282 Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Mon, 22 Dec 2014 11:25:23 -0800 Subject: [PATCH] Fix: consider download completed if all remote episodes are imported --- .../CompletedDownloadServiceFixture.cs | 35 +++++++++++++++++-- .../Download/CompletedDownloadService.cs | 11 +++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs index b90b36948..ba410b4bb 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs @@ -181,13 +181,44 @@ namespace NzbDrone.Core.Test.Download } [Test] - public void should_not_mark_as_imported_if_some_files_were_skipped() + public void should_mark_as_imported_if_all_episodes_were_imported_but_extra_files_were_not() { + + _trackedDownload.RemoteEpisode.Episodes = new List + { + new Episode() + }; + + Mocker.GetMock() + .Setup(v => v.ProcessPath(It.IsAny(), It.IsAny())) + .Returns(new List + { + new ImportResult(new ImportDecision(new LocalEpisode {Path = @"C:\TestPath\Droned.S01E01.mkv"})), + new ImportResult(new ImportDecision(new LocalEpisode{Path = @"C:\TestPath\Droned.S01E01.mkv"}),"Test Failure") + }); + + + Subject.Process(_trackedDownload); + + AssertCompletedDownload(); + } + + [Test] + public void should_mark_as_failed_if_some_of_episodes_were_not_imported() + { + _trackedDownload.RemoteEpisode.Episodes = new List + { + new Episode(), + new Episode(), + new Episode() + }; + Mocker.GetMock() .Setup(v => v.ProcessPath(It.IsAny(), It.IsAny())) .Returns(new List { new ImportResult(new ImportDecision(new LocalEpisode {Path = @"C:\TestPath\Droned.S01E01.mkv"})), + new ImportResult(new ImportDecision(new LocalEpisode{Path = @"C:\TestPath\Droned.S01E01.mkv"}),"Test Failure"), new ImportResult(new ImportDecision(new LocalEpisode{Path = @"C:\TestPath\Droned.S01E01.mkv"}),"Test Failure") }); @@ -218,7 +249,7 @@ namespace NzbDrone.Core.Test.Download { Mocker.GetMock() .Verify(v => v.ProcessPath(_trackedDownload.DownloadItem.OutputPath.FullPath, _trackedDownload.DownloadItem), Times.Once()); - + _trackedDownload.State.Should().Be(TrackedDownloadStage.Imported); } } diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index 6b8226f13..316b5dac2 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -79,6 +79,13 @@ namespace NzbDrone.Core.Download return; } + if (importResults.Count(c => c.Result == ImportResultType.Imported) >= trackedDownload.RemoteEpisode.Episodes.Count) + { + trackedDownload.State = TrackedDownloadStage.Imported; + _eventAggregator.PublishEvent(new DownloadCompletedEvent(trackedDownload)); + return; + } + if (importResults.Any(c => c.Result != ImportResultType.Imported)) { var statusMessages = importResults @@ -87,12 +94,8 @@ namespace NzbDrone.Core.Download .ToArray(); trackedDownload.Warn(statusMessages); - return; } - trackedDownload.State = TrackedDownloadStage.Imported; - _eventAggregator.PublishEvent(new DownloadCompletedEvent(trackedDownload)); - } } }