From d64ee6681f0e05f9c7d6ebe3e9193f251fb28354 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 19 Jan 2024 09:40:51 +0200 Subject: [PATCH] Fixed: Avoid upgrades for custom formats cut-off already met --- .../Specifications/UpgradableSpecification.cs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs index ed28983eb..6e29985c8 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs @@ -11,8 +11,8 @@ namespace NzbDrone.Core.DecisionEngine.Specifications public interface IUpgradableSpecification { bool IsUpgradable(QualityProfile profile, QualityModel currentQuality, List currentCustomFormats, QualityModel newQuality, List newCustomFormats); - bool CutoffNotMet(QualityProfile profile, QualityModel currentQuality, List currentFormats, QualityModel newQuality = null); bool QualityCutoffNotMet(QualityProfile profile, QualityModel currentQuality, QualityModel newQuality = null); + bool CutoffNotMet(QualityProfile profile, QualityModel currentQuality, List currentFormats, QualityModel newQuality = null); bool IsRevisionUpgrade(QualityModel currentQuality, QualityModel newQuality); bool IsUpgradeAllowed(QualityProfile qualityProfile, QualityModel currentQuality, List currentCustomFormats, QualityModel newQuality, List newCustomFormats); } @@ -28,9 +28,9 @@ namespace NzbDrone.Core.DecisionEngine.Specifications _logger = logger; } - public bool IsUpgradable(QualityProfile profile, QualityModel currentQuality, List currentCustomFormats, QualityModel newQuality, List newCustomFormats) + public bool IsUpgradable(QualityProfile qualityProfile, QualityModel currentQuality, List currentCustomFormats, QualityModel newQuality, List newCustomFormats) { - var qualityComparer = new QualityModelComparer(profile); + var qualityComparer = new QualityModelComparer(qualityProfile); var qualityCompare = qualityComparer.Compare(newQuality?.Quality, currentQuality.Quality); var downloadPropersAndRepacks = _configService.DownloadPropersAndRepacks; @@ -57,9 +57,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications return true; } - var currentFormatScore = profile.CalculateCustomFormatScore(currentCustomFormats); - var newFormatScore = profile.CalculateCustomFormatScore(newCustomFormats); - // Reject unless the user does not prefer propers/repacks and it's a revision downgrade. if (downloadPropersAndRepacks != ProperDownloadTypes.DoNotPrefer && qualityRevisionCompare < 0) @@ -68,6 +65,18 @@ namespace NzbDrone.Core.DecisionEngine.Specifications return false; } + var currentFormatScore = qualityProfile.CalculateCustomFormatScore(currentCustomFormats); + var newFormatScore = qualityProfile.CalculateCustomFormatScore(newCustomFormats); + + if (qualityProfile.UpgradeAllowed && currentFormatScore >= qualityProfile.CutoffFormatScore) + { + _logger.Debug("Existing item meets cut-off for custom formats, skipping. Existing: [{0}] ({1}). Cutoff score: {2}", + currentCustomFormats.ConcatToString(), + currentFormatScore, + qualityProfile.CutoffFormatScore); + return false; + } + if (newFormatScore <= currentFormatScore) { _logger.Debug("New item's custom formats [{0}] ({1}) do not improve on [{2}] ({3}), skipping", @@ -123,7 +132,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications return true; } - _logger.Debug("Existing item meets cut-off. skipping. Existing: {0}", currentQuality); + _logger.Debug("Existing item meets cut-off, skipping. Existing: {0}", currentQuality); return false; }