From 97d9cd3985fa02fd19f8f6c7bb457dc104ce04bc Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 21 Aug 2024 10:18:01 +0200 Subject: [PATCH] a few tweaks to builtin playlists --- .../server/providers/builtin/__init__.py | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/music_assistant/server/providers/builtin/__init__.py b/music_assistant/server/providers/builtin/__init__.py index 31dfc25e..1b6dca44 100644 --- a/music_assistant/server/providers/builtin/__init__.py +++ b/music_assistant/server/providers/builtin/__init__.py @@ -549,28 +549,38 @@ class BuiltinProvider(MusicProvider): return result async def _get_builtin_playlist_random_album(self) -> list[Track]: - result: list[Track] = [] - for random_album in await self.mass.music.albums.library_items(limit=1, order_by="random"): - tracks = await self.mass.music.albums.tracks( - random_album.item_id, random_album.provider - ) - for idx, track in enumerate(tracks, 1): - track.position = idx - result.append(track) - return result + for in_library_only in (True, False): + for min_tracks_required in (10, 5, 1): + for random_album in await self.mass.music.albums.library_items( + limit=25, order_by="random" + ): + tracks = await self.mass.music.albums.tracks( + random_album.item_id, random_album.provider, in_library_only=in_library_only + ) + if len(tracks) < min_tracks_required: + continue + for idx, track in enumerate(tracks, 1): + track.position = idx + return tracks + return [] async def _get_builtin_playlist_random_artist(self) -> list[Track]: - result: list[Track] = [] - for random_artist in await self.mass.music.artists.library_items( - limit=1, order_by="random" - ): - tracks = await self.mass.music.artists.tracks( - random_artist.item_id, random_artist.provider - ) - for idx, track in enumerate(tracks, 1): - track.position = idx - result.append(track) - return result + for in_library_only in (True, False): + for min_tracks_required in (25, 10, 5, 1): + for random_artist in await self.mass.music.artists.library_items( + limit=25, order_by="random" + ): + tracks = await self.mass.music.artists.tracks( + random_artist.item_id, + random_artist.provider, + in_library_only=in_library_only, + ) + if len(tracks) < min_tracks_required: + continue + for idx, track in enumerate(tracks, 1): + track.position = idx + return tracks + return [] async def _get_builtin_playlist_recently_played(self) -> list[Track]: result: list[Track] = [] -- 2.34.1