using System.Linq; using NLog; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.DecisionEngine.Specifications { public class UpgradeAllowedSpecification : IDecisionEngineSpecification { private readonly UpgradableSpecification _upgradableSpecification; private readonly Logger _logger; public UpgradeAllowedSpecification(UpgradableSpecification upgradableSpecification, Logger logger) { _upgradableSpecification = upgradableSpecification; _logger = logger; } public SpecificationPriority Priority => SpecificationPriority.Default; public RejectionType Type => RejectionType.Permanent; public virtual Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria) { var qualityProfile = subject.Movie.Profile; if (subject.Movie.MovieFileId != 0) { var file = subject.Movie.MovieFile; if (file == null) { _logger.Debug("File is no longer available, skipping this file."); return Decision.Accept(); } _logger.Debug("Comparing file quality with report. Existing file is {0}", file.Quality); if (!_upgradableSpecification.IsUpgradeAllowed(qualityProfile, file.Quality, subject.ParsedMovieInfo.Quality)) { _logger.Debug("Upgrading is not allowed by the quality profile"); return Decision.Reject("Existing file and the Quality profile does not allow upgrades"); } } return Decision.Accept(); } } }