AlbumTrack,
MediaItemType,
PagedItems,
+ Playlist,
+ PlaylistTrack,
media_from_dict,
)
from music_assistant.common.models.player import PlayerMedia
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
)
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