From: John Carr Date: Tue, 18 Jun 2024 09:26:08 +0000 (+0100) Subject: Jellyfin: Add pagination for get_library_albums and get_library_artists X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=d54c71228998e99fde1ed0f2d516859a484b7070;p=music-assistant-server.git Jellyfin: Add pagination for get_library_albums and get_library_artists --- diff --git a/music_assistant/server/providers/jellyfin/__init__.py b/music_assistant/server/providers/jellyfin/__init__.py index 1407855c..64cc0ba6 100644 --- a/music_assistant/server/providers/jellyfin/__init__.py +++ b/music_assistant/server/providers/jellyfin/__init__.py @@ -530,22 +530,61 @@ class JellyfinProvider(MusicProvider): """Retrieve all library artists from Jellyfin Music.""" jellyfin_libraries = await self._get_music_libraries() for jellyfin_library in jellyfin_libraries: + offset = 0 + limit = 100 + response = await self._client.artists( - jellyfin_library[ITEM_KEY_ID], enable_user_data=True, fields=ARTIST_FIELDS + jellyfin_library[ITEM_KEY_ID], + start_index=offset, + limit=limit, + enable_user_data=True, + fields=ARTIST_FIELDS, ) - artists_obj = response["Items"] - for artist in artists_obj: + for artist in response["Items"]: yield self._parse_artist(artist) + while offset < response["TotalRecordCount"]: + response = await self._client.artists( + jellyfin_library[ITEM_KEY_ID], + start_index=offset, + limit=limit, + enable_user_data=True, + fields=ARTIST_FIELDS, + ) + for artist in response["Items"]: + yield self._parse_artist(artist) + + offset += limit + async def get_library_albums(self) -> AsyncGenerator[Album, None]: """Retrieve all library albums from Jellyfin Music.""" jellyfin_libraries = await self._get_music_libraries() for jellyfin_library in jellyfin_libraries: - albums = await self._client.albums( - jellyfin_library[ITEM_KEY_ID], fields=ALBUM_FIELDS, enable_user_data=True + offset = 0 + limit = 100 + + response = await self._client.albums( + jellyfin_library[ITEM_KEY_ID], + start_index=offset, + limit=limit, + enable_user_data=True, + fields=ALBUM_FIELDS, ) - for album in albums["Items"]: - yield self._parse_album(album) + for artist in response["Items"]: + yield self._parse_album(artist) + + while offset < response["TotalRecordCount"]: + response = await self._client.albums( + jellyfin_library[ITEM_KEY_ID], + start_index=offset, + limit=limit, + enable_user_data=True, + fields=ALBUM_FIELDS, + ) + for artist in response["Items"]: + yield self._parse_album(artist) + + offset += limit async def get_library_tracks(self) -> AsyncGenerator[Track, None]: """Retrieve library tracks from Jellyfin Music.""" diff --git a/music_assistant/server/providers/jellyfin/manifest.json b/music_assistant/server/providers/jellyfin/manifest.json index 451259ac..fb865066 100644 --- a/music_assistant/server/providers/jellyfin/manifest.json +++ b/music_assistant/server/providers/jellyfin/manifest.json @@ -4,7 +4,7 @@ "name": "Jellyfin Media Server Library", "description": "Support for the Jellyfin streaming provider in Music Assistant.", "codeowners": ["@lokiberra", "@Jc2k"], - "requirements": ["aiojellyfin==0.2.0"], + "requirements": ["aiojellyfin==0.3.0"], "documentation": "https://music-assistant.io/music-providers/jellyfin/", "multi_instance": true } diff --git a/requirements_all.txt b/requirements_all.txt index 65237d0d..781454ef 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -4,7 +4,7 @@ Brotli>=1.0.9 aiodns>=3.0.0 aiofiles==23.2.1 aiohttp==3.9.5 -aiojellyfin==0.2.0 +aiojellyfin==0.3.0 aiorun==2024.5.1 aioslimproto==3.0.1 aiosqlite==0.20.0