diff --git a/src/NzbDrone.Core/Blocklisting/BlocklistService.cs b/src/NzbDrone.Core/Blocklisting/BlocklistService.cs index aab321622..33a7d9be0 100644 --- a/src/NzbDrone.Core/Blocklisting/BlocklistService.cs +++ b/src/NzbDrone.Core/Blocklisting/BlocklistService.cs @@ -190,8 +190,10 @@ namespace NzbDrone.Core.Blocklisting Indexer = message.Data.GetValueOrDefault("indexer"), Protocol = (DownloadProtocol)Convert.ToInt32(message.Data.GetValueOrDefault("protocol")), Message = message.Message, - TorrentInfoHash = message.Data.GetValueOrDefault("torrentInfoHash"), - Languages = message.Languages + Languages = message.Languages, + TorrentInfoHash = message.TrackedDownload?.Protocol == DownloadProtocol.Torrent + ? message.TrackedDownload.DownloadItem.DownloadId + : message.Data.GetValueOrDefault("torrentInfoHash", null) }; if (Enum.TryParse(message.Data.GetValueOrDefault("indexerFlags"), true, out IndexerFlags flags)) diff --git a/src/NzbDrone.Core/Download/FailedDownloadService.cs b/src/NzbDrone.Core/Download/FailedDownloadService.cs index 9307e0f17..394de5415 100644 --- a/src/NzbDrone.Core/Download/FailedDownloadService.cs +++ b/src/NzbDrone.Core/Download/FailedDownloadService.cs @@ -12,7 +12,7 @@ namespace NzbDrone.Core.Download public interface IFailedDownloadService { void MarkAsFailed(int historyId, bool skipRedownload = false); - void MarkAsFailed(string downloadId, bool skipRedownload = false); + void MarkAsFailed(TrackedDownload trackedDownload, bool skipRedownload = false); void Check(TrackedDownload trackedDownload); void ProcessFailed(TrackedDownload trackedDownload); } @@ -20,15 +20,12 @@ namespace NzbDrone.Core.Download public class FailedDownloadService : IFailedDownloadService { private readonly IHistoryService _historyService; - private readonly ITrackedDownloadService _trackedDownloadService; private readonly IEventAggregator _eventAggregator; public FailedDownloadService(IHistoryService historyService, - ITrackedDownloadService trackedDownloadService, IEventAggregator eventAggregator) { _historyService = historyService; - _trackedDownloadService = trackedDownloadService; _eventAggregator = eventAggregator; } @@ -37,37 +34,24 @@ namespace NzbDrone.Core.Download var history = _historyService.Get(historyId); var downloadId = history.DownloadId; + if (downloadId.IsNullOrWhiteSpace()) { - PublishDownloadFailedEvent(new List { history }, "Manually marked as failed", skipRedownload: skipRedownload); + PublishDownloadFailedEvent(history, "Manually marked as failed", skipRedownload: skipRedownload); return; } - var grabbedHistory = new List(); - - // If the history item is a grabbed item (it should be, at least from the UI) add it as the first history item - if (history.EventType == MovieHistoryEventType.Grabbed) - { - grabbedHistory.Add(history); - } - - // Add any other history items for the download ID then filter out any duplicate history items. - grabbedHistory.AddRange(_historyService.Find(downloadId, MovieHistoryEventType.Grabbed)); - grabbedHistory = grabbedHistory.DistinctBy(h => h.Id).ToList(); - - PublishDownloadFailedEvent(grabbedHistory, "Manually marked as failed"); + PublishDownloadFailedEvent(history, "Manually marked as failed"); } - public void MarkAsFailed(string downloadId, bool skipRedownload = false) + public void MarkAsFailed(TrackedDownload trackedDownload, bool skipRedownload = false) { - var history = _historyService.Find(downloadId, MovieHistoryEventType.Grabbed); + var history = GetGrabbedHistory(trackedDownload.DownloadItem.DownloadId); if (history.Any()) { - var trackedDownload = _trackedDownloadService.Find(downloadId); - - PublishDownloadFailedEvent(history, "Manually marked as failed", trackedDownload, skipRedownload: skipRedownload); + PublishDownloadFailedEvent(history.First(), "Manually marked as failed", trackedDownload, skipRedownload: skipRedownload); } } @@ -82,9 +66,7 @@ namespace NzbDrone.Core.Download if (trackedDownload.DownloadItem.IsEncrypted || trackedDownload.DownloadItem.Status == DownloadItemStatus.Failed) { - var grabbedItems = _historyService - .Find(trackedDownload.DownloadItem.DownloadId, MovieHistoryEventType.Grabbed) - .ToList(); + var grabbedItems = GetGrabbedHistory(trackedDownload.DownloadItem.DownloadId); if (grabbedItems.Empty()) { @@ -103,9 +85,7 @@ namespace NzbDrone.Core.Download return; } - var grabbedItems = _historyService - .Find(trackedDownload.DownloadItem.DownloadId, MovieHistoryEventType.Grabbed) - .ToList(); + var grabbedItems = GetGrabbedHistory(trackedDownload.DownloadItem.DownloadId); if (grabbedItems.Empty()) { @@ -124,12 +104,11 @@ namespace NzbDrone.Core.Download } trackedDownload.State = TrackedDownloadState.Failed; - PublishDownloadFailedEvent(grabbedItems, failure, trackedDownload); + PublishDownloadFailedEvent(grabbedItems.First(), failure, trackedDownload); } - private void PublishDownloadFailedEvent(List historyItems, string message, TrackedDownload trackedDownload = null, bool skipRedownload = false) + private void PublishDownloadFailedEvent(MovieHistory historyItem, string message, TrackedDownload trackedDownload = null, bool skipRedownload = false) { - var historyItem = historyItems.Last(); Enum.TryParse(historyItem.Data.GetValueOrDefault(MovieHistory.RELEASE_SOURCE, ReleaseSourceType.Unknown.ToString()), out ReleaseSourceType releaseSource); var downloadFailedEvent = new DownloadFailedEvent @@ -144,10 +123,18 @@ namespace NzbDrone.Core.Download TrackedDownload = trackedDownload, Languages = historyItem.Languages, SkipRedownload = skipRedownload, - ReleaseSource = releaseSource + ReleaseSource = releaseSource, }; _eventAggregator.PublishEvent(downloadFailedEvent); } + + private List GetGrabbedHistory(string downloadId) + { + // Sort by date so items are always in the same order + return _historyService.Find(downloadId, MovieHistoryEventType.Grabbed) + .OrderByDescending(h => h.Date) + .ToList(); + } } } diff --git a/src/Radarr.Api.V3/Queue/QueueController.cs b/src/Radarr.Api.V3/Queue/QueueController.cs index 75bba8dd5..5b2e15311 100644 --- a/src/Radarr.Api.V3/Queue/QueueController.cs +++ b/src/Radarr.Api.V3/Queue/QueueController.cs @@ -316,7 +316,7 @@ namespace Radarr.Api.V3.Queue if (blocklist) { - _failedDownloadService.MarkAsFailed(trackedDownload.DownloadItem.DownloadId, skipRedownload); + _failedDownloadService.MarkAsFailed(trackedDownload, skipRedownload); } if (!removeFromClient && !blocklist && !changeCategory)