diff --git a/src/NzbDrone.Core/Download/FailedDownloadService.cs b/src/NzbDrone.Core/Download/FailedDownloadService.cs index 0dd698740..f26741ca8 100644 --- a/src/NzbDrone.Core/Download/FailedDownloadService.cs +++ b/src/NzbDrone.Core/Download/FailedDownloadService.cs @@ -38,12 +38,23 @@ namespace NzbDrone.Core.Download if (downloadId.IsNullOrWhiteSpace()) { PublishDownloadFailedEvent(new List { history }, "Manually marked as failed"); + + return; } - else + + 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 == EpisodeHistoryEventType.Grabbed) { - var grabbedHistory = _historyService.Find(downloadId, EpisodeHistoryEventType.Grabbed).ToList(); - PublishDownloadFailedEvent(grabbedHistory, "Manually marked as failed"); + grabbedHistory.Add(history); } + + // Add any other history items for the download ID then filter out any duplicate history items. + grabbedHistory.AddRange(_historyService.Find(downloadId, EpisodeHistoryEventType.Grabbed)); + grabbedHistory = grabbedHistory.DistinctBy(h => h.Id).ToList(); + + PublishDownloadFailedEvent(grabbedHistory, "Manually marked as failed"); } public void MarkAsFailed(string downloadId) @@ -121,7 +132,7 @@ namespace NzbDrone.Core.Download var downloadFailedEvent = new DownloadFailedEvent { SeriesId = historyItem.SeriesId, - EpisodeIds = historyItems.Select(h => h.EpisodeId).ToList(), + EpisodeIds = historyItems.Select(h => h.EpisodeId).Distinct().ToList(), Quality = historyItem.Quality, SourceTitle = historyItem.SourceTitle, DownloadClient = historyItem.Data.GetValueOrDefault(EpisodeHistory.DOWNLOAD_CLIENT),