From d1262f1cedc671ddd789c77545c45a20c3f5bfde Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 17 Jan 2012 21:06:37 -0800 Subject: [PATCH] No longer checking history when doing a manual search. --- .../InventoryProvider_QualityNeededTest.cs | 33 +++++++++++++++++++ .../ProcessDailySearchResultsFixture.cs | 10 +++--- .../ProcessSearchResultsFixture.cs | 10 +++--- NzbDrone.Core/Providers/InventoryProvider.cs | 18 ++++++---- NzbDrone.Core/Providers/SearchProvider.cs | 4 +-- 5 files changed, 56 insertions(+), 19 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs index 53c1755e2..997a29876 100644 --- a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs @@ -274,5 +274,38 @@ namespace NzbDrone.Core.Test.ProviderTests Assert.AreEqual(excpected, result); } + + [Test] + public void IsQualityNeeded_file_should_skip_history_check_for_manual_search() + { + WithStrictMocker(); + + parseResultSingle.Series.QualityProfile = sdProfile; + parseResultSingle.Quality.QualityType = QualityTypes.DVD; + + Mocker.GetMock() + .Setup(p => p.GetBestQualityInHistory(episode.EpisodeId)) + .Returns(null); + + Mocker.GetMock() + .Setup(p => p.GetEpisodesByParseResult(parseResultSingle, true)) + .Returns(new List { episode }); + + Mocker.GetMock() + .Setup(p => p.IsFirstOrLastEpisodeOfSeason(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(false); + + Mocker.GetMock() + .Setup(s => s.Get(It.IsAny())) + .Returns(new QualityType { MaxSize = 100, MinSize = 0 }); + + episode.EpisodeFile.Quality = QualityTypes.SDTV; + //Act + bool result = Mocker.Resolve().IsQualityNeeded(parseResultSingle, true); + + //Assert + result.Should().BeTrue(); + Mocker.Verify(c => c.GetBestQualityInHistory(It.IsAny()), Times.Never()); + } } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessDailySearchResultsFixture.cs b/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessDailySearchResultsFixture.cs index cca5a0841..145272620 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessDailySearchResultsFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessDailySearchResultsFixture.cs @@ -75,14 +75,14 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests private void WithQualityNeeded() { Mocker.GetMock() - .Setup(s => s.IsQualityNeeded(It.IsAny())) + .Setup(s => s.IsQualityNeeded(It.IsAny(), true)) .Returns(true); } private void WithQualityNotNeeded() { Mocker.GetMock() - .Setup(s => s.IsQualityNeeded(It.IsAny())) + .Setup(s => s.IsQualityNeeded(It.IsAny(), true)) .Returns(false); } @@ -101,7 +101,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests WithSuccessfulDownload(); Mocker.GetMock() - .Setup(s => s.IsQualityNeeded(It.Is(d => d.Quality.QualityType == QualityTypes.Bluray1080p))) + .Setup(s => s.IsQualityNeeded(It.Is(d => d.Quality.QualityType == QualityTypes.Bluray1080p), true)) .Returns(true); //Act @@ -110,7 +110,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests //Assert result.Should().BeTrue(); - Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny()), + Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny(), true), Times.Once()); Mocker.GetMock().Verify(c => c.DownloadReport(It.IsAny()), Times.Once()); @@ -134,7 +134,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests //Assert result.Should().BeFalse(); - Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny()), + Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny(), true), Times.Exactly(5)); Mocker.GetMock().Verify(c => c.DownloadReport(It.IsAny()), Times.Never()); diff --git a/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessSearchResultsFixture.cs b/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessSearchResultsFixture.cs index ec9a87602..3ea7317c9 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessSearchResultsFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchProviderTests/ProcessSearchResultsFixture.cs @@ -75,14 +75,14 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests private void WithQualityNeeded() { Mocker.GetMock() - .Setup(s => s.IsQualityNeeded(It.IsAny())) + .Setup(s => s.IsQualityNeeded(It.IsAny(), true)) .Returns(true); } private void WithQualityNotNeeded() { Mocker.GetMock() - .Setup(s => s.IsQualityNeeded(It.IsAny())) + .Setup(s => s.IsQualityNeeded(It.IsAny(), true)) .Returns(false); } @@ -102,7 +102,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests WithSuccessfulDownload(); Mocker.GetMock() - .Setup(s => s.IsQualityNeeded(It.Is(d => d.Quality.QualityType == QualityTypes.Bluray1080p))) + .Setup(s => s.IsQualityNeeded(It.Is(d => d.Quality.QualityType == QualityTypes.Bluray1080p), true)) .Returns(true); //Act @@ -112,7 +112,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests result.Should().HaveCount(1); result.First().Should().Be(1); - Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny()), + Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny(), true), Times.Once()); Mocker.GetMock().Verify(c => c.DownloadReport(It.IsAny()), Times.Once()); @@ -137,7 +137,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SearchProviderTests //Assert result.Should().HaveCount(0); - Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny()), + Mocker.GetMock().Verify(c => c.IsQualityNeeded(It.IsAny(), true), Times.Exactly(5)); Mocker.GetMock().Verify(c => c.DownloadReport(It.IsAny()), Times.Never()); diff --git a/NzbDrone.Core/Providers/InventoryProvider.cs b/NzbDrone.Core/Providers/InventoryProvider.cs index 2ebd78d1f..449c138b5 100644 --- a/NzbDrone.Core/Providers/InventoryProvider.cs +++ b/NzbDrone.Core/Providers/InventoryProvider.cs @@ -68,10 +68,11 @@ namespace NzbDrone.Core.Providers /// Comprehensive check on whether or not this episode is needed. /// /// Episode that needs to be checked + /// False unless called by a manual search job /// Whether or not the file quality meets the requirements /// for multi episode files, all episodes need to meet the requirement /// before the report is downloaded - public virtual bool IsQualityNeeded(EpisodeParseResult parsedReport) + public virtual bool IsQualityNeeded(EpisodeParseResult parsedReport, bool manualSearch = false) { Logger.Trace("Checking if report meets quality requirements. {0}", parsedReport.Quality); if (!parsedReport.Series.QualityProfile.Allowed.Contains(parsedReport.Quality.QualityType)) @@ -96,13 +97,16 @@ namespace NzbDrone.Core.Providers return false; } - //Checking History - var bestQualityInHistory = _historyProvider.GetBestQualityInHistory(episode.EpisodeId); - if (bestQualityInHistory != null) + //Checking History (If not a manual search) + if (!manualSearch) { - Logger.Trace("Comparing history quality with report. History is {0}", bestQualityInHistory); - if (!IsUpgrade(bestQualityInHistory, parsedReport.Quality, cutoff)) - return false; + var bestQualityInHistory = _historyProvider.GetBestQualityInHistory(episode.EpisodeId); + if(bestQualityInHistory != null) + { + Logger.Trace("Comparing history quality with report. History is {0}", bestQualityInHistory); + if(!IsUpgrade(bestQualityInHistory, parsedReport.Quality, cutoff)) + return false; + } } } diff --git a/NzbDrone.Core/Providers/SearchProvider.cs b/NzbDrone.Core/Providers/SearchProvider.cs index 6de2b72e4..3c0a183eb 100644 --- a/NzbDrone.Core/Providers/SearchProvider.cs +++ b/NzbDrone.Core/Providers/SearchProvider.cs @@ -235,7 +235,7 @@ namespace NzbDrone.Core.Providers if (successes.Intersect(episodeParseResult.EpisodeNumbers).Count() > 0) continue; - if (_inventoryProvider.IsQualityNeeded(episodeParseResult)) + if (_inventoryProvider.IsQualityNeeded(episodeParseResult, true)) { Logger.Debug("Found '{0}'. Adding to download queue.", episodeParseResult); try @@ -286,7 +286,7 @@ namespace NzbDrone.Core.Providers if (!episodeParseResult.AirDate.HasValue || episodeParseResult.AirDate.Value.Date != airDate.Date) continue; - if (_inventoryProvider.IsQualityNeeded(episodeParseResult)) + if (_inventoryProvider.IsQualityNeeded(episodeParseResult, true)) { Logger.Debug("Found '{0}'. Adding to download queue.", episodeParseResult); try