From b6235e99c8f3b99c7c4740b21e4439ebf757e6a3 Mon Sep 17 00:00:00 2001 From: vertigo235 Date: Sat, 4 Feb 2017 01:07:26 -0500 Subject: [PATCH 1/4] Delay Profile: Upgradable Check Fix Only do the upgradable file check if there are exisitng files. --- .../DecisionEngine/Specifications/CutoffSpecification.cs | 2 +- .../DecisionEngine/Specifications/RssSync/DelaySpecification.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs index 1ac882632..73e5b133b 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/CutoffSpecification.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications return Decision.Accept(); } - public Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria) + public virtual Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria) { if (subject.Movie.MovieFile.Value != null) { diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs index e69698b05..2298fac1b 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs @@ -49,7 +49,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync var comparer = new QualityModelComparer(profile); - if (isPreferredProtocol) + if (isPreferredProtocol && (subject.Movie.MovieFileId != 0)) { var upgradable = _qualityUpgradableSpecification.IsUpgradable(profile, subject.Movie.MovieFile.Value.Quality, subject.ParsedMovieInfo.Quality); From 0d647ffb9afe05a9e952b5292a963cf55ca60c7e Mon Sep 17 00:00:00 2001 From: vertigo235 Date: Sat, 4 Feb 2017 02:26:11 -0500 Subject: [PATCH 2/4] Delay Profile: Delay for at least 1 preferred word --- .../Specifications/RssSync/DelaySpecification.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs index 2298fac1b..1f2ef13f2 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs @@ -68,11 +68,14 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync // If quality meets or exceeds the best allowed quality in the profile accept it immediately var bestQualityInProfile = new QualityModel(profile.LastAllowedQuality()); - var isBestInProfile = comparer.Compare(subject.ParsedMovieInfo.Quality, bestQualityInProfile) >= 0; + var isBestInProfile = comparer.Compare(subject.ParsedMovieInfo.Quality, bestQualityInProfile) >= 0; + var title = subject.Release.Title; + var preferredWords = subject.Movie.Profile.Value.PreferredTags; + var num = preferredWords.AsEnumerable().Count(w => title.ToLower().Contains(w.ToLower())); - if (isBestInProfile && isPreferredProtocol) + if (isBestInProfile && isPreferredProtocol && (num > 0 || preferredWords == null)) { - _logger.Debug("Quality is highest in profile for preferred protocol, will not delay"); + _logger.Debug("Quality is highest in profile for preferred protocol and preferred word count is {0}, will not delay",num); return Decision.Accept(); } From 195866f3aa009c4a9a197a4d71a5929fd7bff01e Mon Sep 17 00:00:00 2001 From: vertigo235 Date: Sun, 5 Feb 2017 14:09:22 -0500 Subject: [PATCH 3/4] Delay Profile: Require preferred word to skip delay. --- .../RssSync/DelaySpecification.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs index 1f2ef13f2..c58e06b28 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs @@ -39,7 +39,13 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync var profile = subject.Movie.Profile.Value; var delayProfile = _delayProfileService.BestForTags(subject.Movie.Tags); var delay = delayProfile.GetProtocolDelay(subject.Release.DownloadProtocol); - var isPreferredProtocol = subject.Release.DownloadProtocol == delayProfile.PreferredProtocol; + var isPreferredProtocol = subject.Release.DownloadProtocol == delayProfile.PreferredProtocol; + + // Preferred word count + var title = subject.Release.Title; + var preferredWords = subject.Movie.Profile.Value.PreferredTags; + var preferredcount = preferredWords.AsEnumerable().Count(w => title.ToLower().Contains(w.ToLower())); + if (delay == 0) { @@ -49,7 +55,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync var comparer = new QualityModelComparer(profile); - if (isPreferredProtocol && (subject.Movie.MovieFileId != 0)) + if (isPreferredProtocol && (subject.Movie.MovieFileId != 0) && (preferredcount > 0 || preferredWords == null)) { var upgradable = _qualityUpgradableSpecification.IsUpgradable(profile, subject.Movie.MovieFile.Value.Quality, subject.ParsedMovieInfo.Quality); @@ -59,7 +65,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync if (revisionUpgrade) { - _logger.Debug("New quality is a better revision for existing quality, skipping delay"); + _logger.Debug("New quality is a better revision for existing quality and preferred word count is {0}, skipping delay", preferredcount); return Decision.Accept(); } } @@ -69,13 +75,10 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync // If quality meets or exceeds the best allowed quality in the profile accept it immediately var bestQualityInProfile = new QualityModel(profile.LastAllowedQuality()); var isBestInProfile = comparer.Compare(subject.ParsedMovieInfo.Quality, bestQualityInProfile) >= 0; - var title = subject.Release.Title; - var preferredWords = subject.Movie.Profile.Value.PreferredTags; - var num = preferredWords.AsEnumerable().Count(w => title.ToLower().Contains(w.ToLower())); - if (isBestInProfile && isPreferredProtocol && (num > 0 || preferredWords == null)) + if (isBestInProfile && isPreferredProtocol && (preferredcount > 0 || preferredWords == null)) { - _logger.Debug("Quality is highest in profile for preferred protocol and preferred word count is {0}, will not delay",num); + _logger.Debug("Quality is highest in profile for preferred protocol and preferred word count is {0}, will not delay.", preferredcount); return Decision.Accept(); } From 6d6bf1044b31fd2d3fc086555e9845e56e2135e0 Mon Sep 17 00:00:00 2001 From: vertigo235 Date: Sun, 5 Feb 2017 15:45:09 -0500 Subject: [PATCH 4/4] preferredcount -> preferredCount --- .../Specifications/RssSync/DelaySpecification.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs index c58e06b28..c2d27e3be 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/RssSync/DelaySpecification.cs @@ -44,7 +44,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync // Preferred word count var title = subject.Release.Title; var preferredWords = subject.Movie.Profile.Value.PreferredTags; - var preferredcount = preferredWords.AsEnumerable().Count(w => title.ToLower().Contains(w.ToLower())); + var preferredCount = preferredWords.AsEnumerable().Count(w => title.ToLower().Contains(w.ToLower())); if (delay == 0) @@ -55,7 +55,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync var comparer = new QualityModelComparer(profile); - if (isPreferredProtocol && (subject.Movie.MovieFileId != 0) && (preferredcount > 0 || preferredWords == null)) + if (isPreferredProtocol && (subject.Movie.MovieFileId != 0) && (preferredCount > 0 || preferredWords == null)) { var upgradable = _qualityUpgradableSpecification.IsUpgradable(profile, subject.Movie.MovieFile.Value.Quality, subject.ParsedMovieInfo.Quality); @@ -65,7 +65,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync if (revisionUpgrade) { - _logger.Debug("New quality is a better revision for existing quality and preferred word count is {0}, skipping delay", preferredcount); + _logger.Debug("New quality is a better revision for existing quality and preferred word count is {0}, skipping delay", preferredCount); return Decision.Accept(); } } @@ -76,9 +76,9 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync var bestQualityInProfile = new QualityModel(profile.LastAllowedQuality()); var isBestInProfile = comparer.Compare(subject.ParsedMovieInfo.Quality, bestQualityInProfile) >= 0; - if (isBestInProfile && isPreferredProtocol && (preferredcount > 0 || preferredWords == null)) + if (isBestInProfile && isPreferredProtocol && (preferredCount > 0 || preferredWords == null)) { - _logger.Debug("Quality is highest in profile for preferred protocol and preferred word count is {0}, will not delay.", preferredcount); + _logger.Debug("Quality is highest in profile for preferred protocol and preferred word count is {0}, will not delay.", preferredCount); return Decision.Accept(); }