some small tweaks
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 21 Aug 2024 18:11:28 +0000 (20:11 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 21 Aug 2024 18:11:28 +0000 (20:11 +0200)
music_assistant/server/controllers/media/playlists.py
music_assistant/server/controllers/player_queues.py
music_assistant/server/providers/soundcloud/__init__.py

index b84469731bd86bc7122c5bd18ff8747b19200fd1..5acb121d42fbba5d952a92ed4faed9e3aff4e3f6 100644 (file)
@@ -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,
index 849ca12bf0ea8572c8ff890015f1538a1a415965..dcca2b3fc429e32ecbb5ae8f06e1d97cc153f0c3 100644 (file)
@@ -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
index b730fbe2f07984cbee36b3fc7cf606273bbde600..3b6bae5684b1706393c161481b011fb55906a187 100644 (file)
@@ -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