Radarr/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradeDiskSpecification.cs

53 lines
2.2 KiB
C#
Raw Normal View History

using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.CustomFormats;
using NzbDrone.Core.IndexerSearch.Definitions;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.DecisionEngine.Specifications
{
2013-04-07 07:30:37 +00:00
public class UpgradeDiskSpecification : IDecisionEngineSpecification
{
private readonly UpgradableSpecification _qualityUpgradableSpecification;
private readonly ICustomFormatCalculationService _formatService;
private readonly Logger _logger;
public UpgradeDiskSpecification(UpgradableSpecification qualityUpgradableSpecification,
ICustomFormatCalculationService formatService,
Logger logger)
{
_qualityUpgradableSpecification = qualityUpgradableSpecification;
_formatService = formatService;
_logger = logger;
}
public SpecificationPriority Priority => SpecificationPriority.Default;
2016-12-09 06:54:15 +00:00
public RejectionType Type => RejectionType.Permanent;
public virtual Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria)
{
if (subject.Movie.MovieFile == null)
{
return Decision.Accept();
}
2023-08-15 02:20:03 +00:00
var profile = subject.Movie.QualityProfile;
var file = subject.Movie.MovieFile;
file.Movie = subject.Movie;
var customFormats = _formatService.ParseCustomFormat(file);
_logger.Debug("Comparing file quality with report. Existing file is {0} [{1}]", file.Quality, customFormats.ConcatToString());
2019-12-22 21:24:11 +00:00
if (!_qualityUpgradableSpecification.IsUpgradable(profile,
file.Quality,
customFormats,
subject.ParsedMovieInfo.Quality,
subject.CustomFormats))
2019-12-22 22:08:53 +00:00
{
return Decision.Reject("Quality for existing file on disk is of equal or higher preference: {0} [{1}]", file.Quality, customFormats.ConcatToString());
2019-12-22 22:08:53 +00:00
}
return Decision.Accept();
}
}
}