Fix Jellyfin playlist track fetch truncating at default API limit

get_playlist_tracks() had no Limit or StartIndex params, so Jellyfin
defaulted to ~100 items per response. This caused the Server Playlists
comparison to show most tracks as missing even though they were present.

Now paginates in batches of 1000 until a partial batch signals the last page.
This commit is contained in:
Broque Thomas 2026-04-13 15:17:52 -07:00
parent 20c8bff85c
commit 5bb36412be

View file

@ -1472,23 +1472,34 @@ class JellyfinClient:
return [] return []
try: try:
tracks = []
start_index = 0
limit = 1000
while True:
params = { params = {
'ParentId': playlist_id, 'ParentId': playlist_id,
'IncludeItemTypes': 'Audio', 'IncludeItemTypes': 'Audio',
'Recursive': True, 'Recursive': True,
'Fields': 'AlbumId,ArtistItems,Path,MediaSources', 'Fields': 'AlbumId,ArtistItems,Path,MediaSources',
'SortBy': 'SortName', 'SortBy': 'SortName',
'SortOrder': 'Ascending' 'SortOrder': 'Ascending',
'StartIndex': start_index,
'Limit': limit,
} }
response = self._make_request(f'/Users/{self.user_id}/Items', params) response = self._make_request(f'/Users/{self.user_id}/Items', params)
if not response: if not response:
return [] break
tracks = [] batch = response.get('Items', [])
for item in response.get('Items', []): for item in batch:
tracks.append(JellyfinTrack(item, self)) tracks.append(JellyfinTrack(item, self))
if len(batch) < limit:
break # Last page
start_index += limit
logger.debug(f"Retrieved {len(tracks)} tracks from playlist {playlist_id}") logger.debug(f"Retrieved {len(tracks)} tracks from playlist {playlist_id}")
return tracks return tracks