diff --git a/NzbDrone.Core.Test/IndexerTests.cs b/NzbDrone.Core.Test/IndexerTests.cs index 045eced0e..d80625690 100644 --- a/NzbDrone.Core.Test/IndexerTests.cs +++ b/NzbDrone.Core.Test/IndexerTests.cs @@ -270,10 +270,22 @@ namespace NzbDrone.Core.Test [TestCase("hawaii five-0 (2010)", "hawaii+five+0+2010")] [TestCase("this& that", "this+that")] [TestCase("this& that", "this+that")] + [TestCase("grey's anatomy", "grey+s+anatomy")] public void get_query_title(string raw, string clean) { - var result = IndexerBase.GetQueryTitle(raw); + var mock = new Mock(); + mock.CallBase = true; + var result = mock.Object.GetQueryTitle(raw); + result.Should().Be(clean); + } + [TestCase("hawaii five-0 (2010)", "hawaii+five+0+2010")] + [TestCase("this& that", "this+that")] + [TestCase("this& that", "this+that")] + [TestCase("grey's anatomy", "greys+anatomy")] + public void get_query_title_nzbmatrix_should_replace_apostrophe_with_empty_string(string raw, string clean) + { + var result = Mocker.Resolve().GetQueryTitle(raw); result.Should().Be(clean); } diff --git a/NzbDrone.Core/Providers/Indexer/IndexerBase.cs b/NzbDrone.Core/Providers/Indexer/IndexerBase.cs index 81b880183..affcee148 100644 --- a/NzbDrone.Core/Providers/Indexer/IndexerBase.cs +++ b/NzbDrone.Core/Providers/Indexer/IndexerBase.cs @@ -222,7 +222,12 @@ namespace NzbDrone.Core.Providers.Indexer return CustomParser(item, episodeParseResult); } - public static string GetQueryTitle(string title) + /// + /// This method can be overwritten to provide indexer specific title cleaning + /// + /// Title that needs to be cleaned + /// + public virtual string GetQueryTitle(string title) { var cleanTitle = TitleSearchRegex.Replace(title, "+").Trim('+', ' '); diff --git a/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs b/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs index 2e10c84bf..89b758566 100644 --- a/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs +++ b/NzbDrone.Core/Providers/Indexer/NzbMatrix.cs @@ -17,6 +17,8 @@ namespace NzbDrone.Core.Providers.Indexer { } + private static readonly Regex TitleSearchRegex = new Regex(@"[\W]", RegexOptions.IgnoreCase | RegexOptions.Compiled); + protected override string[] Urls { get @@ -94,7 +96,6 @@ namespace NzbDrone.Core.Providers.Indexer get { return "NzbMatrix"; } } - protected override string NzbDownloadUrl(SyndicationItem item) { return item.Links[0].Uri.ToString(); @@ -110,5 +111,16 @@ namespace NzbDrone.Core.Providers.Indexer } return currentResult; } + + public override string GetQueryTitle(string title) + { + //Replace apostrophe with empty string + title = title.Replace("'", ""); + var cleanTitle = TitleSearchRegex.Replace(title, "+").Trim('+', ' '); + + //remove any repeating +s + cleanTitle = Regex.Replace(cleanTitle, @"\+{1,100}", "+"); + return cleanTitle; + } } } \ No newline at end of file