diff --git a/src/NzbDrone.Core/Download/DownloadProcessingService.cs b/src/NzbDrone.Core/Download/DownloadProcessingService.cs index 067c37da4..3b1b5e1d6 100644 --- a/src/NzbDrone.Core/Download/DownloadProcessingService.cs +++ b/src/NzbDrone.Core/Download/DownloadProcessingService.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using NLog; using NzbDrone.Core.Configuration; using NzbDrone.Core.Download.TrackedDownloads; @@ -31,9 +32,13 @@ namespace NzbDrone.Core.Download _logger = logger; } - private void RemoveCompletedDownloads(List trackedDownloads) + private void RemoveCompletedDownloads() { - foreach (var trackedDownload in trackedDownloads.Where(c => c.DownloadItem.CanBeRemoved && c.State == TrackedDownloadState.Imported)) + var trackedDownloads = _trackedDownloadService.GetTrackedDownloads() + .Where(t => !t.DownloadItem.Removed && t.DownloadItem.CanBeRemoved && t.State == TrackedDownloadState.Imported) + .ToList(); + + foreach (var trackedDownload in trackedDownloads) { _eventAggregator.PublishEvent(new DownloadCompletedEvent(trackedDownload)); } @@ -54,21 +59,10 @@ namespace NzbDrone.Core.Download if (trackedDownload.State == TrackedDownloadState.DownloadFailedPending) { _failedDownloadService.ProcessFailed(trackedDownload); - continue; } - - if (enableCompletedDownloadHandling && trackedDownload.State == TrackedDownloadState.ImportPending) + else if (enableCompletedDownloadHandling && trackedDownload.State == TrackedDownloadState.ImportPending) { _completedDownloadService.Import(trackedDownload); - continue; - } - - if (removeCompletedDownloads && - trackedDownload.DownloadItem.Removed && - trackedDownload.DownloadItem.CanBeRemoved && - trackedDownload.State == TrackedDownloadState.Imported) - { - _eventAggregator.PublishEvent(new DownloadCanBeRemovedEvent(trackedDownload)); } } catch (Exception e) @@ -77,6 +71,12 @@ namespace NzbDrone.Core.Download } } + // Imported downloads are no longer trackable so process them after processing trackable downloads + if (removeCompletedDownloads) + { + RemoveCompletedDownloads(); + } + _eventAggregator.PublishEvent(new DownloadsProcessedEvent()); } }