From 96aeb022ab9c75f177483a017aa5dcacae8e9cbf Mon Sep 17 00:00:00 2001 From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com> Date: Sat, 9 Apr 2022 23:16:20 -0500 Subject: [PATCH] Fixed: Escape Characters as needed for *znab queries (cherry picked from commit f678775e5c3deb0c520f88a137198331fee2831f) --- .../NewznabRequestGeneratorFixture.cs | 35 +++++++++++++++++++ .../Newznab/NewznabRequestGenerator.cs | 4 ++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs index f55168f78..7f92d2b44 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs @@ -62,5 +62,40 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests page.Url.Query.Should().Contain("author=Alien%20Ant%20Farm"); page.Url.Query.Should().Contain("title=TruANT"); } + + [Test] + public void should_encode_raw_title() + { + _capabilities.SupportedTvSearchParameters = new[] { "q", "season", "ep" }; + _capabilities.TvTextSearchEngine = "raw"; + _singleEpisodeSearchCriteria.SceneTitles[0] = "Edith & Little"; + + var results = Subject.GetSearchRequests(_singleEpisodeSearchCriteria); + results.Tiers.Should().Be(1); + + var pageTier = results.GetTier(0).First().First(); + + pageTier.Url.Query.Should().Contain("q=Edith%20%26%20Little"); + pageTier.Url.Query.Should().NotContain(" & "); + pageTier.Url.Query.Should().Contain("%26"); + } + + [Test] + public void should_use_clean_title_and_encode() + { + _capabilities.SupportedTvSearchParameters = new[] { "q", "season", "ep" }; + _capabilities.TvTextSearchEngine = "sphinx"; + _singleEpisodeSearchCriteria.SceneTitles[0] = "Edith & Little"; + + var results = Subject.GetSearchRequests(_singleEpisodeSearchCriteria); + results.Tiers.Should().Be(1); + + var pageTier = results.GetTier(0).First().First(); + + pageTier.Url.Query.Should().Contain("q=Edith%20and%20Little"); + pageTier.Url.Query.Should().Contain("and"); + pageTier.Url.Query.Should().NotContain(" & "); + pageTier.Url.Query.Should().NotContain("%26"); + } } } diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs index 7dbb3f339..8567946d6 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using NzbDrone.Common.Extensions; @@ -145,7 +146,8 @@ namespace NzbDrone.Core.Indexers.Newznab private static string NewsnabifyTitle(string title) { - return title.Replace("+", "%20"); + title = title.Replace("+", " "); + return Uri.EscapeDataString(title); } } }