From: Marcel van der Veldt Date: Tue, 7 May 2024 20:33:48 +0000 (+0200) Subject: fix playlist playback X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=1fe73d21e5dd2d5e3068b53c4bb0d35b1e328346;p=music-assistant-server.git fix playlist playback --- diff --git a/music_assistant/server/controllers/player_queues.py b/music_assistant/server/controllers/player_queues.py index 8258ac39..d646b539 100644 --- a/music_assistant/server/controllers/player_queues.py +++ b/music_assistant/server/controllers/player_queues.py @@ -33,6 +33,8 @@ from music_assistant.common.models.media_items import ( AlbumTrack, MediaItemType, PagedItems, + Playlist, + PlaylistTrack, media_from_dict, ) from music_assistant.common.models.player import PlayerMedia @@ -338,15 +340,10 @@ class PlayerQueuesController(CoreController): self.clear(queue_id) # collect tracks to play - ctrl = self.mass.music.get_controller(media_item.media_type) if radio_mode: radio_source.append(media_item) elif media_item.media_type == MediaType.PLAYLIST: - async for playlist_track in ctrl.tracks( - media_item.item_id, media_item.provider - ): - tracks.append(playlist_track) - await asyncio.sleep(0) # yield to eventloop + tracks += await self.get_playlist_tracks(media_item) await self.mass.music.mark_item_played( media_item.media_type, media_item.item_id, media_item.provider ) @@ -1219,6 +1216,24 @@ class PlayerQueuesController(CoreController): in_library_only=album_items_conf == "library_tracks", ) + async def get_playlist_tracks(self, playlist: Playlist) -> list[PlaylistTrack]: + """Return all tracks for given playlist.""" + result: list[PlaylistTrack] = [] + offset = 0 + limit = 50 + while True: + paged_items = await self.mass.music.playlists.tracks( + item_id=playlist.item_id, + provider_instance_id_or_domain=playlist.provider, + offset=offset, + limit=limit, + ) + result += paged_items.items + if paged_items.count < limit: + break + offset += paged_items.count + return result + def __get_queue_stream_index(self, queue: PlayerQueue, player: Player) -> tuple[int, int]: """Calculate current queue index and current track elapsed time.""" # player is playing a constant stream so we need to do this the hard way