cardigann: check for page size

This commit is contained in:
Bogdan 2023-05-01 19:56:06 +03:00
parent 9e5973af5c
commit f59cc953ec
5 changed files with 45 additions and 0 deletions

View File

@ -10,6 +10,8 @@ links:
- https://movietorrent.co/
caps:
limitsDefault: 36
limitsMax: 36
categorymappings:
- {id: 1, cat: Movies, desc: "Bollywood"}
- {id: 2, cat: Movies/HD, desc: "1080p"}
@ -74,6 +76,9 @@ download:
- name: validfilename
search:
pageSize: 12
pageable: true
paths:
- path: "?s={{ .Keywords }}"
- path: "/page/2/?s={{ .Keywords }}"

View File

@ -93,6 +93,14 @@
"type": "object",
"additionalProperties": false,
"properties": {
"limitsDefault": {
"type": "integer",
"minimum": 1
},
"limitsMax": {
"type": "integer",
"minimum": 1
},
"categories": {
"type": "object",
"additionalProperties": false,
@ -482,6 +490,13 @@
"type": "object",
"additionalProperties": false,
"properties": {
"pageSize": {
"type": "integer",
"minimum": 1
},
"pageable": {
"type": "boolean"
},
"path": {
"type": "string"
},

View File

@ -35,6 +35,7 @@ namespace Jackett.Common.Indexers
public virtual string Type { get; protected set; }
public virtual bool SupportsPagination => false;
public virtual int PageSize => 0;
public virtual bool IsConfigured { get; protected set; }
public virtual string[] Tags { get; protected set; }

View File

@ -27,6 +27,8 @@ namespace Jackett.Common.Indexers
{
public class CardigannIndexer : BaseWebIndexer
{
public override int PageSize => Definition.Search != null && Definition.Search.PageSize > 0 ? Definition.Search.PageSize : 1;
protected IndexerDefinition Definition;
protected WebResult landingResult;
protected IHtmlDocument landingResultDocument;
@ -124,6 +126,8 @@ namespace Jackett.Common.Indexers
TorznabCaps = new TorznabCapabilities();
TorznabCaps.ParseCardigannSearchModes(Definition.Caps.Modes);
TorznabCaps.SupportsRawSearch = Definition.Caps.Allowrawsearch;
TorznabCaps.LimitsDefault = Definition.Caps.LimitsDefault ?? TorznabCaps.LimitsDefault;
TorznabCaps.LimitsMax = Definition.Caps.LimitsMax ?? TorznabCaps.LimitsMax;
// init config Data
configData = new ConfigurationData();
@ -1353,6 +1357,8 @@ namespace Jackett.Common.Indexers
variables[".Query.Keywords"] = string.Join(" ", KeywordTokens);
variables[".Keywords"] = applyFilters((string)variables[".Query.Keywords"], Search.Keywordsfilters, variables);
var pageSize = PageSize;
// TODO: prepare queries first and then send them parallel
var SearchPaths = Search.Paths;
foreach (var SearchPath in SearchPaths)
@ -1734,14 +1740,28 @@ namespace Jackett.Common.Indexers
OnParseError(results, ex);
}
}
pageSize = pageSize == 1 ? releases.Count : pageSize;
if (Search.Pageable && !IsFullPage(releases, pageSize))
{
break;
}
}
if (query.Limit > 0)
{
releases = releases.Take(query.Limit).ToList();
}
return releases;
}
protected virtual bool IsFullPage(IList<ReleaseInfo> page, int pageSize)
{
return pageSize != 0 && page.Count >= pageSize;
}
protected async Task<WebResult> handleRequest(requestBlock request, Dictionary<string, object> variables = null, string referer = null)
{
var requestLinkStr = resolvePath(applyGoTemplateText(request.Path, variables)).ToString();

View File

@ -69,6 +69,8 @@ namespace Jackett.Common.Models
public class capabilitiesBlock
{
public int? LimitsMax { get; set; }
public int? LimitsDefault { get; set; }
public Dictionary<string, string> Categories { get; set; }
public List<CategorymappingBlock> Categorymappings { get; set; }
public Dictionary<string, List<string>> Modes { get; set; }
@ -137,6 +139,8 @@ namespace Jackett.Common.Models
public class searchBlock
{
public int PageSize { get; set; }
public bool Pageable { get; set; }
public string Path { get; set; }
public List<searchPathBlock> Paths { get; set; }
public Dictionary<string, List<string>> Headers { get; set; }