From 51bec567419981559508de5da12d327329b0a0f5 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 27 Jan 2012 18:32:37 -0800 Subject: [PATCH] More work on implementing blacklisting. Refactored AddByUrl to use already parsed NewzbinId. --- .../ProviderTests/DownloadProviderTest.cs | 2 +- .../QualityNeededFixture.cs | 12 ++++++++++ .../SabProviderTests/SabProviderTest.cs | 24 ++++++++++++------- NzbDrone.Core/Model/EpisodeParseResult.cs | 2 ++ NzbDrone.Core/Providers/DownloadProvider.cs | 3 ++- NzbDrone.Core/Providers/Indexer/Newzbin.cs | 9 ++++--- NzbDrone.Core/Providers/InventoryProvider.cs | 20 ++++++++++++++++ NzbDrone.Core/Providers/SabProvider.cs | 23 +++++++----------- 8 files changed, 66 insertions(+), 29 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs index 1549f9447..09983e269 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs @@ -38,7 +38,7 @@ namespace NzbDrone.Core.Test.ProviderTests .Returns(false); Mocker.GetMock() - .Setup(s => s.AddByUrl(parseResult.NzbUrl, sabTitle)) + .Setup(s => s.AddByUrl(parseResult, sabTitle)) .Returns(true); Mocker.GetMock() diff --git a/NzbDrone.Core.Test/ProviderTests/InventoryProviderTests/QualityNeededFixture.cs b/NzbDrone.Core.Test/ProviderTests/InventoryProviderTests/QualityNeededFixture.cs index 74d94f7d1..f4df614f7 100644 --- a/NzbDrone.Core.Test/ProviderTests/InventoryProviderTests/QualityNeededFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/InventoryProviderTests/QualityNeededFixture.cs @@ -206,6 +206,10 @@ namespace NzbDrone.Core.Test.ProviderTests.InventoryProviderTests .Setup(s => s.Get(It.IsAny())) .Returns(new QualityType { MaxSize = 100, MinSize = 0 }); + Mocker.GetMock() + .Setup(s => s.IsBlacklisted(It.IsAny())) + .Returns(false); + episode.EpisodeFile.Quality = QualityTypes.SDTV; //Act @@ -240,6 +244,10 @@ namespace NzbDrone.Core.Test.ProviderTests.InventoryProviderTests .Setup(s => s.Get(It.IsAny())) .Returns(new QualityType { MaxSize = 100, MinSize = 0 }); + Mocker.GetMock() + .Setup(s => s.IsBlacklisted(It.IsAny())) + .Returns(false); + episode.EpisodeFile.Quality = QualityTypes.SDTV; //Act bool result = Mocker.Resolve().IsQualityNeeded(parseResultSingle); @@ -299,6 +307,10 @@ namespace NzbDrone.Core.Test.ProviderTests.InventoryProviderTests .Setup(s => s.Get(It.IsAny())) .Returns(new QualityType { MaxSize = 100, MinSize = 0 }); + Mocker.GetMock() + .Setup(s => s.IsBlacklisted(It.IsAny())) + .Returns(false); + episode.EpisodeFile.Quality = QualityTypes.SDTV; //Act bool result = Mocker.Resolve().IsQualityNeeded(parseResultSingle, true); diff --git a/NzbDrone.Core.Test/ProviderTests/SabProviderTests/SabProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/SabProviderTests/SabProviderTest.cs index 576ec8439..8b82f81fe 100644 --- a/NzbDrone.Core.Test/ProviderTests/SabProviderTests/SabProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/SabProviderTests/SabProviderTest.cs @@ -21,6 +21,9 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests // ReSharper disable InconsistentNaming public class SabProviderTest : CoreTest { + private EpisodeParseResult newzbinResult; + private EpisodeParseResult nonNewzbinResult; + [SetUp] public void Setup() { @@ -39,8 +42,17 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests fakeConfig.SetupGet(c => c.SabUsername).Returns(username); fakeConfig.SetupGet(c => c.SabPassword).Returns(password); fakeConfig.SetupGet(c => c.SabTvCategory).Returns(cat); - } + newzbinResult = Builder.CreateNew() + .With(r => r.NewzbinId = 6107863) + .With(r => r.Indexer = "Newzbin") + .Build(); + + nonNewzbinResult = Builder.CreateNew() + .With(r => r.NzbUrl = "http://www.nzbclub.com/nzb_download.aspx?mid=1950232") + .With(r => r.Indexer = "Not Newzbin") + .Build(); + } private void WithFailResponse() { @@ -59,9 +71,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests .Returns("ok"); //Act - bool result = Mocker.Resolve().AddByUrl( - "http://www.nzbclub.com/nzb_download.aspx?mid=1950232", - "This is an Nzb"); + bool result = Mocker.Resolve().AddByUrl(nonNewzbinResult, "This is an Nzb"); //Assert result.Should().BeTrue(); @@ -79,9 +89,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests .Returns("ok"); //Act - bool result = Mocker.Resolve().AddByUrl( - "http://www.newzbin.com/browse/post/6107863/nzb", - "This is an Nzb"); + bool result = Mocker.Resolve().AddByUrl(newzbinResult, "This is an Nzb"); //Assert result.Should().BeTrue(); @@ -94,7 +102,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests //Act var sabProvider = Mocker.Resolve(); - var result = sabProvider.AddByUrl("http://www.nzbclub.com/nzb_download.aspx?mid=1950232", "This is an nzb"); + var result = sabProvider.AddByUrl(nonNewzbinResult, "This is an nzb"); //Assert Assert.IsFalse(result); diff --git a/NzbDrone.Core/Model/EpisodeParseResult.cs b/NzbDrone.Core/Model/EpisodeParseResult.cs index 4b9d73eb8..9c486d9e5 100644 --- a/NzbDrone.Core/Model/EpisodeParseResult.cs +++ b/NzbDrone.Core/Model/EpisodeParseResult.cs @@ -39,6 +39,8 @@ namespace NzbDrone.Core.Model public long Size { get; set; } + public int NewzbinId { get; set; } + public override string ToString() { if (AirDate != null && EpisodeNumbers == null) diff --git a/NzbDrone.Core/Providers/DownloadProvider.cs b/NzbDrone.Core/Providers/DownloadProvider.cs index 3a1b580e6..f2cfc971c 100644 --- a/NzbDrone.Core/Providers/DownloadProvider.cs +++ b/NzbDrone.Core/Providers/DownloadProvider.cs @@ -38,7 +38,7 @@ namespace NzbDrone.Core.Providers } var sabTitle = _sabProvider.GetSabTitle(parseResult); - var addSuccess = _sabProvider.AddByUrl(parseResult.NzbUrl, sabTitle); + var addSuccess = _sabProvider.AddByUrl(parseResult, sabTitle); if (addSuccess) { @@ -54,6 +54,7 @@ namespace NzbDrone.Core.Providers history.NzbTitle = parseResult.OriginalString; history.EpisodeId = episode.EpisodeId; history.SeriesId = episode.SeriesId; + history.NewzbinId = parseResult.NewzbinId; _historyProvider.Add(history); _episodeProvider.MarkEpisodeAsFetched(episode.EpisodeId); diff --git a/NzbDrone.Core/Providers/Indexer/Newzbin.cs b/NzbDrone.Core/Providers/Indexer/Newzbin.cs index 7b6196a69..1bbffe977 100644 --- a/NzbDrone.Core/Providers/Indexer/Newzbin.cs +++ b/NzbDrone.Core/Providers/Indexer/Newzbin.cs @@ -78,7 +78,7 @@ namespace NzbDrone.Core.Providers.Indexer }; } - + //Don't change the name or things that rely on it being "Newzbin" will fail... ugly... public override string Name { get { return "Newzbin"; } @@ -94,19 +94,18 @@ namespace NzbDrone.Core.Providers.Indexer if (currentResult != null) { var quality = Parser.ParseQuality(item.Summary.Text); - currentResult.Quality = quality; var languageString = Regex.Match(item.Summary.Text, @"Language - \w*", RegexOptions.IgnoreCase).Value; - currentResult.Language = Parser.ParseLanguage(languageString); var sizeString = Regex.Match(item.Summary.Text, @"\(Size: \d*\,?\d+\.\d{1,2}\w{2}\)", RegexOptions.IgnoreCase).Value; - currentResult.Size = Parser.GetReportSize(sizeString); + + var id = Regex.Match(NzbDownloadUrl(item), @"\d{5,10}").Value; + currentResult.NewzbinId = Int32.Parse(id); } return currentResult; } - } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/InventoryProvider.cs b/NzbDrone.Core/Providers/InventoryProvider.cs index e374e5e77..d196b222c 100644 --- a/NzbDrone.Core/Providers/InventoryProvider.cs +++ b/NzbDrone.Core/Providers/InventoryProvider.cs @@ -116,6 +116,26 @@ namespace NzbDrone.Core.Providers } } + if (parsedReport.Indexer == "Newzbin") + { + //Check for Blacklisting by NewzbinId + Logger.Trace("Checking if Newzbin ID has been black listed: ", parsedReport.NewzbinId); + if (_historyProvider.IsBlacklisted(parsedReport.NewzbinId)) + { + Logger.Info("Newzbin ID has been blacklisted: [{0}] Skipping", parsedReport.NewzbinId); + return false; + } + } + + else + { + Logger.Trace("Checking if Nzb has been black listed: ", parsedReport.OriginalString); + if(_historyProvider.IsBlacklisted(parsedReport.OriginalString)) + { + Logger.Info("Nzb has been blacklisted: [{0}] Skipping", parsedReport.OriginalString); + return false; + } + } } Logger.Debug("Episode {0} is needed", parsedReport); diff --git a/NzbDrone.Core/Providers/SabProvider.cs b/NzbDrone.Core/Providers/SabProvider.cs index 15cdc890c..6ea57963c 100644 --- a/NzbDrone.Core/Providers/SabProvider.cs +++ b/NzbDrone.Core/Providers/SabProvider.cs @@ -31,21 +31,23 @@ namespace NzbDrone.Core.Providers _httpProvider = httpProvider; } - public virtual bool AddByUrl(string url, string title) + public virtual bool AddByUrl(EpisodeParseResult parseResult, string title) { string cat = _configProvider.SabTvCategory; int priority = (int)_configProvider.SabTvPriority; - string name = GetNzbName(url); + string name = GetNzbName(parseResult.NzbUrl); string nzbName = HttpUtility.UrlEncode(title); + string mode = "addurl"; - string action = string.Format("mode=addurl&name={0}&priority={1}&pp=3&cat={2}&nzbname={3}", - name, priority, cat, nzbName); - - if (url.ToLower().Contains("newzbin")) + if (parseResult.Indexer == "Newzbin") { - action = action.Replace("mode=addurl", "mode=addid"); + mode = "addid"; + name = parseResult.NewzbinId.ToString(); } + string action = string.Format("mode={0}&name={1}&priority={2}&pp=3&cat={3}&nzbname={4}", mode, + name, priority, cat, nzbName); + string request = GetSabRequest(action); Logger.Info("Adding report [{0}] to the queue.", title); @@ -63,13 +65,6 @@ namespace NzbDrone.Core.Providers private static string GetNzbName(string urlString) { - var url = new Uri(urlString); - if (url.Host.ToLower().Contains("newzbin")) - { - var postId = Regex.Match(urlString, @"\d{5,10}").Value; - return postId; - } - return urlString.Replace("&", "%26"); }