From c5a864469f18efb066c54e1d19095404dc864da2 Mon Sep 17 00:00:00 2001 From: Daniel Jacobs Date: Wed, 8 Apr 2026 16:26:50 +0100 Subject: [PATCH] Fixed: Don't send limit=0 to Newznab indexers When searching via the internal API, SearchResource.Limit defaults to 0 because it's a non-nullable int. This gets passed through to the Newznab request generator, which emits &limit=0 in the query URL. Indexers that follow the Newznab spec honor limit=0 literally and return zero results. Confirmed affected: DrunkenSlug and NZBGeek. Changed Limit and Offset on SearchResource to int? so they default to null when omitted, matching the existing behavior in NewznabRequest. Also guard against emitting limit=0 or offset=0 in the request generators. --- .../Definitions/Headphones/HeadphonesRequestGenerator.cs | 4 ++-- .../Indexers/Definitions/Newznab/NewznabRequestGenerator.cs | 4 ++-- src/Prowlarr.Api.V1/Search/SearchResource.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Headphones/HeadphonesRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Definitions/Headphones/HeadphonesRequestGenerator.cs index c2169d9cb..a5d33a8ba 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Headphones/HeadphonesRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Headphones/HeadphonesRequestGenerator.cs @@ -120,12 +120,12 @@ private IEnumerable GetPagedRequests(SearchCriteriaBase searchCr baseUrl += "&apikey=" + Settings.ApiKey; } - if (searchCriteria.Limit.HasValue) + if (searchCriteria.Limit.HasValue && searchCriteria.Limit.Value > 0) { parameters.Add("limit", searchCriteria.Limit.ToString()); } - if (searchCriteria.Offset.HasValue) + if (searchCriteria.Offset.HasValue && searchCriteria.Offset.Value > 0) { parameters.Add("offset", searchCriteria.Offset.ToString()); } diff --git a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs index ad3f48b07..f4bc090a6 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRequestGenerator.cs @@ -263,12 +263,12 @@ private IEnumerable GetPagedRequests(SearchCriteriaBase searchCr searchUrl += "&apikey=" + Settings.ApiKey; } - if (searchCriteria.Limit.HasValue) + if (searchCriteria.Limit.HasValue && searchCriteria.Limit.Value > 0) { parameters.Set("limit", searchCriteria.Limit.ToString()); } - if (searchCriteria.Offset.HasValue) + if (searchCriteria.Offset.HasValue && searchCriteria.Offset.Value > 0) { parameters.Set("offset", searchCriteria.Offset.ToString()); } diff --git a/src/Prowlarr.Api.V1/Search/SearchResource.cs b/src/Prowlarr.Api.V1/Search/SearchResource.cs index 67f7659d1..2c6531ade 100644 --- a/src/Prowlarr.Api.V1/Search/SearchResource.cs +++ b/src/Prowlarr.Api.V1/Search/SearchResource.cs @@ -14,7 +14,7 @@ public SearchResource() public string Type { get; set; } public List IndexerIds { get; set; } public List Categories { get; set; } - public int Limit { get; set; } - public int Offset { get; set; } + public int? Limit { get; set; } + public int? Offset { get; set; } } }