From d4b037db78dccdf8ce763b8640a5276041f6a1c3 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 21 Sep 2023 20:46:34 +0300 Subject: [PATCH] New: (AlphaRatio) Add pagination support --- .../Indexers/Definitions/AlphaRatio.cs | 17 +++++++++++++++-- .../Gazelle/GazelleRequestGenerator.cs | 17 +++++++++-------- .../Indexers/Definitions/GreatPosterWall.cs | 6 +++--- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/AlphaRatio.cs b/src/NzbDrone.Core/Indexers/Definitions/AlphaRatio.cs index aa8d6d9b4..03123bb7a 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/AlphaRatio.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/AlphaRatio.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Collections.Specialized; using NLog; @@ -5,6 +6,7 @@ using NzbDrone.Common.Http; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; using NzbDrone.Core.Indexers.Definitions.Gazelle; +using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Core.Indexers.Definitions; @@ -15,6 +17,9 @@ public class AlphaRatio : GazelleBase public override string[] IndexerUrls => new[] { "https://alpharatio.cc/" }; public override string Description => "AlphaRatio(AR) is a Private Torrent Tracker for 0DAY / GENERAL"; public override IndexerPrivacy Privacy => IndexerPrivacy.Private; + public override bool SupportsPagination => true; + public override int PageSize => 50; + public override TimeSpan RateLimit => TimeSpan.FromSeconds(3); public AlphaRatio(IIndexerHttpClient httpClient, IEventAggregator eventAggregator, @@ -39,6 +44,8 @@ public class AlphaRatio : GazelleBase { var caps = new IndexerCapabilities { + LimitsDefault = PageSize, + LimitsMax = PageSize, TvSearchParams = new List { TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep @@ -98,9 +105,9 @@ public class AlphaRatioRequestGenerator : GazelleRequestGenerator _settings = settings; } - protected override NameValueCollection GetBasicSearchParameters(string term, int[] categories) + protected override NameValueCollection GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string term) { - var parameters = base.GetBasicSearchParameters(term, categories); + var parameters = base.GetBasicSearchParameters(searchCriteria, term); if (_settings.FreeleechOnly) { @@ -112,6 +119,12 @@ public class AlphaRatioRequestGenerator : GazelleRequestGenerator parameters.Set("scene", "0"); } + if (searchCriteria.Limit is > 0 && searchCriteria.Offset is > 0) + { + var page = (int)(searchCriteria.Offset / searchCriteria.Limit) + 1; + parameters.Set("page", page.ToString()); + } + return parameters; } } diff --git a/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleRequestGenerator.cs b/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleRequestGenerator.cs index b21ae489e..bc850554f 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleRequestGenerator.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Gazelle/GazelleRequestGenerator.cs @@ -46,7 +46,7 @@ public class GazelleRequestGenerator : IIndexerRequestGenerator { var pageableRequests = new IndexerPageableRequestChain(); - var parameters = GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories); + var parameters = GetBasicSearchParameters(searchCriteria, searchCriteria.SanitizedSearchTerm); if (searchCriteria.ImdbId != null) { @@ -62,7 +62,7 @@ public class GazelleRequestGenerator : IIndexerRequestGenerator { var pageableRequests = new IndexerPageableRequestChain(); - var parameters = GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories); + var parameters = GetBasicSearchParameters(searchCriteria, searchCriteria.SanitizedSearchTerm); if (searchCriteria.Artist.IsNotNullOrWhiteSpace() && searchCriteria.Artist != "VA") { @@ -88,7 +88,7 @@ public class GazelleRequestGenerator : IIndexerRequestGenerator { var pageableRequests = new IndexerPageableRequestChain(); - var parameters = GetBasicSearchParameters(searchCriteria.SanitizedTvSearchString, searchCriteria.Categories); + var parameters = GetBasicSearchParameters(searchCriteria, searchCriteria.SanitizedTvSearchString); if (searchCriteria.ImdbId != null) { @@ -104,7 +104,7 @@ public class GazelleRequestGenerator : IIndexerRequestGenerator { var pageableRequests = new IndexerPageableRequestChain(); - var parameters = GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories); + var parameters = GetBasicSearchParameters(searchCriteria, searchCriteria.SanitizedSearchTerm); pageableRequests.Add(GetRequest(parameters)); return pageableRequests; @@ -114,7 +114,7 @@ public class GazelleRequestGenerator : IIndexerRequestGenerator { var pageableRequests = new IndexerPageableRequestChain(); - var parameters = GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories); + var parameters = GetBasicSearchParameters(searchCriteria, searchCriteria.SanitizedSearchTerm); pageableRequests.Add(GetRequest(parameters)); return pageableRequests; @@ -123,7 +123,7 @@ public class GazelleRequestGenerator : IIndexerRequestGenerator // hook to adjust the search term protected virtual string GetSearchTerm(string term) => term; - protected virtual NameValueCollection GetBasicSearchParameters(string term, int[] categories) + protected virtual NameValueCollection GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string term) { var parameters = new NameValueCollection { @@ -139,9 +139,10 @@ public class GazelleRequestGenerator : IIndexerRequestGenerator parameters.Set("searchstr", searchTerm.Replace(".", " ")); } - if (categories != null) + if (searchCriteria.Categories != null && searchCriteria.Categories.Any()) { - var queryCats = Capabilities.Categories.MapTorznabCapsToTrackers(categories); + var queryCats = Capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories); + if (queryCats.Any()) { queryCats.ForEach(cat => parameters.Set($"filter_cat[{cat}]", "1")); diff --git a/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs b/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs index f00ca9748..931b2623e 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/GreatPosterWall.cs @@ -89,7 +89,7 @@ public class GreatPosterWallRequestGenerator : GazelleRequestGenerator public override IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria) { - var parameters = GetBasicSearchParameters(searchCriteria.SearchTerm, searchCriteria.Categories); + var parameters = GetBasicSearchParameters(searchCriteria, searchCriteria.SearchTerm); if (searchCriteria.ImdbId != null) { @@ -101,9 +101,9 @@ public class GreatPosterWallRequestGenerator : GazelleRequestGenerator return pageableRequests; } - protected override NameValueCollection GetBasicSearchParameters(string term, int[] categories) + protected override NameValueCollection GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string term) { - var parameters = base.GetBasicSearchParameters(term, categories); + var parameters = base.GetBasicSearchParameters(searchCriteria, term); if (_settings.FreeleechOnly) {