From 4c5707bba8e7f10bffa4c1154b72d00d974ab520 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Mon, 28 Mar 2016 20:15:31 +0200 Subject: [PATCH] Fixed: Newznab/Torznab used wrong query if tvrageid was unknown in combination with a specific indexer capability profile. --- .../NewznabRequestGeneratorFixture.cs | 15 +++++++++++++++ .../Newznab/NewznabRequestGenerator.cs | 18 +++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs index 0edb3cf34..aff001b99 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabRequestGeneratorFixture.cs @@ -234,6 +234,21 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests page.Url.Query.Should().Contain("q="); } + [Test] + public void should_not_use_aggregrated_id_search_if_no_ids_are_known() + { + _capabilities.SupportedTvSearchParameters = new[] { "q", "rid", "season", "ep" }; + _capabilities.SupportsAggregateIdSearch = true; // Turns true if indexer supplies supportedParams. + + _singleEpisodeSearchCriteria.Series.TvRageId = 0; + + var results = Subject.GetSearchRequests(_singleEpisodeSearchCriteria); + + var page = results.GetTier(0).First().First(); + + page.Url.Query.Should().Contain("q="); + } + [Test] public void should_fallback_to_q() { diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs index 3ecec8450..48d548084 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs @@ -183,21 +183,25 @@ namespace NzbDrone.Core.Indexers.Newznab private void AddTvIdPageableRequests(IndexerPageableRequestChain chain, int maxPages, IEnumerable categories, SearchCriteriaBase searchCriteria, string parameters) { - if (SupportsAggregatedIdSearch && (SupportsTvdbSearch || SupportsTvRageSearch || SupportsTvMazeSearch)) + var includeTvdbSearch = SupportsTvdbSearch && searchCriteria.Series.TvdbId > 0; + var includeTvRageSearch = SupportsTvRageSearch && searchCriteria.Series.TvRageId > 0; + var includeTvMazeSearch = SupportsTvMazeSearch && searchCriteria.Series.TvMazeId > 0; + + if (SupportsAggregatedIdSearch && (includeTvdbSearch || includeTvRageSearch || includeTvMazeSearch)) { var ids = ""; - if (searchCriteria.Series.TvdbId > 0 && SupportsTvdbSearch) + if (includeTvdbSearch) { ids += "&tvdbid=" + searchCriteria.Series.TvdbId; } - if (searchCriteria.Series.TvRageId > 0 && SupportsTvRageSearch) + if (includeTvRageSearch) { ids += "&rid=" + searchCriteria.Series.TvRageId; } - if (searchCriteria.Series.TvMazeId > 0 && SupportsTvMazeSearch) + if (includeTvMazeSearch) { ids += "&tvmazeid=" + searchCriteria.Series.TvMazeId; } @@ -206,18 +210,18 @@ namespace NzbDrone.Core.Indexers.Newznab } else { - if (searchCriteria.Series.TvdbId > 0 && SupportsTvdbSearch) + if (includeTvdbSearch) { chain.Add(GetPagedRequests(maxPages, categories, "tvsearch", string.Format("&tvdbid={0}{1}", searchCriteria.Series.TvdbId, parameters))); } - else if (searchCriteria.Series.TvRageId > 0 && SupportsTvRageSearch) + else if (includeTvRageSearch) { chain.Add(GetPagedRequests(maxPages, categories, "tvsearch", string.Format("&rid={0}{1}", searchCriteria.Series.TvRageId, parameters))); } - else if (searchCriteria.Series.TvMazeId > 0 && SupportsTvMazeSearch) + else if (includeTvMazeSearch) { chain.Add(GetPagedRequests(maxPages, categories, "tvsearch", string.Format("&tvmazeid={0}{1}", searchCriteria.Series.TvMazeId, parameters)));