From b9886cd11c554083d758bd23d8706d25af084c5a Mon Sep 17 00:00:00 2001 From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com> Date: Thu, 22 Sep 2022 11:49:19 -0500 Subject: [PATCH] Fixed: Repack Preference Ignored (cherry picked from commit 04447d9d4db8cc3d54baf0a721f4430cf77908c4) Fixes #6595 Closes #7621 --- .../RepackSpecificationFixture.cs | 79 ++++++++++++++++++- .../Specifications/RepackSpecification.cs | 22 +++++- 2 files changed, 98 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/RepackSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/RepackSpecificationFixture.cs index 0de0b35e6..e46cb14bc 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/RepackSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/RepackSpecificationFixture.cs @@ -1,6 +1,8 @@ -using FizzWare.NBuilder; +using System; +using FizzWare.NBuilder; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Core.Configuration; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Movies; @@ -168,5 +170,80 @@ namespace NzbDrone.Core.Test.DecisionEngineTests .Should() .BeFalse(); } + + [Test] + public void should_return_false_when_repack_but_auto_download_repack_is_false() + { + Mocker.GetMock() + .Setup(s => s.DownloadPropersAndRepacks) + .Returns(ProperDownloadTypes.DoNotUpgrade); + + _parsedMovieInfo.Quality.Revision.IsRepack = true; + _movie.MovieFileId = 1; + _movie.MovieFile = Builder.CreateNew() + .With(e => e.Quality = new QualityModel(Quality.SDTV)) + .With(e => e.ReleaseGroup = "Radarr") + .Build(); + + var remoteMovie = Builder.CreateNew() + .With(e => e.ParsedMovieInfo = _parsedMovieInfo) + .With(e => e.Movie = _movie) + .Build(); + + Subject.IsSatisfiedBy(remoteMovie, null) + .Accepted + .Should() + .BeFalse(); + } + + [Test] + public void should_return_true_when_repack_but_auto_download_repack_is_true() + { + Mocker.GetMock() + .Setup(s => s.DownloadPropersAndRepacks) + .Returns(ProperDownloadTypes.PreferAndUpgrade); + + _parsedMovieInfo.Quality.Revision.IsRepack = true; + _movie.MovieFileId = 1; + _movie.MovieFile = Builder.CreateNew() + .With(e => e.Quality = new QualityModel(Quality.SDTV)) + .With(e => e.ReleaseGroup = "Radarr") + .Build(); + + var remoteMovie = Builder.CreateNew() + .With(e => e.ParsedMovieInfo = _parsedMovieInfo) + .With(e => e.Movie = _movie) + .Build(); + + Subject.IsSatisfiedBy(remoteMovie, null) + .Accepted + .Should() + .BeTrue(); + } + + [Test] + public void should_return_true_when_repacks_are_not_preferred() + { + Mocker.GetMock() + .Setup(s => s.DownloadPropersAndRepacks) + .Returns(ProperDownloadTypes.DoNotPrefer); + + _parsedMovieInfo.Quality.Revision.IsRepack = true; + _movie.MovieFileId = 1; + _movie.MovieFile = Builder.CreateNew() + .With(e => e.Quality = new QualityModel(Quality.SDTV)) + .With(e => e.ReleaseGroup = "Radarr") + .Build(); + + var remoteMovie = Builder.CreateNew() + .With(e => e.ParsedMovieInfo = _parsedMovieInfo) + .With(e => e.Movie = _movie) + .Build(); + + Subject.IsSatisfiedBy(remoteMovie, null) + .Accepted + .Should() + .BeTrue(); + } } } diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/RepackSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/RepackSpecification.cs index c19181eb1..f6d713281 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/RepackSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/RepackSpecification.cs @@ -1,19 +1,23 @@ -using System; +using System; using NLog; using NzbDrone.Common.Extensions; +using NzbDrone.Core.Configuration; using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Parser.Model; +using NzbDrone.Core.Qualities; namespace NzbDrone.Core.DecisionEngine.Specifications { public class RepackSpecification : IDecisionEngineSpecification { private readonly UpgradableSpecification _upgradableSpecification; + private readonly IConfigService _configService; private readonly Logger _logger; - public RepackSpecification(UpgradableSpecification upgradableSpecification, Logger logger) + public RepackSpecification(UpgradableSpecification upgradableSpecification, IConfigService configService, Logger logger) { _upgradableSpecification = upgradableSpecification; + _configService = configService; _logger = logger; } @@ -22,11 +26,19 @@ namespace NzbDrone.Core.DecisionEngine.Specifications public Decision IsSatisfiedBy(RemoteMovie subject, SearchCriteriaBase searchCriteria) { + var downloadPropersAndRepacks = _configService.DownloadPropersAndRepacks; + if (!subject.ParsedMovieInfo.Quality.Revision.IsRepack) { return Decision.Accept(); } + if (downloadPropersAndRepacks == ProperDownloadTypes.DoNotPrefer) + { + _logger.Debug("Repacks are not preferred, skipping check"); + return Decision.Accept(); + } + if (subject.Movie.MovieFileId != 0) { var file = subject.Movie.MovieFile; @@ -36,6 +48,12 @@ namespace NzbDrone.Core.DecisionEngine.Specifications var releaseGroup = subject.ParsedMovieInfo.ReleaseGroup; var fileReleaseGroup = file.ReleaseGroup; + if (downloadPropersAndRepacks == ProperDownloadTypes.DoNotUpgrade) + { + _logger.Debug("Auto downloading of repacks is disabled"); + return Decision.Reject("Repack downloading is disabled"); + } + if (fileReleaseGroup.IsNullOrWhiteSpace()) { return Decision.Reject("Unable to determine release group for the existing file");