From cef6d5a99ac0df56819d5c3c04f6a36f2219866e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 22 Mar 2023 08:06:59 -0700 Subject: [PATCH] Fixed: Imports when custom format is a downgrade, but file is an upgrade --- .../UpgradeSpecificationFixture.cs | 39 +++++++++++++++++++ .../Specifications/UpgradeSpecification.cs | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs index 6520b8f05..fbad49de8 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Specifications/UpgradeSpecificationFixture.cs @@ -488,6 +488,45 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Specifications Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeTrue(); } + [Test] + public void should_return_true_if_not_upgrade_to_custom_format_score_but_is_upgrade_to_quality() + { + var episodeFileCustomFormats = Builder.CreateListOfSize(1).Build().ToList(); + + var episodeFile = new EpisodeFile + { + Quality = new QualityModel(Quality.Bluray720p) + }; + + _series.QualityProfile.Value.FormatItems = episodeFileCustomFormats.Select(c => new ProfileFormatItem + { + Format = c, + Score = 50 + }) + .ToList(); + + Mocker.GetMock() + .Setup(s => s.DownloadPropersAndRepacks) + .Returns(ProperDownloadTypes.DoNotPrefer); + + Mocker.GetMock() + .Setup(s => s.ParseCustomFormat(episodeFile)) + .Returns(episodeFileCustomFormats); + + _localEpisode.Quality = new QualityModel(Quality.Bluray1080p); + _localEpisode.CustomFormats = Builder.CreateListOfSize(1).Build().ToList(); + _localEpisode.CustomFormatScore = 20; + + _localEpisode.Episodes = Builder.CreateListOfSize(1) + .All() + .With(e => e.EpisodeFileId = 1) + .With(e => e.EpisodeFile = new LazyLoaded(episodeFile)) + .Build() + .ToList(); + + Subject.IsSatisfiedBy(_localEpisode, null).Accepted.Should().BeTrue(); + } + [Test] public void should_return_false_if_not_upgrade_to_custom_format_score() { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs index d961dc8dc..b6fb450e6 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/Specifications/UpgradeSpecification.cs @@ -62,7 +62,7 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport.Specifications var currentFormats = _formatService.ParseCustomFormat(episodeFile); var currentScore = qualityProfile.CalculateCustomFormatScore(currentFormats); - if (localEpisode.CustomFormatScore < currentScore) + if (qualityCompare == 0 && localEpisode.CustomFormatScore < currentScore) { _logger.Debug("New file's custom formats [{0}] do not improve on [{1}], skipping", localEpisode.CustomFormats.ConcatToString(),