From: Marcel van der Veldt Date: Tue, 25 Feb 2025 18:26:38 +0000 (+0100) Subject: Chore: unwrap uri's in add to playlist X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=f7386dd3cba7f8e259962574bfabff5bf0d30643;p=music-assistant-server.git Chore: unwrap uri's in add to playlist --- diff --git a/music_assistant/controllers/media/playlists.py b/music_assistant/controllers/media/playlists.py index fe2b0dc4..c0fa2640 100644 --- a/music_assistant/controllers/media/playlists.py +++ b/music_assistant/controllers/media/playlists.py @@ -116,10 +116,41 @@ class PlaylistController(MediaControllerBase[Playlist]): cur_playlist_track_uris.add(item.item_id) cur_playlist_track_uris.add(item.uri) + # unwrap all uri's to track uri's + unwrapped_uris: list[str] = [] + for uri in uris: + # URI could be a playlist or album uri, unwrap it + if not ("://" in uri and len(uri.split("/")) >= 4): + # NOT a music assistant-style uri (provider://media_type/item_id) + self.logger.warning( + "Not adding %s to playlist %s - not a valid uri", uri, playlist.name + ) + continue + # music assistant-style uri + # provider://media_type/item_id + provider_instance_id_or_domain, rest = uri.split("://", 1) + media_type_str, item_id = rest.split("/", 1) + media_type = MediaType(media_type_str) + if media_type == MediaType.ALBUM: + for track in await self.mass.music.albums.tracks( + item_id, provider_instance_id_or_domain + ): + unwrapped_uris.append(track.uri) + elif media_type == MediaType.PLAYLIST: + for track in await self.tracks(item_id, provider_instance_id_or_domain): + unwrapped_uris.append(track.uri) + elif media_type == MediaType.TRACK: + unwrapped_uris.append(uri) + else: + self.logger.warning( + "Not adding %s to playlist %s - not a track", uri, playlist.name + ) + continue + # work out the track id's that need to be added # filter out duplicates and items that not exist on the provider. ids_to_add: set[str] = set() - for uri in uris: + for uri in unwrapped_uris: # skip if item already in the playlist if uri in cur_playlist_track_uris: self.logger.info( @@ -141,14 +172,6 @@ class PlaylistController(MediaControllerBase[Playlist]): ) continue - # skip non-track items - # TODO: revisit this once we support audiobooks and podcasts ? - if media_type != MediaType.TRACK: - self.logger.warning( - "Not adding %s to playlist %s - not a track", uri, playlist.name - ) - continue - # special: the builtin provider can handle uri's from all providers (with uri as id) if provider_instance_id_or_domain != "library" and playlist_prov.domain == "builtin": # note: we try not to add library uri's to the builtin playlists