From abf4f50515fac7ae95941b703aeb559e549b3024 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 4 Mar 2022 06:47:06 -0800 Subject: [PATCH] Add media browser support to forked_daapd (#67564) --- .../components/forked_daapd/const.py | 2 ++ .../components/forked_daapd/media_player.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/homeassistant/components/forked_daapd/const.py b/homeassistant/components/forked_daapd/const.py index 29da9f7244e..482218630a7 100644 --- a/homeassistant/components/forked_daapd/const.py +++ b/homeassistant/components/forked_daapd/const.py @@ -1,5 +1,6 @@ """Const for forked-daapd.""" from homeassistant.components.media_player.const import ( + SUPPORT_BROWSE_MEDIA, SUPPORT_CLEAR_PLAYLIST, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, @@ -78,6 +79,7 @@ SUPPORTED_FEATURES = ( | SUPPORT_TURN_ON | SUPPORT_TURN_OFF | SUPPORT_PLAY_MEDIA + | SUPPORT_BROWSE_MEDIA ) SUPPORTED_FEATURES_ZONE = ( SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | SUPPORT_TURN_ON | SUPPORT_TURN_OFF diff --git a/homeassistant/components/forked_daapd/media_player.py b/homeassistant/components/forked_daapd/media_player.py index a68f56e2965..f2c64fa81da 100644 --- a/homeassistant/components/forked_daapd/media_player.py +++ b/homeassistant/components/forked_daapd/media_player.py @@ -6,7 +6,11 @@ import logging from pyforked_daapd import ForkedDaapdAPI from pylibrespot_java import LibrespotJavaAPI +from homeassistant.components import media_source from homeassistant.components.media_player import MediaPlayerEntity +from homeassistant.components.media_player.browse_media import ( + async_process_play_media_url, +) from homeassistant.components.media_player.const import MEDIA_TYPE_MUSIC from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -660,7 +664,14 @@ class ForkedDaapdMaster(MediaPlayerEntity): async def async_play_media(self, media_type, media_id, **kwargs): """Play a URI.""" + if media_source.is_media_source_id(media_id): + media_type = MEDIA_TYPE_MUSIC + play_item = await media_source.async_resolve_media(self.hass, media_id) + media_id = play_item.url + if media_type == MEDIA_TYPE_MUSIC: + media_id = async_process_play_media_url(self.hass, media_id) + saved_state = self.state # save play state saved_mute = self.is_volume_muted sleep_future = asyncio.create_task( @@ -875,3 +886,11 @@ class ForkedDaapdUpdater: self._api, outputs_to_add, ) + + async def async_browse_media(self, media_content_type=None, media_content_id=None): + """Implement the websocket media browsing helper.""" + return await media_source.async_browse_media( + self.hass, + media_content_id, + content_filter=lambda item: item.media_content_type.startswith("audio/"), + )