some small optimizations to the builtin playlists
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 15 Apr 2024 21:58:13 +0000 (23:58 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 15 Apr 2024 21:58:13 +0000 (23:58 +0200)
music_assistant/server/controllers/player_queues.py
music_assistant/server/providers/builtin/__init__.py

index facfb4a960c6cbae7ce3c5503e902bc9f3c5153f..327b6001d3a9758ed234c40f6287507792a435a9 100644 (file)
@@ -331,12 +331,12 @@ class PlayerQueuesController(CoreController):
                     media_item.media_type, media_item.item_id, media_item.provider
                 )
             elif media_item.media_type == MediaType.ARTIST:
-                tracks += await self._get_artist_tracks(media_item)
+                tracks += await self.get_artist_tracks(media_item)
                 await self.mass.music.mark_item_played(
                     media_item.media_type, media_item.item_id, media_item.provider
                 )
             elif media_item.media_type == MediaType.ALBUM:
-                tracks += await self._get_album_tracks(media_item)
+                tracks += await self.get_album_tracks(media_item)
                 await self.mass.music.mark_item_played(
                     media_item.media_type, media_item.item_id, media_item.provider
                 )
@@ -1121,7 +1121,7 @@ class PlayerQueuesController(CoreController):
                 break
         return tracks
 
-    async def _get_artist_tracks(self, artist: Artist) -> list[Track]:
+    async def get_artist_tracks(self, artist: Artist) -> list[Track]:
         """Return tracks for given artist, based on user preference."""
         artist_items_conf = self.mass.config.get_raw_core_config_value(
             self.domain,
@@ -1193,7 +1193,7 @@ class PlayerQueuesController(CoreController):
             return all_items
         return []
 
-    async def _get_album_tracks(self, album: Album) -> list[Track]:
+    async def get_album_tracks(self, album: Album) -> list[Track]:
         """Return tracks for given album, based on user preference."""
         album_items_conf = self.mass.config.get_raw_core_config_value(
             self.domain,
index d0ea2e7f40c7722394e1a57a0949ffd74545d09c..863440357a233393eaed0ec1e05cac60994c6937 100644 (file)
@@ -521,23 +521,19 @@ class BuiltinProvider(MusicProvider):
             async for random_album in self.mass.music.albums.iter_library_items(
                 order_by="RANDOM()"
             ):
-                for album_track in await self.mass.music.albums.tracks(
-                    random_album.item_id, random_album.provider
-                ):
+                # use the function specified in the queue controller as that
+                # already handles unwrapping an album by user preference
+                for album_track in await self.mass.player_queues.get_album_tracks(random_album):
                     count += 1
                     yield PlaylistTrack.from_dict({**album_track.to_dict(), "position": count})
-                if count > 0:
-                    return
-            return
+                return
         if builtin_playlist_id == RANDOM_ARTIST:
             async for random_artist in self.mass.music.artists.iter_library_items(
                 order_by="RANDOM()"
             ):
-                for artist_track in await self.mass.music.artists.tracks(
-                    random_artist.item_id, random_artist.provider
-                ):
+                # use the function specified in the queue controller as that
+                # already handles unwrapping an artist by user preference
+                for artist_track in await self.mass.player_queues.get_artist_tracks(random_artist):
                     count += 1
                     yield PlaylistTrack.from_dict({**artist_track.to_dict(), "position": count})
-                if count > 0:
-                    return
-            return
+                return