More work on implementing blacklisting. Refactored AddByUrl to use already parsed NewzbinId.

This commit is contained in:
Mark McDowall 2012-01-27 18:32:37 -08:00
parent 0b6ad3d0c2
commit 51bec56741
8 changed files with 66 additions and 29 deletions

View File

@ -38,7 +38,7 @@ namespace NzbDrone.Core.Test.ProviderTests
.Returns(false); .Returns(false);
Mocker.GetMock<SabProvider>() Mocker.GetMock<SabProvider>()
.Setup(s => s.AddByUrl(parseResult.NzbUrl, sabTitle)) .Setup(s => s.AddByUrl(parseResult, sabTitle))
.Returns(true); .Returns(true);
Mocker.GetMock<SabProvider>() Mocker.GetMock<SabProvider>()

View File

@ -206,6 +206,10 @@ namespace NzbDrone.Core.Test.ProviderTests.InventoryProviderTests
.Setup(s => s.Get(It.IsAny<int>())) .Setup(s => s.Get(It.IsAny<int>()))
.Returns(new QualityType { MaxSize = 100, MinSize = 0 }); .Returns(new QualityType { MaxSize = 100, MinSize = 0 });
Mocker.GetMock<HistoryProvider>()
.Setup(s => s.IsBlacklisted(It.IsAny<string>()))
.Returns(false);
episode.EpisodeFile.Quality = QualityTypes.SDTV; episode.EpisodeFile.Quality = QualityTypes.SDTV;
//Act //Act
@ -240,6 +244,10 @@ namespace NzbDrone.Core.Test.ProviderTests.InventoryProviderTests
.Setup(s => s.Get(It.IsAny<int>())) .Setup(s => s.Get(It.IsAny<int>()))
.Returns(new QualityType { MaxSize = 100, MinSize = 0 }); .Returns(new QualityType { MaxSize = 100, MinSize = 0 });
Mocker.GetMock<HistoryProvider>()
.Setup(s => s.IsBlacklisted(It.IsAny<string>()))
.Returns(false);
episode.EpisodeFile.Quality = QualityTypes.SDTV; episode.EpisodeFile.Quality = QualityTypes.SDTV;
//Act //Act
bool result = Mocker.Resolve<InventoryProvider>().IsQualityNeeded(parseResultSingle); bool result = Mocker.Resolve<InventoryProvider>().IsQualityNeeded(parseResultSingle);
@ -299,6 +307,10 @@ namespace NzbDrone.Core.Test.ProviderTests.InventoryProviderTests
.Setup(s => s.Get(It.IsAny<int>())) .Setup(s => s.Get(It.IsAny<int>()))
.Returns(new QualityType { MaxSize = 100, MinSize = 0 }); .Returns(new QualityType { MaxSize = 100, MinSize = 0 });
Mocker.GetMock<HistoryProvider>()
.Setup(s => s.IsBlacklisted(It.IsAny<string>()))
.Returns(false);
episode.EpisodeFile.Quality = QualityTypes.SDTV; episode.EpisodeFile.Quality = QualityTypes.SDTV;
//Act //Act
bool result = Mocker.Resolve<InventoryProvider>().IsQualityNeeded(parseResultSingle, true); bool result = Mocker.Resolve<InventoryProvider>().IsQualityNeeded(parseResultSingle, true);

View File

