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);
Mocker.GetMock<SabProvider>()
.Setup(s => s.AddByUrl(parseResult.NzbUrl, sabTitle))
.Setup(s => s.AddByUrl(parseResult, sabTitle))
.Returns(true);
Mocker.GetMock<SabProvider>()

View File

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

View File

@ -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<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()
{
@ -59,9 +71,7 @@ namespace NzbDrone.Core.Test.ProviderTests.SabProviderTests
.Returns("ok");
//Act
bool result = Mocker.Resolve<SabProvider>().AddByUrl(
"http://www.nzbclub.com/nzb_download.aspx?mid=1950232",
"This is an Nzb");
bool result = Mocker.Resolve<SabProvider>().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<SabProvider>().AddByUrl(
"http://www.newzbin.com/browse/post/6107863/nzb",
"This is an Nzb");
bool result = Mocker.Resolve<SabProvider>().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<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.IsFalse(result);

View File

@ -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)

View File

@ -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);

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
{
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;
}
}
}

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);

View File

@ -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");
}