using System.Collections.Generic; using System.Linq; using NzbDrone.Core.Configuration; using NzbDrone.Core.Profiles.Delay; using NzbDrone.Core.Qualities; namespace NzbDrone.Core.DecisionEngine { public interface IPrioritizeDownloadDecision { List PrioritizeDecisions(List decisions); } public class DownloadDecisionPriorizationService : IPrioritizeDownloadDecision { private readonly IConfigService _configService; private readonly IDelayProfileService _delayProfileService; private readonly IQualityDefinitionService _qualityDefinitionService; public DownloadDecisionPriorizationService(IConfigService configService, IDelayProfileService delayProfileService, IQualityDefinitionService qualityDefinitionService) { _configService = configService; _delayProfileService = delayProfileService; _qualityDefinitionService = qualityDefinitionService; } public List PrioritizeDecisions(List decisions) { return decisions.Where(c => c.RemoteAlbum.DownloadAllowed) .GroupBy(c => c.RemoteAlbum.Artist.Id, (artistId, downloadDecisions) => { return downloadDecisions.OrderByDescending(decision => decision, new DownloadDecisionComparer(_configService, _delayProfileService, _qualityDefinitionService)); }) .SelectMany(c => c) .Union(decisions.Where(c => !c.RemoteAlbum.DownloadAllowed)) .ToList(); } } }