From 1ace9ab82e76985bbd158714d7685d74c389c788 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Tue, 18 Jul 2023 14:08:18 +0200 Subject: [PATCH] Make Spotify accept user playlist uris (#96820) * Make Spotify accept user platlist uris * Fix feedback * Fix feedback --- .../components/spotify/media_player.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/spotify/media_player.py b/homeassistant/components/spotify/media_player.py index de2cced08b5..3c2f9ef729c 100644 --- a/homeassistant/components/spotify/media_player.py +++ b/homeassistant/components/spotify/media_player.py @@ -398,13 +398,24 @@ class SpotifyMediaPlayer(MediaPlayerEntity): ) self._currently_playing = current or {} - context = self._currently_playing.get("context") + context = self._currently_playing.get("context", {}) + + # For some users in some cases, the uri is formed like + # "spotify:user:{name}:playlist:{id}" and spotipy wants + # the type to be playlist. + uri = context.get("uri") + if uri is not None: + parts = uri.split(":") + if len(parts) == 5 and parts[1] == "user" and parts[3] == "playlist": + uri = ":".join([parts[0], parts[3], parts[4]]) + if context is not None and ( - self._playlist is None or self._playlist["uri"] != context["uri"] + self._playlist is None or self._playlist["uri"] != uri ): self._playlist = None if context["type"] == MediaType.PLAYLIST: - self._playlist = self.data.client.playlist(current["context"]["uri"]) + self._playlist = self.data.client.playlist(uri) + device = self._currently_playing.get("device") if device is not None: self._restricted_device = device["is_restricted"]