Fixed: Dynamic page size for Cardigann search path paging

Fixes some indexers that have arbitrary paging paths in their search-paths definitions. Set page size based on first request, break out if a request down the line returns less results.
pull/225/head
Qstick 3 years ago
parent 5a1186639e
commit bbea256c85

@ -176,12 +176,16 @@ namespace NzbDrone.Core.Indexers
{ {
var pagedReleases = new List<ReleaseInfo>(); var pagedReleases = new List<ReleaseInfo>();
var pageSize = PageSize;
foreach (var request in pageableRequest) foreach (var request in pageableRequest)
{ {
url = request.Url.FullUri; url = request.Url.FullUri;
var page = await FetchPage(request, parser); var page = await FetchPage(request, parser);
pageSize = pageSize == 1 ? page.Releases.Count : pageSize;
result.Queries.Add(page); result.Queries.Add(page);
pagedReleases.AddRange(page.Releases); pagedReleases.AddRange(page.Releases);
@ -213,7 +217,7 @@ namespace NzbDrone.Core.Indexers
break; break;
} }
if (!IsFullPage(page.Releases)) if (!IsFullPage(page.Releases, pageSize))
{ {
break; break;
} }
@ -336,9 +340,9 @@ namespace NzbDrone.Core.Indexers
return Capabilities ?? ((IndexerDefinition)Definition).Capabilities; return Capabilities ?? ((IndexerDefinition)Definition).Capabilities;
} }
protected virtual bool IsFullPage(IList<ReleaseInfo> page) protected virtual bool IsFullPage(IList<ReleaseInfo> page, int pageSize)
{ {
return PageSize != 0 && page.Count >= PageSize; return pageSize != 0 && page.Count >= pageSize;
} }
protected virtual async Task<IndexerQueryResult> FetchPage(IndexerRequest request, IParseIndexerResponse parser) protected virtual async Task<IndexerQueryResult> FetchPage(IndexerRequest request, IParseIndexerResponse parser)

Loading…
Cancel
Save