diff --git a/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs b/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs index d437898e9..dd4c11966 100644 --- a/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs +++ b/src/NzbDrone.Core/Download/Pending/PendingReleaseService.cs @@ -134,7 +134,17 @@ namespace NzbDrone.Core.Download.Pending } } - return queued; + //Return best quality release for each episode + var deduped = queued.GroupBy(q => q.Episode.Id).Select(g => + { + var series = g.First().Series; + + return g.OrderByDescending(e => e.Quality, new QualityModelComparer(series.Profile)) + .ThenBy(q => PrioritizeDownloadProtocol(q.Series, q.Protocol)) + .First(); + }); + + return deduped.ToList(); } public Queue.Queue FindPendingQueueItem(int queueId) @@ -288,6 +298,18 @@ namespace NzbDrone.Core.Download.Pending return HashConverter.GetHashInt31(String.Format("pending-{0}-ep{1}", pendingRelease.Id, episode.Id)); } + private int PrioritizeDownloadProtocol(Series series, DownloadProtocol downloadProtocol) + { + var delayProfile = _delayProfileService.BestForTags(series.Tags); + + if (downloadProtocol == delayProfile.PreferredProtocol) + { + return 0; + } + + return 1; + } + public void Handle(SeriesDeletedEvent message) { _repository.DeleteBySeriesId(message.Series.Id);