tracks: list[MediaItemType] = []
radio_source: list[MediaItemType] = []
+ first_track_seen: bool = False
for item in media:
try:
# parse provided uri into a MA MediaItem or Basic QueueItem from URL
if radio_mode:
radio_source.append(media_item)
elif media_item.media_type == MediaType.PLAYLIST:
- first_track_seen: bool = False
async for playlist_track in self.mass.music.playlists.tracks(
media_item.item_id, media_item.provider
):
queue_items = [QueueItem.from_media_item(queue_id, x) for x in tracks if x and x.available]
if not queue_items:
+ if first_track_seen:
+ # edge case: playlist with only one track
+ return
raise MediaNotFoundError("No playable items found")
# load the items into the queue
for item in searchresult["collection"]:
media_type = item["kind"]
- if media_type == "user":
- if MediaType.ARTIST in media_types:
- result.artists.append(await self._parse_artist(item))
- elif media_type == "track":
- if MediaType.TRACK in media_types:
+ if media_type == "user" and MediaType.ARTIST in media_types:
+ result.artists.append(await self._parse_artist(item))
+ elif media_type == "track" and MediaType.TRACK in media_types:
+ if item.get("duration") == item.get("full_duration"):
+ # skip if it's a preview track (e.g. in case of free accounts)
result.tracks.append(await self._parse_track(item))
- elif media_type == "playlist":
- if MediaType.PLAYLIST in media_types:
- result.playlists.append(await self._parse_playlist(item))
+ elif media_type == "playlist" and MediaType.PLAYLIST in media_types:
+ result.playlists.append(await self._parse_playlist(item))
return result