diff --git a/NzbDrone.Core.Test/IndexerTests.cs b/NzbDrone.Core.Test/IndexerTests.cs index 44094123d..e2a14f3bb 100644 --- a/NzbDrone.Core.Test/IndexerTests.cs +++ b/NzbDrone.Core.Test/IndexerTests.cs @@ -344,7 +344,6 @@ namespace NzbDrone.Core.Test //Act var parseResults = Mocker.Resolve().FetchRss(); - parseResults.Should().HaveCount(1); parseResults[0].Size.Should().Be(1183105773); } @@ -354,13 +353,16 @@ namespace NzbDrone.Core.Test WithConfiguredIndexers(); Mocker.GetMock() - .Setup(h => h.DownloadStream(It.IsAny(), It.IsAny())) + .Setup(h => h.DownloadStream("http://www.nzbindex.nl/rss/alt.binaries.teevee/?sort=agedesc&minsize=100&complete=1&max=50&more=1&q=%23a.b.teevee%40EFNet", It.IsAny())) + .Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbindex.xml")); + + Mocker.GetMock() + .Setup(h => h.DownloadStream("http://www.nzbindex.nl/rss/alt.binaries.hdtv/?sort=agedesc&minsize=100&complete=1&max=50&more=1&q=", It.IsAny())) .Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbindex.xml")); //Act var parseResults = Mocker.Resolve().FetchRss(); - parseResults.Should().HaveCount(1); parseResults[0].Size.Should().Be(587328389); } @@ -370,13 +372,17 @@ namespace NzbDrone.Core.Test WithConfiguredIndexers(); Mocker.GetMock() - .Setup(h => h.DownloadStream(It.IsAny(), It.IsAny())) + .Setup(h => h.DownloadStream("http://www.nzbclub.com/nzbfeed.aspx?ig=2&gid=102952&st=1&ns=1&q=%23a.b.teevee%40EFNet", It.IsAny())) + .Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbclub.xml")); + + Mocker.GetMock() + .Setup(h => h.DownloadStream("http://www.nzbclub.com/nzbfeed.aspx?ig=2&gid=5542&st=1&ns=1&q=", It.IsAny())) .Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbclub.xml")); //Act var parseResults = Mocker.Resolve().FetchRss(); - parseResults.Should().HaveCount(1); + parseResults.Should().HaveCount(2); parseResults[0].Size.Should().Be(2652142305); } @@ -465,38 +471,6 @@ namespace NzbDrone.Core.Test ExceptionVerification.MarkInconclusive("(500) Internal Server Error."); } - [Test] - public void title_preparse_nzbindex() - { - WithConfiguredIndexers(); - - Mocker.GetMock() - .Setup(h => h.DownloadStream(It.IsAny(), It.IsAny())) - .Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbindex.xml")); - - //Act - var parseResults = Mocker.Resolve().FetchRss(); - - parseResults.Should().HaveCount(1); - parseResults[0].CleanTitle.Should().Be("britainsgotmoretalent"); - } - - [Test] - public void title_preparse_nzbclub() - { - WithConfiguredIndexers(); - - Mocker.GetMock() - .Setup(h => h.DownloadStream(It.IsAny(), It.IsAny())) - .Returns(File.OpenRead(".\\Files\\Rss\\SizeParsing\\nzbclub.xml")); - - //Act - var parseResults = Mocker.Resolve().FetchRss(); - - parseResults.Should().HaveCount(1); - parseResults[0].CleanTitle.Should().Be("britainsgottalent"); - } - [TestCase("wombles.xml", "de-de")] public void dateTime_should_parse_when_using_other_cultures(string fileName, string culture) { @@ -665,8 +639,12 @@ namespace NzbDrone.Core.Test const string expectedString = "release"; Mocker.GetMock() - .Setup(h => h.DownloadStream(It.IsAny(), It.IsAny())) - .Returns(File.OpenRead(".\\Files\\Rss\\" + fileName)); + .Setup(h => h.DownloadStream("http://www.nzbindex.nl/rss/alt.binaries.teevee/?sort=agedesc&minsize=100&complete=1&max=50&more=1&q=%23a.b.teevee%40EFNet", It.IsAny())) + .Returns(File.OpenRead(".\\Files\\Rss\\nzbindex.xml")); + + Mocker.GetMock() + .Setup(h => h.DownloadStream("http://www.nzbindex.nl/rss/alt.binaries.hdtv/?sort=agedesc&minsize=100&complete=1&max=50&more=1&q=", It.IsAny())) + .Returns(File.OpenRead(".\\Files\\Rss\\nzbindex.xml")); var parseResults = Mocker.Resolve().FetchRss(); @@ -685,7 +663,11 @@ namespace NzbDrone.Core.Test const string expectedString = "nzb_view"; Mocker.GetMock() - .Setup(h => h.DownloadStream(It.IsAny(), It.IsAny())) + .Setup(h => h.DownloadStream("http://www.nzbclub.com/nzbfeed.aspx?ig=2&gid=102952&st=1&ns=1&q=%23a.b.teevee%40EFNet", It.IsAny())) + .Returns(File.OpenRead(".\\Files\\Rss\\" + fileName)); + + Mocker.GetMock() + .Setup(h => h.DownloadStream("http://www.nzbclub.com/nzbfeed.aspx?ig=2&gid=5542&st=1&ns=1&q=", It.IsAny())) .Returns(File.OpenRead(".\\Files\\Rss\\" + fileName)); var parseResults = Mocker.Resolve().FetchRss(); diff --git a/NzbDrone.Core.Test/ParserFixture/ParserTest.cs b/NzbDrone.Core.Test/ParserFixture/ParserTest.cs index 42992960f..81bb1bead 100644 --- a/NzbDrone.Core.Test/ParserFixture/ParserTest.cs +++ b/NzbDrone.Core.Test/ParserFixture/ParserTest.cs @@ -386,5 +386,12 @@ namespace NzbDrone.Core.Test.ParserFixture { Parser.ParseReleaseGroup(title).Should().Be(expected); } + + [TestCase("[112461]-[FULL]-[#a.b.teevee@EFNet]-[ 666.Park.Avenue.S01E03.720p.HDTV.X264-DIMENSION ]-[02/31] - \"the.devils.address.103.720p-dimension.par2\" yEnc", "666.Park.Avenue.S01E03.720p.HDTV.X264-DIMENSION")] + [TestCase("[112438]-[FULL]-[#a.b.teevee@EFNet]-[ Downton_Abbey.3x05.HDTV_x264-FoV ]-[01/26] - \"downton_abbey.3x05.hdtv_x264-fov.nfo\" yEnc", "Downton_Abbey.3x05.HDTV_x264-FoV")] + public void parse_header(string title, string expected) + { + Parser.ParseHeader(title).Should().Be(expected); + } } } diff --git a/NzbDrone.Core/Parser.cs b/NzbDrone.Core/Parser.cs index e16db0894..2d1c1399e 100644 --- a/NzbDrone.Core/Parser.cs +++ b/NzbDrone.Core/Parser.cs @@ -74,8 +74,14 @@ namespace NzbDrone.Core private static readonly Regex ReportSizeRegex = new Regex(@"(?\d+\.\d{1,2}|\d+\,\d+\.\d{1,2})\W?(?GB|MB|GiB|MiB)", RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex HeaderRegex = new Regex(@"(?:\[.+\]\-\[.+\]\-\[.+\]\-\[)(?.+)(?:\]\-.+)", - RegexOptions.IgnoreCase | RegexOptions.Compiled); + private static readonly Regex[] HeaderRegex = new[] + { + new Regex(@"(?:\[.+\]\-\[.+\]\-\[.+\]\-\[)(?.+)(?:\]\-.+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + + new Regex(@"(?:\[)(?.+)(?:\]\-.+)", + RegexOptions.IgnoreCase | RegexOptions.Compiled), + }; internal static EpisodeParseResult ParsePath(string path) { @@ -480,10 +486,13 @@ namespace NzbDrone.Core internal static string ParseHeader(string header) { - var match = HeaderRegex.Matches(header); + foreach(var regex in HeaderRegex) + { + var match = regex.Matches(header); - if (match.Count != 0) - return match[0].Groups["nzbTitle"].Value; + if (match.Count != 0) + return match[0].Groups["nzbTitle"].Value.Trim(); + } return header; } diff --git a/NzbDrone.Core/Providers/Indexer/NzbClub.cs b/NzbDrone.Core/Providers/Indexer/NzbClub.cs index 198129ab1..ed21d4e14 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbClub.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbClub.cs @@ -23,7 +23,8 @@ namespace NzbDrone.Core.Providers.Indexer { return new[] { - string.Format("http://www.nzbclub.com/nzbfeed.aspx?ig=2&gid=102952&st=1&ns=1&q=%23a.b.teevee%40EFNet") + String.Format("http://www.nzbclub.com/nzbfeed.aspx?ig=2&gid=102952&st=1&ns=1&q=%23a.b.teevee%40EFNet"), + String.Format("http://www.nzbclub.com/nzbfeed.aspx?ig=2&gid=5542&st=1&ns=1&q=") }; } } diff --git a/NzbDrone.Core/Providers/Indexer/NzbIndex.cs b/NzbDrone.Core/Providers/Indexer/NzbIndex.cs index 69aacea8d..4a7ebd847 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbIndex.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbIndex.cs @@ -23,7 +23,8 @@ namespace NzbDrone.Core.Providers.Indexer { return new[] { - string.Format("http://www.nzbindex.nl/rss/alt.binaries.teevee/?sort=agedesc&minsize=100&complete=1&max=50&more=1&q=%23a.b.teevee%40EFNet") + String.Format("http://www.nzbindex.nl/rss/alt.binaries.teevee/?sort=agedesc&minsize=100&complete=1&max=50&more=1&q=%23a.b.teevee%40EFNet"), + String.Format("http://www.nzbindex.nl/rss/alt.binaries.hdtv/?sort=agedesc&minsize=100&complete=1&max=50&more=1&q=") }; } }