using System.Linq; using NLog; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.DecisionEngine.Specifications { public class UpgradeDiskSpecification : IDecisionEngineSpecification { private readonly UpgradableSpecification _qualityUpgradableSpecification; private readonly Logger _logger; public UpgradeDiskSpecification(UpgradableSpecification qualityUpgradableSpecification, Logger logger) { _qualityUpgradableSpecification = qualityUpgradableSpecification; _logger = logger; } public SpecificationPriority Priority => SpecificationPriority.Default; public RejectionType Type => RejectionType.Permanent; public virtual Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria) { if (subject.Movie.MovieFile == null) { return Decision.Accept(); } var file = subject.Movie.MovieFile; _logger.Debug("Comparing file quality with report. Existing file is {0}", file.Quality); if (!_qualityUpgradableSpecification.IsUpgradable(subject.Movie.Profile, file.Quality, subject.ParsedMovieInfo.Quality)) { return Decision.Reject("Quality for existing file on disk is of equal or higher preference: {0}", file.Quality); } return Decision.Accept(); } } }