diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs index 0c25c7802..a1c30231d 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilities.cs @@ -7,12 +7,14 @@ namespace NzbDrone.Core.Indexers.Newznab { public string[] SupportedSearchParameters { get; set; } public string[] SupportedTvSearchParameters { get; set; } + public bool SupportsAggregateIdSearch { get; set; } public List Categories { get; set; } public NewznabCapabilities() { SupportedSearchParameters = new[] { "q" }; SupportedTvSearchParameters = new[] { "q", "rid", "season", "ep" }; // This should remain 'rid' for older newznab installs. + SupportsAggregateIdSearch = false; Categories = new List(); } } diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs index d415074a4..550764f24 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabCapabilitiesProvider.cs @@ -89,6 +89,7 @@ namespace NzbDrone.Core.Indexers.Newznab else if (xmlTvSearch.Attribute("supportedParams") != null) { capabilities.SupportedTvSearchParameters = xmlTvSearch.Attribute("supportedParams").Value.Split(','); + capabilities.SupportsAggregateIdSearch = true; } } diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs index c88a1b79f..5a9dc825c 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabRequestGenerator.cs @@ -72,6 +72,16 @@ namespace NzbDrone.Core.Indexers.Newznab } } + private bool SupportsAggregatedIdSearch + { + get + { + var capabilities = _capabilitiesProvider.GetCapabilities(Settings); + + return capabilities.SupportsAggregateIdSearch; + } + } + public virtual IndexerPageableRequestChain GetRecentRequests() { var pageableRequests = new IndexerPageableRequestChain(); @@ -160,6 +170,23 @@ namespace NzbDrone.Core.Indexers.Newznab private void AddTvIdPageableRequests(IndexerPageableRequestChain chain, int maxPages, IEnumerable categories, SearchCriteriaBase searchCriteria, string parameters) { + if (SupportsAggregatedIdSearch) + { + var ids = ""; + + if (searchCriteria.Series.TvdbId > 0 && SupportsTvdbSearch) + { + ids += "&tvdbid=" + searchCriteria.Series.TvdbId; + } + + if (searchCriteria.Series.TvRageId > 0 && SupportsTvRageSearch) + { + ids += "&rid=" + searchCriteria.Series.TvRageId; + } + + chain.Add(GetPagedRequests(maxPages, categories, "tvsearch", ids + parameters)); + } + else { if (searchCriteria.Series.TvdbId > 0 && SupportsTvdbSearch) {