1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-14 11:23:42 +02:00

Fixed: Repack Preference Ignored

This commit is contained in:
bakerboy448 2022-09-22 11:49:19 -05:00 committed by GitHub
parent c98fac65ed
commit 04447d9d4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 87 additions and 1 deletions

View File

@ -1,9 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.DecisionEngine.Specifications;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Parser.Model;
@ -172,5 +174,71 @@ public void should_return_false_if_release_group_for_release_is_unknown()
.Should()
.BeFalse();
}
[Test]
public void should_return_true_when_repacks_are_not_preferred()
{
Mocker.GetMock<IConfigService>()
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.DoNotPrefer);
_parsedEpisodeInfo.Quality.Revision.IsRepack = true;
_episodes.First().EpisodeFileId = 1;
_episodes.First().EpisodeFile = Builder<EpisodeFile>.CreateNew()
.With(e => e.Quality = new QualityModel(Quality.SDTV))
.With(e => e.ReleaseGroup = "Sonarr")
.Build();
var remoteEpisode = Builder<RemoteEpisode>.CreateNew()
.With(e => e.ParsedEpisodeInfo = _parsedEpisodeInfo)
.With(e => e.Episodes = _episodes)
.Build();
Subject.IsSatisfiedBy(remoteEpisode, null).Accepted.Should().BeTrue();
}
[Test]
public void should_return_true_when_repack_but_auto_download_repacks_is_true()
{
Mocker.GetMock<IConfigService>()
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.PreferAndUpgrade);
_parsedEpisodeInfo.Quality.Revision.IsRepack = true;
_episodes.First().EpisodeFileId = 1;
_episodes.First().EpisodeFile = Builder<EpisodeFile>.CreateNew()
.With(e => e.Quality = new QualityModel(Quality.SDTV))
.With(e => e.ReleaseGroup = "Sonarr")
.Build();
var remoteEpisode = Builder<RemoteEpisode>.CreateNew()
.With(e => e.ParsedEpisodeInfo = _parsedEpisodeInfo)
.With(e => e.Episodes = _episodes)
.Build();
Subject.IsSatisfiedBy(remoteEpisode, null).Accepted.Should().BeTrue();
}
[Test]
public void should_return_false_when_repack_but_auto_download_repacks_is_false()
{
Mocker.GetMock<IConfigService>()
.Setup(s => s.DownloadPropersAndRepacks)
.Returns(ProperDownloadTypes.DoNotUpgrade);
_parsedEpisodeInfo.Quality.Revision.IsRepack = true;
_episodes.First().EpisodeFileId = 1;
_episodes.First().EpisodeFile = Builder<EpisodeFile>.CreateNew()
.With(e => e.Quality = new QualityModel(Quality.SDTV))
.With(e => e.ReleaseGroup = "Sonarr")
.Build();
var remoteEpisode = Builder<RemoteEpisode>.CreateNew()
.With(e => e.ParsedEpisodeInfo = _parsedEpisodeInfo)
.With(e => e.Episodes = _episodes)
.Build();
Subject.IsSatisfiedBy(remoteEpisode, null).Accepted.Should().BeFalse();
}
}
}

View File

@ -2,19 +2,23 @@
using System.Linq;
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;
}
@ -28,10 +32,24 @@ public Decision IsSatisfiedBy(RemoteEpisode subject, SearchCriteriaBase searchCr
return Decision.Accept();
}
var downloadPropersAndRepacks = _configService.DownloadPropersAndRepacks;
if (downloadPropersAndRepacks == ProperDownloadTypes.DoNotPrefer)
{
_logger.Debug("Repacks are not preferred, skipping check");
return Decision.Accept();
}
foreach (var file in subject.Episodes.Where(c => c.EpisodeFileId != 0).Select(c => c.EpisodeFile.Value))
{
if (_upgradableSpecification.IsRevisionUpgrade(file.Quality, subject.ParsedEpisodeInfo.Quality))
{
if (downloadPropersAndRepacks == ProperDownloadTypes.DoNotUpgrade)
{
_logger.Debug("Auto downloading of repacks is disabled");
return Decision.Reject("Repack downloading is disabled");
}
var releaseGroup = subject.ParsedEpisodeInfo.ReleaseGroup;
var fileReleaseGroup = file.ReleaseGroup;