using System.Linq; using System.Collections.Generic; using NzbDrone.Core.Profiles.Delay; namespace NzbDrone.Core.DecisionEngine { public interface IPrioritizeDownloadDecision { List PrioritizeDecisions(List decisions); } public class DownloadDecisionPriorizationService : IPrioritizeDownloadDecision { private readonly IDelayProfileService _delayProfileService; public DownloadDecisionPriorizationService(IDelayProfileService delayProfileService) { _delayProfileService = delayProfileService; } public List PrioritizeDecisions(List decisions) { return decisions.Where(c => c.RemoteEpisode.Series != null) .GroupBy(c => c.RemoteEpisode.Series.Id, (seriesId, downloadDecisions) => { return downloadDecisions.OrderByDescending(decision => decision, new DownloadDecisionComparer(_delayProfileService)); }) .SelectMany(c => c) .Union(decisions.Where(c => c.RemoteEpisode.Series == null)) .ToList(); } } }