From d40d5315bf08e77dd763a12d3dbd2f50e8e0ea19 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 21 Aug 2024 20:11:28 +0200 Subject: [PATCH] some small tweaks --- .../server/controllers/media/playlists.py | 2 +- .../server/controllers/player_queues.py | 5 ++++- .../server/providers/soundcloud/__init__.py | 15 +++++++-------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/music_assistant/server/controllers/media/playlists.py b/music_assistant/server/controllers/media/playlists.py index b8446973..5acb121d 100644 --- a/music_assistant/server/controllers/media/playlists.py +++ b/music_assistant/server/controllers/media/playlists.py @@ -235,7 +235,7 @@ class PlaylistController(MediaControllerBase[Playlist]): break else: self.logger.warning( - "Can't add %s to playlist %s - it is not available provider %s", + "Can't add %s to playlist %s - it is not available on provider %s", full_track.name, playlist.name, playlist_prov.name, diff --git a/music_assistant/server/controllers/player_queues.py b/music_assistant/server/controllers/player_queues.py index 849ca12b..dcca2b3f 100644 --- a/music_assistant/server/controllers/player_queues.py +++ b/music_assistant/server/controllers/player_queues.py @@ -313,6 +313,7 @@ class PlayerQueuesController(CoreController): 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 @@ -338,7 +339,6 @@ class PlayerQueuesController(CoreController): 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 ): @@ -415,6 +415,9 @@ class PlayerQueuesController(CoreController): 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 diff --git a/music_assistant/server/providers/soundcloud/__init__.py b/music_assistant/server/providers/soundcloud/__init__.py index b730fbe2..3b6bae56 100644 --- a/music_assistant/server/providers/soundcloud/__init__.py +++ b/music_assistant/server/providers/soundcloud/__init__.py @@ -148,15 +148,14 @@ class SoundcloudMusicProvider(MusicProvider): 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 -- 2.34.1