mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 16:57:10 +00:00
Add Arcam radio media browsing (#39593)
This commit is contained in:
parent
b6630a48b2
commit
74fea6d306
@ -3,7 +3,7 @@
|
|||||||
"name": "Arcam FMJ Receivers",
|
"name": "Arcam FMJ Receivers",
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"documentation": "https://www.home-assistant.io/integrations/arcam_fmj",
|
"documentation": "https://www.home-assistant.io/integrations/arcam_fmj",
|
||||||
"requirements": ["arcam-fmj==0.5.2"],
|
"requirements": ["arcam-fmj==0.5.3"],
|
||||||
"ssdp": [
|
"ssdp": [
|
||||||
{
|
{
|
||||||
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
|
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
|
||||||
|
@ -8,6 +8,8 @@ from homeassistant import config_entries
|
|||||||
from homeassistant.components.media_player import MediaPlayerEntity
|
from homeassistant.components.media_player import MediaPlayerEntity
|
||||||
from homeassistant.components.media_player.const import (
|
from homeassistant.components.media_player.const import (
|
||||||
MEDIA_TYPE_MUSIC,
|
MEDIA_TYPE_MUSIC,
|
||||||
|
SUPPORT_BROWSE_MEDIA,
|
||||||
|
SUPPORT_PLAY_MEDIA,
|
||||||
SUPPORT_SELECT_SOUND_MODE,
|
SUPPORT_SELECT_SOUND_MODE,
|
||||||
SUPPORT_SELECT_SOURCE,
|
SUPPORT_SELECT_SOURCE,
|
||||||
SUPPORT_TURN_OFF,
|
SUPPORT_TURN_OFF,
|
||||||
@ -16,6 +18,7 @@ from homeassistant.components.media_player.const import (
|
|||||||
SUPPORT_VOLUME_SET,
|
SUPPORT_VOLUME_SET,
|
||||||
SUPPORT_VOLUME_STEP,
|
SUPPORT_VOLUME_STEP,
|
||||||
)
|
)
|
||||||
|
from homeassistant.components.media_player.errors import BrowseError
|
||||||
from homeassistant.const import ATTR_ENTITY_ID, STATE_OFF, STATE_ON
|
from homeassistant.const import ATTR_ENTITY_ID, STATE_OFF, STATE_ON
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.helpers.typing import HomeAssistantType
|
from homeassistant.helpers.typing import HomeAssistantType
|
||||||
@ -72,6 +75,8 @@ class ArcamFmj(MediaPlayerEntity):
|
|||||||
self._uuid = uuid
|
self._uuid = uuid
|
||||||
self._support = (
|
self._support = (
|
||||||
SUPPORT_SELECT_SOURCE
|
SUPPORT_SELECT_SOURCE
|
||||||
|
| SUPPORT_PLAY_MEDIA
|
||||||
|
| SUPPORT_BROWSE_MEDIA
|
||||||
| SUPPORT_VOLUME_SET
|
| SUPPORT_VOLUME_SET
|
||||||
| SUPPORT_VOLUME_MUTE
|
| SUPPORT_VOLUME_MUTE
|
||||||
| SUPPORT_VOLUME_STEP
|
| SUPPORT_VOLUME_STEP
|
||||||
@ -238,6 +243,45 @@ class ArcamFmj(MediaPlayerEntity):
|
|||||||
"""Turn the media player off."""
|
"""Turn the media player off."""
|
||||||
await self._state.set_power(False)
|
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
|
@property
|
||||||
def source(self):
|
def source(self):
|
||||||
"""Return the current input source."""
|
"""Return the current input source."""
|
||||||
@ -303,6 +347,21 @@ class ArcamFmj(MediaPlayerEntity):
|
|||||||
value = None
|
value = None
|
||||||
return value
|
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
|
@property
|
||||||
def media_channel(self):
|
def media_channel(self):
|
||||||
"""Channel currently playing."""
|
"""Channel currently playing."""
|
||||||
|
@ -272,7 +272,7 @@ aprslib==0.6.46
|
|||||||
aqualogic==1.0
|
aqualogic==1.0
|
||||||
|
|
||||||
# homeassistant.components.arcam_fmj
|
# homeassistant.components.arcam_fmj
|
||||||
arcam-fmj==0.5.2
|
arcam-fmj==0.5.3
|
||||||
|
|
||||||
# homeassistant.components.arris_tg2492lg
|
# homeassistant.components.arris_tg2492lg
|
||||||
arris-tg2492lg==1.0.0
|
arris-tg2492lg==1.0.0
|
||||||
|
@ -161,7 +161,7 @@ apprise==0.8.8
|
|||||||
aprslib==0.6.46
|
aprslib==0.6.46
|
||||||
|
|
||||||
# homeassistant.components.arcam_fmj
|
# homeassistant.components.arcam_fmj
|
||||||
arcam-fmj==0.5.2
|
arcam-fmj==0.5.3
|
||||||
|
|
||||||
# homeassistant.components.dlna_dmr
|
# homeassistant.components.dlna_dmr
|
||||||
# homeassistant.components.upnp
|
# homeassistant.components.upnp
|
||||||
|
@ -62,7 +62,7 @@ async def test_powered_on(player, state):
|
|||||||
async def test_supported_features(player, state):
|
async def test_supported_features(player, state):
|
||||||
"""Test supported features."""
|
"""Test supported features."""
|
||||||
data = await update(player)
|
data = await update(player)
|
||||||
assert data.attributes["supported_features"] == 69004
|
assert data.attributes["supported_features"] == 200588
|
||||||
|
|
||||||
|
|
||||||
async def test_turn_on(player, state):
|
async def test_turn_on(player, state):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user