diff --git a/src/NzbDrone.Core/ImportLists/Plex/PlexImport.cs b/src/NzbDrone.Core/ImportLists/Plex/PlexImport.cs index 8bf7adbb9..ceca81b45 100644 --- a/src/NzbDrone.Core/ImportLists/Plex/PlexImport.cs +++ b/src/NzbDrone.Core/ImportLists/Plex/PlexImport.cs @@ -28,6 +28,7 @@ public PlexImport(IPlexTvService plexTvService, } public override string Name => "Plex Watchlist"; + public override int PageSize => 50; public override bool Enabled => true; public override bool EnableAuto => false; @@ -46,7 +47,7 @@ public override IParseImportListResponse GetParser() public override IImportListRequestGenerator GetRequestGenerator() { - return new PlexListRequestGenerator(_plexTvService) + return new PlexListRequestGenerator(_plexTvService, PageSize) { Settings = Settings }; diff --git a/src/NzbDrone.Core/ImportLists/Plex/PlexListRequestGenerator.cs b/src/NzbDrone.Core/ImportLists/Plex/PlexListRequestGenerator.cs index 22b90cdda..f8ef08439 100644 --- a/src/NzbDrone.Core/ImportLists/Plex/PlexListRequestGenerator.cs +++ b/src/NzbDrone.Core/ImportLists/Plex/PlexListRequestGenerator.cs @@ -6,11 +6,13 @@ namespace NzbDrone.Core.ImportLists.Plex public class PlexListRequestGenerator : IImportListRequestGenerator { private readonly IPlexTvService _plexTvService; + private readonly int _pageSize; public PlexListSettings Settings { get; set; } - public PlexListRequestGenerator(IPlexTvService plexTvService) + public PlexListRequestGenerator(IPlexTvService plexTvService, int pageSize) { _plexTvService = plexTvService; + _pageSize = pageSize; } public virtual ImportListPageableRequestChain GetMovies() @@ -24,9 +26,12 @@ public virtual ImportListPageableRequestChain GetMovies() private IEnumerable GetMoviesRequest() { - var request = new ImportListRequest(_plexTvService.GetWatchlist(Settings.AccessToken)); + var maxPages = 10; - yield return request; + for (var page = 0; page < maxPages; page++) + { + yield return new ImportListRequest(_plexTvService.GetWatchlist(Settings.AccessToken, _pageSize, page * _pageSize)); + } } } } diff --git a/src/NzbDrone.Core/Notifications/Plex/PlexTv/PlexTvService.cs b/src/NzbDrone.Core/Notifications/Plex/PlexTv/PlexTvService.cs index 8aa324b7e..2dc46f09a 100644 --- a/src/NzbDrone.Core/Notifications/Plex/PlexTv/PlexTvService.cs +++ b/src/NzbDrone.Core/Notifications/Plex/PlexTv/PlexTvService.cs @@ -15,7 +15,7 @@ public interface IPlexTvService PlexTvSignInUrlResponse GetSignInUrl(string callbackUrl, int pinId, string pinCode); string GetAuthToken(int pinId); void Ping(string authToken); - HttpRequest GetWatchlist(string authToken); + HttpRequest GetWatchlist(string authToken, int pageSize, int pageOffset); } public class PlexTvService : IPlexTvService @@ -94,7 +94,7 @@ public void Ping(string authToken) _cache.Get(authToken, () => _proxy.Ping(_configService.PlexClientIdentifier, authToken), TimeSpan.FromHours(24)); } - public HttpRequest GetWatchlist(string authToken) + public HttpRequest GetWatchlist(string authToken, int pageSize, int pageOffset) { Ping(authToken); @@ -110,7 +110,9 @@ public HttpRequest GetWatchlist(string authToken) .AddQueryParam("includeFields", "title,type,year,ratingKey") .AddQueryParam("includeElements", "Guid") .AddQueryParam("sort", "watchlistedAt:desc") - .AddQueryParam("type", (int)PlexMediaType.Movie); + .AddQueryParam("type", (int)PlexMediaType.Movie) + .AddQueryParam("X-Plex-Container-Size", pageSize) + .AddQueryParam("X-Plex-Container-Start", pageOffset); if (!string.IsNullOrWhiteSpace(authToken)) {