mirror of
https://github.com/Sonarr/Sonarr.git
synced 2026-04-18 21:35:27 -04:00
59 lines
2.5 KiB
C#
59 lines
2.5 KiB
C#
using System.Linq;
|
|
using NLog;
|
|
using NzbDrone.Core.CustomFormats;
|
|
using NzbDrone.Core.IndexerSearch.Definitions;
|
|
using NzbDrone.Core.Parser.Model;
|
|
|
|
namespace NzbDrone.Core.DecisionEngine.Specifications
|
|
{
|
|
public class UpgradeAllowedSpecification : IDownloadDecisionEngineSpecification
|
|
{
|
|
private readonly UpgradableSpecification _upgradableSpecification;
|
|
private readonly ICustomFormatCalculationService _formatService;
|
|
private readonly Logger _logger;
|
|
|
|
public UpgradeAllowedSpecification(UpgradableSpecification upgradableSpecification,
|
|
ICustomFormatCalculationService formatService,
|
|
Logger logger)
|
|
{
|
|
_upgradableSpecification = upgradableSpecification;
|
|
_formatService = formatService;
|
|
_logger = logger;
|
|
}
|
|
|
|
public SpecificationPriority Priority => SpecificationPriority.Default;
|
|
public RejectionType Type => RejectionType.Permanent;
|
|
|
|
public virtual DownloadSpecDecision IsSatisfiedBy(RemoteEpisode subject, SearchCriteriaBase searchCriteria)
|
|
{
|
|
var qualityProfile = subject.Series.QualityProfile.Value;
|
|
|
|
foreach (var file in subject.Episodes.Where(c => c.EpisodeFileId != 0).Select(c => c.EpisodeFile.Value))
|
|
{
|
|
if (file == null)
|
|
{
|
|
_logger.Debug("File is no longer available, skipping this file.");
|
|
continue;
|
|
}
|
|
|
|
var fileCustomFormats = _formatService.ParseCustomFormat(file, subject.Series);
|
|
|
|
_logger.Debug("Comparing file quality with report. Existing file is {0}", file.Quality);
|
|
|
|
if (!_upgradableSpecification.IsUpgradeAllowed(qualityProfile,
|
|
file.Quality,
|
|
fileCustomFormats,
|
|
subject.ParsedEpisodeInfo.Quality,
|
|
subject.CustomFormats))
|
|
{
|
|
_logger.Debug("Upgrading is not allowed by the quality profile");
|
|
|
|
return DownloadSpecDecision.Reject(DownloadRejectionReason.QualityUpgradesDisabled, "Existing file and the Quality profile does not allow upgrades");
|
|
}
|
|
}
|
|
|
|
return DownloadSpecDecision.Accept();
|
|
}
|
|
}
|
|
}
|