From 609585510290a14f827ef6547e2fd037c43b2ff2 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Sun, 22 Feb 2015 13:43:14 +0100 Subject: [PATCH] Fixed: Failed download handling should now only report a download wasn't grabbed by sonarr if the download actually failed. --- .../Download/FailedDownloadServiceFixture.cs | 22 +++++++++++++++ .../Download/FailedDownloadService.cs | 28 +++++++++++-------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/FailedDownloadServiceFixture.cs b/src/NzbDrone.Core.Test/Download/FailedDownloadServiceFixture.cs index 73d503a4b..42b589e6b 100644 --- a/src/NzbDrone.Core.Test/Download/FailedDownloadServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Download/FailedDownloadServiceFixture.cs @@ -68,6 +68,28 @@ namespace NzbDrone.Core.Test.Download AssertDownloadNotFailed(); } + [Test] + public void should_warn_if_matching_history_is_not_found() + { + _trackedDownload.DownloadItem.Status = DownloadItemStatus.Failed; + GivenNoGrabbedHistory(); + + Subject.Process(_trackedDownload); + + _trackedDownload.StatusMessages.Should().NotBeEmpty(); + } + + [Test] + public void should_not_warn_if_matching_history_is_not_found_and_not_failed() + { + _trackedDownload.DownloadItem.Status = DownloadItemStatus.Failed; + GivenNoGrabbedHistory(); + + Subject.Process(_trackedDownload); + + _trackedDownload.StatusMessages.Should().NotBeEmpty(); + } + [Test] public void should_mark_failed_if_encrypted() { diff --git a/src/NzbDrone.Core/Download/FailedDownloadService.cs b/src/NzbDrone.Core/Download/FailedDownloadService.cs index 557e849a7..d56349f7f 100644 --- a/src/NzbDrone.Core/Download/FailedDownloadService.cs +++ b/src/NzbDrone.Core/Download/FailedDownloadService.cs @@ -54,24 +54,30 @@ namespace NzbDrone.Core.Download public void Process(TrackedDownload trackedDownload) { - var grabbedItems = _historyService.Find(trackedDownload.DownloadItem.DownloadId, HistoryEventType.Grabbed) - .ToList(); - - if (grabbedItems.Empty()) - { - trackedDownload.Warn("Download wasn't grabbed by sonarr, skipping"); - return; - } + string failure = null; if (trackedDownload.DownloadItem.IsEncrypted) { - trackedDownload.State = TrackedDownloadStage.DownloadFailed; - PublishDownloadFailedEvent(grabbedItems, "Encrypted download detected", trackedDownload); + failure = "Encrypted download detected"; } else if (trackedDownload.DownloadItem.Status == DownloadItemStatus.Failed) { + failure = trackedDownload.DownloadItem.Message ?? "Failed download detected"; + } + + if (failure != null) + { + var grabbedItems = _historyService.Find(trackedDownload.DownloadItem.DownloadId, HistoryEventType.Grabbed) + .ToList(); + + if (grabbedItems.Empty()) + { + trackedDownload.Warn("Download wasn't grabbed by sonarr, skipping"); + return; + } + trackedDownload.State = TrackedDownloadStage.DownloadFailed; - PublishDownloadFailedEvent(grabbedItems, trackedDownload.DownloadItem.Message, trackedDownload); + PublishDownloadFailedEvent(grabbedItems, failure, trackedDownload); } }