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] = []