diff --git a/homeassistant/components/arcam_fmj/manifest.json b/homeassistant/components/arcam_fmj/manifest.json index fb66687611c..5f8b8bb69a2 100644 --- a/homeassistant/components/arcam_fmj/manifest.json +++ b/homeassistant/components/arcam_fmj/manifest.json @@ -3,7 +3,7 @@ "name": "Arcam FMJ Receivers", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/arcam_fmj", - "requirements": ["arcam-fmj==0.5.2"], + "requirements": ["arcam-fmj==0.5.3"], "ssdp": [ { "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", diff --git a/homeassistant/components/arcam_fmj/media_player.py b/homeassistant/components/arcam_fmj/media_player.py index 6b5b5856190..17607cd3f8c 100644 --- a/homeassistant/components/arcam_fmj/media_player.py +++ b/homeassistant/components/arcam_fmj/media_player.py @@ -8,6 +8,8 @@ from homeassistant import config_entries from homeassistant.components.media_player import MediaPlayerEntity from homeassistant.components.media_player.const import ( MEDIA_TYPE_MUSIC, + SUPPORT_BROWSE_MEDIA, + SUPPORT_PLAY_MEDIA, SUPPORT_SELECT_SOUND_MODE, SUPPORT_SELECT_SOURCE, SUPPORT_TURN_OFF, @@ -16,6 +18,7 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_SET, SUPPORT_VOLUME_STEP, ) +from homeassistant.components.media_player.errors import BrowseError from homeassistant.const import ATTR_ENTITY_ID, STATE_OFF, STATE_ON from homeassistant.core import callback from homeassistant.helpers.typing import HomeAssistantType @@ -72,6 +75,8 @@ class ArcamFmj(MediaPlayerEntity): self._uuid = uuid self._support = ( SUPPORT_SELECT_SOURCE + | SUPPORT_PLAY_MEDIA + | SUPPORT_BROWSE_MEDIA | SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_STEP @@ -238,6 +243,45 @@ class ArcamFmj(MediaPlayerEntity): """Turn the media player off.""" await self._state.set_power(False) + async def async_browse_media(self, media_content_type=None, media_content_id=None): + """Implement the websocket media browsing helper.""" + if media_content_id not in (None, "root"): + raise BrowseError( + f"Media not found: {media_content_type} / {media_content_id}" + ) + + presets = self._state.get_preset_details() + + radio = [ + { + "title": preset.name, + "media_content_id": f"preset:{preset.index}", + "media_content_type": MEDIA_TYPE_MUSIC, + "can_play": True, + } + for preset in presets.values() + ] + + root = { + "title": "Root", + "media_content_id": "root", + "media_content_type": "library", + "can_play": False, + "children": radio, + } + + return root + + async def async_play_media(self, media_type: str, media_id: str, **kwargs) -> None: + """Play media.""" + + if media_id.startswith("preset:"): + preset = int(media_id[7:]) + await self._state.set_tuner_preset(preset) + else: + _LOGGER.error("Media %s is not supported", media_id) + return + @property def source(self): """Return the current input source.""" @@ -303,6 +347,21 @@ class ArcamFmj(MediaPlayerEntity): value = None return value + @property + def media_content_id(self): + """Content type of current playing media.""" + source = self._state.get_source() + if source in (SourceCodes.DAB, SourceCodes.FM): + preset = self._state.get_tuner_preset() + if preset: + value = f"preset:{preset}" + else: + value = None + else: + value = None + + return value + @property def media_channel(self): """Channel currently playing.""" diff --git a/requirements_all.txt b/requirements_all.txt index 46f40e086f8..aede49805ef 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -272,7 +272,7 @@ aprslib==0.6.46 aqualogic==1.0 # homeassistant.components.arcam_fmj -arcam-fmj==0.5.2 +arcam-fmj==0.5.3 # homeassistant.components.arris_tg2492lg arris-tg2492lg==1.0.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 2f571c3b220..a1b327a7cf6 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -161,7 +161,7 @@ apprise==0.8.8 aprslib==0.6.46 # homeassistant.components.arcam_fmj -arcam-fmj==0.5.2 +arcam-fmj==0.5.3 # homeassistant.components.dlna_dmr # homeassistant.components.upnp diff --git a/tests/components/arcam_fmj/test_media_player.py b/tests/components/arcam_fmj/test_media_player.py index d6c219a6d96..91117cff0a2 100644 --- a/tests/components/arcam_fmj/test_media_player.py +++ b/tests/components/arcam_fmj/test_media_player.py @@ -62,7 +62,7 @@ async def test_powered_on(player, state): async def test_supported_features(player, state): """Test supported features.""" data = await update(player) - assert data.attributes["supported_features"] == 69004 + assert data.attributes["supported_features"] == 200588 async def test_turn_on(player, state):