Fixed: (SpeedCD) Add pagination and `SupportsPagination`

pull/1540/head
Bogdan 1 year ago
parent 4348ebe187
commit ac3047f0cc

@ -35,6 +35,7 @@ public class SpeedCD : TorrentIndexerBase<SpeedCDSettings>
public override Encoding Encoding => Encoding.UTF8;
public override DownloadProtocol Protocol => DownloadProtocol.Torrent;
public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
public override bool SupportsPagination => true;
public override IndexerCapabilities Capabilities => SetCapabilities();
public SpeedCD(IIndexerHttpClient httpClient,
@ -190,41 +191,6 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
_encoding = encoding;
}
private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categories, bool deep = false)
{
var parameters = new List<string>();
var catList = _capabilities.Categories.MapTorznabCapsToTrackers(categories);
foreach (var cat in catList)
{
parameters.Add(cat);
}
if (_settings.FreeleechOnly)
{
parameters.Add("freeleech");
}
if (_settings.ExcludeArchives)
{
parameters.Add("norar");
}
if (deep)
{
parameters.Add("deep");
}
parameters.Add("q");
parameters.Add(term.UrlEncode(_encoding));
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/browse/{string.Join("/", parameters)}";
var request = new IndexerRequest(searchUrl, HttpAccept.Html);
yield return request;
}
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
{
var pageableRequests = new IndexerPageableRequestChain();
@ -236,7 +202,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
term = $"{searchCriteria.FullImdbId}";
}
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria.Categories, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
return pageableRequests;
}
@ -245,7 +211,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria));
return pageableRequests;
}
@ -271,7 +237,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
}
}
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria.Categories, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
pageableRequests.Add(GetPagedRequests(term.Trim(), searchCriteria, searchCriteria.FullImdbId.IsNotNullOrWhiteSpace()));
return pageableRequests;
}
@ -280,7 +246,7 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria));
return pageableRequests;
}
@ -289,11 +255,55 @@ public class SpeedCDRequestGenerator : IIndexerRequestGenerator
{
var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories));
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria));
return pageableRequests;
}
private IEnumerable<IndexerRequest> GetPagedRequests(string term, SearchCriteriaBase searchCriteria, bool deep = false)
{
var parameters = new List<string>();
var catList = _capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories);
foreach (var cat in catList)
{
parameters.Add(cat);
}
if (_settings.FreeleechOnly)
{
parameters.Add("freeleech");
}
if (_settings.ExcludeArchives)
{
parameters.Add("norar");
}
if (deep)
{
parameters.Add("deep");
}
if (term.IsNotNullOrWhiteSpace())
{
parameters.Add("q");
parameters.Add(term.UrlEncode(_encoding));
}
if (searchCriteria.Limit is > 0 && searchCriteria.Offset is > 0)
{
var page = (int)(searchCriteria.Offset / searchCriteria.Limit) + 1;
parameters.Add("p");
parameters.Add(page.ToString());
}
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/browse/{string.Join("/", parameters)}";
yield return new IndexerRequest(searchUrl, HttpAccept.Html);
}
public Func<IDictionary<string, string>> GetCookies { get; set; }
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
}

Loading…
Cancel
Save