From b62ef0c40cb4442ffae8b3968bb02d7d5fbae91e Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 4 Jan 2016 23:11:06 -0800 Subject: [PATCH] Fixed: Use folder quality when better than file quality (regression) Closes #1022 --- .../ImportDecisionMakerFixture.cs | 16 +++++++++++ .../EpisodeImport/ImportDecisionMaker.cs | 27 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs index 93b7316fb..e82dfebcc 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs @@ -207,6 +207,22 @@ public void should_use_folder_quality_when_file_quality_was_determined_by_the_ex result.Single().LocalEpisode.Quality.Should().Be(expectedQuality); } + [Test] + public void should_use_folder_quality_when_greater_than_file_quality() + { + GivenSpecifications(_pass1, _pass2, _pass3); + GivenVideoFiles(new string[] { @"C:\Test\Unsorted\The.Office.S03E115.mkv".AsOsAgnostic() }); + + _localEpisode.Path = _videoFiles.Single(); + _localEpisode.Quality.Quality = Quality.HDTV720p; + + var expectedQuality = new QualityModel(Quality.Bluray720p); + + var result = Subject.GetImportDecisions(_videoFiles, _series, new ParsedEpisodeInfo { Quality = expectedQuality }, true); + + result.Single().LocalEpisode.Quality.Should().Be(expectedQuality); + } + [Test] public void should_not_throw_if_episodes_are_not_found() { diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs index 4965f079a..5b2fb45e7 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs @@ -181,7 +181,7 @@ private bool ShouldUseFolderName(List videoFiles, Series series, ParsedE private QualityModel GetQuality(ParsedEpisodeInfo folderInfo, QualityModel fileQuality, Series series) { - if (folderInfo != null && folderInfo.Quality.Quality != Quality.Unknown && fileQuality.QualitySource == QualitySource.Extension) + if (UseFolderQuality(folderInfo, fileQuality, series)) { _logger.Debug("Using quality from folder: {0}", folderInfo.Quality); return folderInfo.Quality; @@ -189,5 +189,30 @@ private QualityModel GetQuality(ParsedEpisodeInfo folderInfo, QualityModel fileQ return fileQuality; } + + private bool UseFolderQuality(ParsedEpisodeInfo folderInfo, QualityModel fileQuality, Series series) + { + if (folderInfo == null) + { + return false; + } + + if (folderInfo.Quality.Quality == Quality.Unknown) + { + return false; + } + + if (fileQuality.QualitySource == QualitySource.Extension) + { + return true; + } + + if (new QualityModelComparer(series.Profile).Compare(folderInfo.Quality, fileQuality) > 0) + { + return true; + } + + return false; + } } }