From 110a338fb6e5c2581ccdc1b29669368613f08d5c Mon Sep 17 00:00:00 2001 From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com> Date: Sat, 16 Aug 2025 09:20:34 -0500 Subject: [PATCH] Fixed: TMDb List Paging (#11201) --- .../ImportLists/HttpImportListBase.cs | 25 +++++++++++++++++-- .../TMDb/List/TMDbListRequestGenerator.cs | 12 ++++++--- .../Popular/TMDbPopularRequestGenerator.cs | 3 ++- .../ImportLists/TMDb/TMDbImportBase.cs | 1 + .../TMDb/User/TMDbUserRequestGenerator.cs | 10 +++++++- 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/NzbDrone.Core/ImportLists/HttpImportListBase.cs b/src/NzbDrone.Core/ImportLists/HttpImportListBase.cs index 9c96a4dff1..8595889da1 100644 --- a/src/NzbDrone.Core/ImportLists/HttpImportListBase.cs +++ b/src/NzbDrone.Core/ImportLists/HttpImportListBase.cs @@ -30,6 +30,8 @@ public abstract class HttpImportListBase : ImportListBase public virtual int PageSize => 0; public virtual TimeSpan RateLimit => TimeSpan.FromSeconds(2); + protected virtual bool UsePreGeneratedPages => false; + public abstract IImportListRequestGenerator GetRequestGenerator(); public abstract IParseImportListResponse GetParser(); @@ -79,7 +81,7 @@ protected virtual ImportListFetchResult FetchMovies(Func GetMoviesRequest() { - Logger.Info("Importing TMDb movies from list: {0}", Settings.ListId); + Logger.Info("TMDb List {0}: Importing movies", Settings.ListId); var requestBuilder = RequestBuilder.Create() .SetSegment("api", "4") @@ -32,19 +32,25 @@ private IEnumerable GetMoviesRequest() .SetSegment("id", Settings.ListId) .SetSegment("secondaryRoute", ""); - Logger.Debug("Getting total pages that TMDb List: {0} consists of", Settings.ListId); + Logger.Trace("TMDb List {0}: Getting total pages", Settings.ListId); var jsonResponse = JsonConvert.DeserializeObject(HttpClient.Execute(requestBuilder.Build()).Content); MaxPages = jsonResponse.TotalPages; + if (jsonResponse.TotalPages > 1) + { + Logger.Debug("TMDb List {0}: processing {1} pages", Settings.ListId, MaxPages); + } + for (var pageNumber = 1; pageNumber <= MaxPages; pageNumber++) { requestBuilder.AddQueryParam("page", pageNumber, true); var request = requestBuilder.Build(); - Logger.Debug("Importing TMDb movies from: {0}", request.Url); + Logger.Debug("TMDb List {0}: Processing page {1} of {2}", Settings.ListId, pageNumber, MaxPages); + Logger.Trace("TMDb List {0}: Request URL: {1}", Settings.ListId, request.Url); yield return new ImportListRequest(request); } diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularRequestGenerator.cs b/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularRequestGenerator.cs index f36cc63752..df81348414 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularRequestGenerator.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularRequestGenerator.cs @@ -119,7 +119,8 @@ private IEnumerable GetMoviesRequests() var request = requestBuilder.Build(); - Logger.Debug("Importing TMDb movies from: {0}", request.Url); + Logger.Debug("TMDb Popular: Processing page {0} of {1}", pageNumber, MaxPages); + Logger.Trace("TMDb Popular: Request URL: {0}", request.Url); yield return new ImportListRequest(request); } diff --git a/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs b/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs index 48262edf93..0073b5d0a9 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs @@ -14,6 +14,7 @@ public abstract class TMDbImportListBase : HttpImportListBase ImportListType.TMDB; public override TimeSpan MinRefreshInterval => TimeSpan.FromHours(12); public override int PageSize => 20; + protected override bool UsePreGeneratedPages => true; public readonly ISearchForNewMovie _skyhookProxy; public readonly IHttpRequestBuilderFactory _requestBuilder; diff --git a/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserRequestGenerator.cs b/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserRequestGenerator.cs index b0ea10234b..9964112c0d 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserRequestGenerator.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserRequestGenerator.cs @@ -52,17 +52,25 @@ private IEnumerable GetMoviesRequests() requestBuilder.Method = HttpMethod.Get; + Logger.Trace("TMDb User {0}: Getting total pages", (TMDbUserListType)Settings.ListType); + var jsonResponse = JsonConvert.DeserializeObject(HttpClient.Execute(requestBuilder.Build()).Content); MaxPages = jsonResponse.TotalPages; + if (jsonResponse.TotalPages > 1) + { + Logger.Debug("TMDb User {0}: processing {1} pages", (TMDbUserListType)Settings.ListType, MaxPages); + } + for (var pageNumber = 1; pageNumber <= MaxPages; pageNumber++) { requestBuilder.AddQueryParam("page", pageNumber, true); var request = requestBuilder.Build(); - Logger.Debug("Importing TMDb movies from: {0}", request.Url); + Logger.Debug("TMDb User {0}: Processing page {1} of {2}", (TMDbUserListType)Settings.ListType, pageNumber, MaxPages); + Logger.Trace("TMDb User {0}: Request URL: {1}", (TMDbUserListType)Settings.ListType, request.Url); yield return new ImportListRequest(request); }