Implement pagination for plex provider (#2253)
authorFrancesco <66080458+chicco-carone@users.noreply.github.com>
Wed, 2 Jul 2025 10:04:40 +0000 (12:04 +0200)
committerGitHub <noreply@github.com>
Wed, 2 Jul 2025 10:04:40 +0000 (12:04 +0200)
music_assistant/providers/plex/__init__.py

index e997da59d39e59f1a1fcca3ff750e23542988f83..3af9d08d358679cb71b3110fef3707f5bef484f0 100644 (file)
@@ -827,9 +827,23 @@ class PlexProvider(MusicProvider):
 
     async def get_library_tracks(self) -> AsyncGenerator[Track, None]:
         """Retrieve library tracks from Plex Music."""
-        tracks_obj = await self._search_track(None, limit=99999)
-        for track in tracks_obj:
-            yield await self._parse_track(track)
+        page_size = 500
+        offset = 0
+        while True:
+            batch = cast(
+                "list[PlexTrack]",
+                await self._run_async(
+                    self._plex_library.searchTracks,
+                    title=None,
+                    limit=page_size,
+                    offset=offset,
+                ),
+            )
+            if not batch:
+                break
+            for plex_track in batch:
+                yield await self._parse_track(plex_track)
+            offset += page_size
 
     async def get_album(self, prov_album_id: str) -> Album:
         """Get full album details by id."""