diff --git a/homeassistant/components/kodi/browse_media.py b/homeassistant/components/kodi/browse_media.py index c174cf28406..0c4522b5fbd 100644 --- a/homeassistant/components/kodi/browse_media.py +++ b/homeassistant/components/kodi/browse_media.py @@ -67,95 +67,101 @@ async def build_item_response(media_library, payload): title = None media = None - query = {"properties": ["thumbnail"]} - # pylint: disable=protected-access + properties = ["thumbnail"] if search_type == MEDIA_TYPE_ALBUM: if search_id: - query.update({"filter": {"albumid": int(search_id)}}) - query["properties"].extend( - ["albumid", "artist", "duration", "album", "track"] - ) - album = await media_library._server.AudioLibrary.GetAlbumDetails( - {"albumid": int(search_id), "properties": ["thumbnail"]} + album = await media_library.get_album_details( + album_id=int(search_id), properties=properties ) thumbnail = media_library.thumbnail_url( album["albumdetails"].get("thumbnail") ) title = album["albumdetails"]["label"] - media = await media_library._server.AudioLibrary.GetSongs(query) + media = await media_library.get_songs( + album_id=int(search_id), + properties=[ + "albumid", + "artist", + "duration", + "album", + "thumbnail", + "track", + ], + ) media = media.get("songs") else: - media = await media_library._server.AudioLibrary.GetAlbums(query) + media = await media_library.get_albums(properties=properties) media = media.get("albums") title = "Albums" + elif search_type == MEDIA_TYPE_ARTIST: if search_id: - query.update({"filter": {"artistid": int(search_id)}}) - media = await media_library._server.AudioLibrary.GetAlbums(query) + media = await media_library.get_albums( + artist_id=int(search_id), properties=properties + ) media = media.get("albums") - artist = await media_library._server.AudioLibrary.GetArtistDetails( - {"artistid": int(search_id), "properties": ["thumbnail"]} + artist = await media_library.get_artist_details( + artist_id=int(search_id), properties=properties ) thumbnail = media_library.thumbnail_url( artist["artistdetails"].get("thumbnail") ) title = artist["artistdetails"]["label"] else: - media = await media_library._server.AudioLibrary.GetArtists(query) + media = await media_library.get_artists(properties) media = media.get("artists") title = "Artists" + elif search_type == "library_music": library = {MEDIA_TYPE_ALBUM: "Albums", MEDIA_TYPE_ARTIST: "Artists"} media = [{"label": name, "type": type_} for type_, name in library.items()] title = "Music Library" + elif search_type == MEDIA_TYPE_MOVIE: - media = await media_library._server.VideoLibrary.GetMovies(query) + media = await media_library.get_movies(properties) media = media.get("movies") title = "Movies" + elif search_type == MEDIA_TYPE_TVSHOW: if search_id: - media = await media_library._server.VideoLibrary.GetSeasons( - { - "tvshowid": int(search_id), - "properties": ["thumbnail", "season", "tvshowid"], - } + media = await media_library.get_seasons( + tv_show_id=int(search_id), + properties=["thumbnail", "season", "tvshowid"], ) media = media.get("seasons") - tvshow = await media_library._server.VideoLibrary.GetTVShowDetails( - {"tvshowid": int(search_id), "properties": ["thumbnail"]} + tvshow = await media_library.get_tv_show_details( + tv_show_id=int(search_id), properties=properties ) thumbnail = media_library.thumbnail_url( tvshow["tvshowdetails"].get("thumbnail") ) title = tvshow["tvshowdetails"]["label"] else: - media = await media_library._server.VideoLibrary.GetTVShows(query) + media = await media_library.get_tv_shows(properties) media = media.get("tvshows") title = "TV Shows" + elif search_type == MEDIA_TYPE_SEASON: tv_show_id, season_id = search_id.split("/", 1) - media = await media_library._server.VideoLibrary.GetEpisodes( - { - "tvshowid": int(tv_show_id), - "season": int(season_id), - "properties": ["thumbnail", "tvshowid", "seasonid"], - } + media = await media_library.get_episodes( + tv_show_id=int(tv_show_id), + season_id=int(season_id), + properties=["thumbnail", "tvshowid", "seasonid"], ) media = media.get("episodes") if media: - season = await media_library._server.VideoLibrary.GetSeasonDetails( - {"seasonid": int(media[0]["seasonid"]), "properties": ["thumbnail"]} + season = await media_library.get_season_details( + season_id=int(media[0]["seasonid"]), properties=properties ) thumbnail = media_library.thumbnail_url( season["seasondetails"].get("thumbnail") ) title = season["seasondetails"]["label"] + elif search_type == MEDIA_TYPE_CHANNEL: - media = await media_library._server.PVR.GetChannels( - { - "channelgroupid": "alltv", - "properties": ["thumbnail", "channeltype", "channel", "broadcastnow"], - } + media = await media_library.get_channels( + channel_group_id="alltv", + properties=["thumbnail", "channeltype", "channel", "broadcastnow"], ) media = media.get("channels") title = "Channels" diff --git a/homeassistant/components/kodi/manifest.json b/homeassistant/components/kodi/manifest.json index a9df9718f8c..24d3393d7c3 100644 --- a/homeassistant/components/kodi/manifest.json +++ b/homeassistant/components/kodi/manifest.json @@ -2,11 +2,15 @@ "domain": "kodi", "name": "Kodi", "documentation": "https://www.home-assistant.io/integrations/kodi", - "requirements": ["pykodi==0.2.0"], + "requirements": [ + "pykodi==0.2.1" + ], "codeowners": [ "@OnFreund", "@cgtobi" ], - "zeroconf": ["_xbmc-jsonrpc-h._tcp.local."], + "zeroconf": [ + "_xbmc-jsonrpc-h._tcp.local." + ], "config_flow": true -} +} \ No newline at end of file diff --git a/homeassistant/components/kodi/media_player.py b/homeassistant/components/kodi/media_player.py index a1b9987b5c9..1f4c23cb39f 100644 --- a/homeassistant/components/kodi/media_player.py +++ b/homeassistant/components/kodi/media_player.py @@ -677,17 +677,10 @@ class KodiEntity(MediaPlayerEntity): elif media_type_lower in [ MEDIA_TYPE_ARTIST, MEDIA_TYPE_ALBUM, + MEDIA_TYPE_TRACK, ]: await self.async_clear_playlist() - params = {"playlistid": 0, "item": {f"{media_type}id": int(media_id)}} - # pylint: disable=protected-access - await self._kodi._server.Playlist.Add(params) - await self._kodi.play_playlist(0) - elif media_type_lower == MEDIA_TYPE_TRACK: - await self._kodi.clear_playlist() - params = {"playlistid": 0, "item": {"songid": int(media_id)}} - # pylint: disable=protected-access - await self._kodi._server.Playlist.Add(params) + await self.async_add_to_playlist(media_type_lower, media_id) await self._kodi.play_playlist(0) elif media_type_lower in [ MEDIA_TYPE_MOVIE, @@ -695,8 +688,7 @@ class KodiEntity(MediaPlayerEntity): MEDIA_TYPE_SEASON, MEDIA_TYPE_TVSHOW, ]: - # pylint: disable=protected-access - await self._kodi._play_item( + await self._kodi.play_item( {MAP_KODI_MEDIA_TYPES[media_type_lower]: int(media_id)} ) else: @@ -751,6 +743,15 @@ class KodiEntity(MediaPlayerEntity): """Clear default playlist (i.e. playlistid=0).""" await self._kodi.clear_playlist() + async def async_add_to_playlist(self, media_type, media_id): + """Add media item to default playlist (i.e. playlistid=0).""" + if media_type == MEDIA_TYPE_ARTIST: + await self._kodi.add_artist_to_playlist(int(media_id)) + elif media_type == MEDIA_TYPE_ALBUM: + await self._kodi.add_album_to_playlist(int(media_id)) + elif media_type == MEDIA_TYPE_TRACK: + await self._kodi.add_song_to_playlist(int(media_id)) + async def async_add_media_to_playlist( self, media_type, media_id=None, media_name="ALL", artist_name="" ): diff --git a/requirements_all.txt b/requirements_all.txt index c9ff2934c98..49db994a320 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1446,7 +1446,7 @@ pyitachip2ir==0.0.7 pykira==0.1.1 # homeassistant.components.kodi -pykodi==0.2.0 +pykodi==0.2.1 # homeassistant.components.kwb pykwb==0.0.8 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 1b5f229a138..f5c688e7b01 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -704,7 +704,7 @@ pyisy==2.0.2 pykira==0.1.1 # homeassistant.components.kodi -pykodi==0.2.0 +pykodi==0.2.1 # homeassistant.components.lastfm pylast==3.3.0