@ -21,6 +21,9 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
public class SabProviderTest : CoreTest public class SabProviderTest : CoreTest
{ {
private EpisodeParseResult newzbinResult;
private EpisodeParseResult nonNewzbinResult;
[SetUp] [SetUp]
public void 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.SabUsername).Returns(username);
fakeConfig.SetupGet(c => c.SabPassword).Returns(password); fakeConfig.SetupGet(c => c.SabPassword).Returns(password);
fakeConfig.SetupGet(c => c.SabTvCategory).Returns(cat); fakeConfig.SetupGet(c => c.SabTvCategory).Returns(cat);
}
newzbinResult = Builder<EpisodeParseResult>.CreateNew()
.With(r => r.NewzbinId = 6107863)
.With(r => r.Indexer = "Newzbin")
.Build();
nonNewzbinResult = Builder<EpisodeParseResult>.CreateNew()
.With(r => r.NzbUrl = "http://www.nzbclub.com/nzb_download.aspx?mid=1950232")
.With(r => r.Indexer = "Not Newzbin")
.Build();
}
private void WithFailResponse() private void WithFailResponse()
{ {
@ -59,9 +71,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests
.Returns("ok"); .Returns("ok");
//Act //Act
bool result = Mocker.Resolve<SabProvider>().AddByUrl( bool result = Mocker.Resolve<SabProvider>().AddByUrl(nonNewzbinResult, "This is an Nzb");
"http://www.nzbclub.com/nzb_download.aspx?mid=1950232",
"This is an Nzb");
//Assert //Assert
result.Should().BeTrue(); result.Should().BeTrue();
@ -79,9 +89,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests
.Returns("ok"); .Returns("ok");
//Act //Act
bool result = Mocker.Resolve<SabProvider>().AddByUrl( bool result = Mocker.Resolve<SabProvider>().AddByUrl(newzbinResult, "This is an Nzb");
"http://www.newzbin.com/browse/post/6107863/nzb",
"This is an Nzb");
//Assert //Assert
result.Should().BeTrue(); result.Should().BeTrue();
@ -94,7 +102,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests
//Act //Act
var sabProvider = Mocker.Resolve<SabProvider>(); var sabProvider = Mocker.Resolve<SabProvider>();
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
Assert.IsFalse(result); Assert.IsFalse(result);

View File

@ -39,6 +39,8 @@ namespace NzbDrone.Core.Model
public long Size { get; set; } public long Size { get; set; }
public int NewzbinId { get; set; }
public override string ToString() public override string ToString()
{ {
if (AirDate != null && EpisodeNumbers == null) if (AirDate != null && EpisodeNumbers == null)

View File

@ -38,7 +38,7 @@ namespace NzbDrone.Core.Providers
} }
var sabTitle = _sabProvider.GetSabTitle(parseResult); var sabTitle = _sabProvider.GetSabTitle(parseResult);
var addSuccess = _sabProvider.AddByUrl(parseResult.NzbUrl, sabTitle); var addSuccess = _sabProvider.AddByUrl(parseResult, sabTitle);
if (addSuccess) if (addSuccess)
{ {
@ -54,6 +54,7 @@ namespace NzbDrone.Core.Providers
history.NzbTitle = parseResult.OriginalString; history.NzbTitle = parseResult.OriginalString;
history.EpisodeId = episode.EpisodeId; history.EpisodeId = episode.EpisodeId;
history.SeriesId = episode.SeriesId; history.SeriesId = episode.SeriesId;
history.NewzbinId = parseResult.NewzbinId;
_historyProvider.Add(history); _historyProvider.Add(history);
_episodeProvider.MarkEpisodeAsFetched(episode.EpisodeId); _episodeProvider.MarkEpisodeAsFetched(episode.EpisodeId);

View File

@ -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 public override string Name
{ {
get { return "Newzbin"; } get { return "Newzbin"; }
@ -94,19 +94,18 @@ namespace NzbDrone.Core.Providers.Indexer
if (currentResult != null) if (currentResult != null)
{ {
var quality = Parser.ParseQuality(item.Summary.Text); var quality = Parser.ParseQuality(item.Summary.Text);
currentResult.Quality = quality; currentResult.Quality = quality;
var languageString = Regex.Match(item.Summary.Text, @"Language - \w*", RegexOptions.IgnoreCase).Value; var languageString = Regex.Match(item.Summary.Text, @"Language - \w*", RegexOptions.IgnoreCase).Value;
currentResult.Language = Parser.ParseLanguage(languageString); currentResult.Language = Parser.ParseLanguage(languageString);
var sizeString = Regex.Match(item.Summary.Text, @"\(Size: \d*\,?\d+\.\d{1,2}\w{2}\)", RegexOptions.IgnoreCase).Value; var sizeString = Regex.Match(item.Summary.Text, @"\(Size: \d*\,?\d+\.\d{1,2}\w{2}\)", RegexOptions.IgnoreCase).Value;
currentResult.Size = Parser.GetReportSize(sizeString); currentResult.Size = Parser.GetReportSize(sizeString);
var id = Regex.Match(NzbDownloadUrl(item), @"\d{5,10}").Value;
currentResult.NewzbinId = Int32.Parse(id);
} }
return currentResult; return currentResult;
} }
} }
} }

View File

@ -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); Logger.Debug("Episode {0} is needed", parsedReport);

View File

@ -31,21 +31,23 @@ namespace NzbDrone.Core.Providers
_httpProvider = httpProvider; _httpProvider = httpProvider;
} }
public virtual bool AddByUrl(string url, string title) public virtual bool AddByUrl(EpisodeParseResult parseResult, string title)
{ {
string cat = _configProvider.SabTvCategory; string cat = _configProvider.SabTvCategory;
int priority = (int)_configProvider.SabTvPriority; int priority = (int)_configProvider.SabTvPriority;
string name = GetNzbName(url); string name = GetNzbName(parseResult.NzbUrl);
string nzbName = HttpUtility.UrlEncode(title); string nzbName = HttpUtility.UrlEncode(title);
string mode = "addurl";
string action = string.Format("mode=addurl&name={0}&priority={1}&pp=3&cat={2}&nzbname={3}", if (parseResult.Indexer == "Newzbin")
name, priority, cat, nzbName);
if (url.ToLower().Contains("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); string request = GetSabRequest(action);
Logger.Info("Adding report [{0}] to the queue.", title); Logger.Info("Adding report [{0}] to the queue.", title);
@ -63,13 +65,6 @@ namespace NzbDrone.Core.Providers
private static string GetNzbName(string urlString) 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"); return urlString.Replace("&", "%26");
} }