Fixed: (SpeedAppBase) Add pagination

pull/1441/head
Bogdan 1 year ago
parent a8ea05af07
commit 252cd97e35

@ -40,7 +40,7 @@ namespace NzbDrone.Core.Indexers.Definitions
BookSearchParams = new List<BookSearchParam> BookSearchParams = new List<BookSearchParam>
{ {
BookSearchParam.Q, BookSearchParam.Q,
}, }
}; };
caps.Categories.AddCategoryMapping(401, NewznabStandardCategory.Movies, "Movies"); caps.Categories.AddCategoryMapping(401, NewznabStandardCategory.Movies, "Movies");

@ -8,8 +8,8 @@ namespace NzbDrone.Core.Indexers.Definitions
public class SpeedApp : SpeedAppBase public class SpeedApp : SpeedAppBase
{ {
public override string Name => "SpeedApp.io"; public override string Name => "SpeedApp.io";
public override string[] IndexerUrls => new string[] { "https://speedapp.io/" }; public override string[] IndexerUrls => new[] { "https://speedapp.io/" };
public override string[] LegacyUrls => new string[] { "https://speedapp.io" }; public override string[] LegacyUrls => new[] { "https://speedapp.io" };
public override string Description => "SpeedApp is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"; public override string Description => "SpeedApp is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL";
public override string Language => "ro-RO"; public override string Language => "ro-RO";
public override IndexerPrivacy Privacy => IndexerPrivacy.Private; public override IndexerPrivacy Privacy => IndexerPrivacy.Private;
@ -38,7 +38,7 @@ namespace NzbDrone.Core.Indexers.Definitions
BookSearchParams = new List<BookSearchParam> BookSearchParams = new List<BookSearchParam>
{ {
BookSearchParam.Q, BookSearchParam.Q,
}, }
}; };
caps.Categories.AddCategoryMapping(38, NewznabStandardCategory.Movies, "Movie Packs"); caps.Categories.AddCategoryMapping(38, NewznabStandardCategory.Movies, "Movie Packs");

@ -31,6 +31,7 @@ namespace NzbDrone.Core.Indexers.Definitions
private string LoginUrl => Settings.BaseUrl + "api/login"; private string LoginUrl => Settings.BaseUrl + "api/login";
public override Encoding Encoding => Encoding.UTF8; public override Encoding Encoding => Encoding.UTF8;
public override DownloadProtocol Protocol => DownloadProtocol.Torrent; public override DownloadProtocol Protocol => DownloadProtocol.Torrent;
public override int PageSize => 100;
public override IndexerCapabilities Capabilities => SetCapabilities(); public override IndexerCapabilities Capabilities => SetCapabilities();
protected virtual int MinimumSeedTime => 172800; // 48 hours protected virtual int MinimumSeedTime => 172800; // 48 hours
private IIndexerRepository _indexerRepository; private IIndexerRepository _indexerRepository;
@ -43,7 +44,7 @@ namespace NzbDrone.Core.Indexers.Definitions
public override IIndexerRequestGenerator GetRequestGenerator() public override IIndexerRequestGenerator GetRequestGenerator()
{ {
return new SpeedAppRequestGenerator(Capabilities, Settings); return new SpeedAppRequestGenerator(Capabilities, Settings, PageSize);
} }
public override IParseIndexerResponse GetParser() public override IParseIndexerResponse GetParser()
@ -168,26 +169,25 @@ namespace NzbDrone.Core.Indexers.Definitions
protected virtual IndexerCapabilities SetCapabilities() protected virtual IndexerCapabilities SetCapabilities()
{ {
var caps = new IndexerCapabilities(); return new IndexerCapabilities();
return caps;
} }
} }
public class SpeedAppRequestGenerator : IIndexerRequestGenerator public class SpeedAppRequestGenerator : IIndexerRequestGenerator
{ {
private readonly IndexerCapabilities _capabilities;
private readonly SpeedAppSettings _settings;
private readonly int _pageSize;
public Func<IDictionary<string, string>> GetCookies { get; set; } public Func<IDictionary<string, string>> GetCookies { get; set; }
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; } public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
private IndexerCapabilities Capabilities { get; } public SpeedAppRequestGenerator(IndexerCapabilities capabilities, SpeedAppSettings settings, int pageSize)
private SpeedAppSettings Settings { get; }
public SpeedAppRequestGenerator(IndexerCapabilities capabilities, SpeedAppSettings settings)
{ {
Capabilities = capabilities; _capabilities = capabilities;
Settings = settings; _settings = settings;
_pageSize = pageSize;
} }
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria) public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
@ -219,54 +219,62 @@ namespace NzbDrone.Core.Indexers.Definitions
{ {
var pageableRequests = new IndexerPageableRequestChain(); var pageableRequests = new IndexerPageableRequestChain();
pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories, imdbId, season, episode)); pageableRequests.Add(GetPagedRequests($"{searchCriteria.SanitizedSearchTerm}", searchCriteria.Categories, searchCriteria.Limit ?? _pageSize, searchCriteria.Offset ?? 0, imdbId, season, episode));
return pageableRequests; return pageableRequests;
} }
private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categories, string imdbId = null, int? season = null, string episode = null) private IEnumerable<IndexerRequest> GetPagedRequests(string term, int[] categories, int limit, int offset, string imdbId = null, int? season = null, string episode = null)
{ {
var qc = new NameValueCollection() limit = Math.Min(_pageSize, limit);
offset = Math.Max(0, offset);
var parameters = new NameValueCollection
{ {
{ "itemsPerPage", "100" }, { "itemsPerPage", limit.ToString() },
{ "sort", "torrent.createdAt" }, { "sort", "torrent.createdAt" },
{ "direction", "desc" } { "direction", "desc" }
}; };
if (limit > 0 && offset > 0)
{
var page = (offset / limit) + 1;
parameters.Set("page", page.ToString());
}
if (imdbId.IsNotNullOrWhiteSpace()) if (imdbId.IsNotNullOrWhiteSpace())
{ {
qc.Add("imdbId", imdbId); parameters.Set("imdbId", imdbId);
} }
else else
{ {
qc.Add("search", term); parameters.Set("search", term);
} }
if (season != null) if (season != null)
{ {
qc.Add("season", season.Value.ToString()); parameters.Set("season", season.Value.ToString());
} }
if (episode != null) if (episode != null)
{ {
qc.Add("episode", episode); parameters.Set("episode", episode);
} }
var cats = Capabilities.Categories.MapTorznabCapsToTrackers(categories); var cats = _capabilities.Categories.MapTorznabCapsToTrackers(categories);
if (cats.Count > 0) if (cats.Count > 0)
{ {
foreach (var cat in cats) foreach (var cat in cats)
{ {
qc.Add("categories[]", cat); parameters.Add("categories[]", cat);
} }
} }
var searchUrl = Settings.BaseUrl + "api/torrent?" + qc.GetQueryString(duplicateKeysIfMulti: true); var searchUrl = _settings.BaseUrl + "api/torrent?" + parameters.GetQueryString(duplicateKeysIfMulti: true);
var request = new IndexerRequest(searchUrl, HttpAccept.Json); var request = new IndexerRequest(searchUrl, HttpAccept.Json);
request.HttpRequest.Headers.Set("Authorization", $"Bearer {Settings.ApiKey}"); request.HttpRequest.Headers.Set("Authorization", $"Bearer {_settings.ApiKey}");
yield return request; yield return request;
} }

Loading…
Cancel
Save