diff --git a/homeassistant/components/spotify/media_player.py b/homeassistant/components/spotify/media_player.py index 7beea59a7bd..0782cb2f390 100644 --- a/homeassistant/components/spotify/media_player.py +++ b/homeassistant/components/spotify/media_player.py @@ -105,24 +105,57 @@ LIBRARY_MAP = { } CONTENT_TYPE_MEDIA_CLASS = { - "current_user_playlists": MEDIA_CLASS_DIRECTORY, - "current_user_followed_artists": MEDIA_CLASS_DIRECTORY, - "current_user_saved_albums": MEDIA_CLASS_DIRECTORY, - "current_user_saved_tracks": MEDIA_CLASS_DIRECTORY, - "current_user_saved_shows": MEDIA_CLASS_DIRECTORY, - "current_user_recently_played": MEDIA_CLASS_DIRECTORY, - "current_user_top_artists": MEDIA_CLASS_DIRECTORY, - "current_user_top_tracks": MEDIA_CLASS_DIRECTORY, - "featured_playlists": MEDIA_CLASS_DIRECTORY, - "categories": MEDIA_CLASS_DIRECTORY, - "category_playlists": MEDIA_CLASS_DIRECTORY, - "new_releases": MEDIA_CLASS_DIRECTORY, - MEDIA_TYPE_PLAYLIST: MEDIA_CLASS_PLAYLIST, - MEDIA_TYPE_ALBUM: MEDIA_CLASS_ALBUM, - MEDIA_TYPE_ARTIST: MEDIA_CLASS_ARTIST, - MEDIA_TYPE_EPISODE: MEDIA_CLASS_EPISODE, - MEDIA_TYPE_SHOW: MEDIA_CLASS_PODCAST, - MEDIA_TYPE_TRACK: MEDIA_CLASS_TRACK, + "current_user_playlists": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_PLAYLIST, + }, + "current_user_followed_artists": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_ARTIST, + }, + "current_user_saved_albums": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_ALBUM, + }, + "current_user_saved_tracks": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_TRACK, + }, + "current_user_saved_shows": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_PODCAST, + }, + "current_user_recently_played": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_TRACK, + }, + "current_user_top_artists": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_ARTIST, + }, + "current_user_top_tracks": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_TRACK, + }, + "featured_playlists": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_PLAYLIST, + }, + "categories": {"parent": MEDIA_CLASS_DIRECTORY, "children": MEDIA_CLASS_GENRE}, + "category_playlists": { + "parent": MEDIA_CLASS_DIRECTORY, + "children": MEDIA_CLASS_PLAYLIST, + }, + "new_releases": {"parent": MEDIA_CLASS_DIRECTORY, "children": MEDIA_CLASS_ALBUM}, + MEDIA_TYPE_PLAYLIST: { + "parent": MEDIA_CLASS_PLAYLIST, + "children": MEDIA_CLASS_TRACK, + }, + MEDIA_TYPE_ALBUM: {"parent": MEDIA_CLASS_ALBUM, "children": MEDIA_CLASS_TRACK}, + MEDIA_TYPE_ARTIST: {"parent": MEDIA_CLASS_ARTIST, "children": MEDIA_CLASS_ALBUM}, + MEDIA_TYPE_EPISODE: {"parent": MEDIA_CLASS_EPISODE, "children": None}, + MEDIA_TYPE_SHOW: {"parent": MEDIA_CLASS_PODCAST, "children": MEDIA_CLASS_EPISODE}, + MEDIA_TYPE_TRACK: {"parent": MEDIA_CLASS_TRACK, "children": None}, } @@ -543,7 +576,8 @@ def build_item_response(spotify, user, payload): if media_content_type == "categories": media_item = BrowseMedia( title=LIBRARY_MAP.get(media_content_id), - media_class=media_class, + media_class=media_class["parent"], + children_media_class=media_class["children"], media_content_id=media_content_id, media_content_type=media_content_type, can_play=False, @@ -560,6 +594,7 @@ def build_item_response(spotify, user, payload): BrowseMedia( title=item.get("name"), media_class=MEDIA_CLASS_PLAYLIST, + children_media_class=MEDIA_CLASS_TRACK, media_content_id=item_id, media_content_type="category_playlists", thumbnail=fetch_image_url(item, key="icons"), @@ -567,7 +602,6 @@ def build_item_response(spotify, user, payload): can_expand=True, ) ) - media_item.children_media_class = MEDIA_CLASS_GENRE return media_item if title is None: @@ -578,7 +612,8 @@ def build_item_response(spotify, user, payload): params = { "title": title, - "media_class": media_class, + "media_class": media_class["parent"], + "children_media_class": media_class["children"], "media_content_id": media_content_id, "media_content_type": media_content_type, "can_play": media_content_type in PLAYABLE_MEDIA_TYPES, @@ -625,7 +660,8 @@ def item_payload(item): payload = { "title": item.get("name"), - "media_class": media_class, + "media_class": media_class["parent"], + "children_media_class": media_class["children"], "media_content_id": media_id, "media_content_type": media_type, "can_play": media_type in PLAYABLE_MEDIA_TYPES,