Add support for announce to play_media (#72566)
This commit is contained in:
parent
f9bd384e6c
commit
99f3ca1f08
6 changed files with 38 additions and 1 deletions
|
@ -76,6 +76,7 @@ from .const import ( # noqa: F401
|
|||
ATTR_INPUT_SOURCE_LIST,
|
||||
ATTR_MEDIA_ALBUM_ARTIST,
|
||||
ATTR_MEDIA_ALBUM_NAME,
|
||||
ATTR_MEDIA_ANNOUNCE,
|
||||
ATTR_MEDIA_ARTIST,
|
||||
ATTR_MEDIA_CHANNEL,
|
||||
ATTR_MEDIA_CONTENT_ID,
|
||||
|
@ -182,9 +183,10 @@ DEVICE_CLASS_RECEIVER = MediaPlayerDeviceClass.RECEIVER.value
|
|||
MEDIA_PLAYER_PLAY_MEDIA_SCHEMA = {
|
||||
vol.Required(ATTR_MEDIA_CONTENT_TYPE): cv.string,
|
||||
vol.Required(ATTR_MEDIA_CONTENT_ID): cv.string,
|
||||
vol.Optional(ATTR_MEDIA_ENQUEUE): vol.Any(
|
||||
vol.Exclusive(ATTR_MEDIA_ENQUEUE, "enqueue_announce"): vol.Any(
|
||||
cv.boolean, vol.Coerce(MediaPlayerEnqueue)
|
||||
),
|
||||
vol.Exclusive(ATTR_MEDIA_ANNOUNCE, "enqueue_announce"): cv.boolean,
|
||||
vol.Optional(ATTR_MEDIA_EXTRA, default={}): dict,
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ ATTR_ENTITY_PICTURE_LOCAL = "entity_picture_local"
|
|||
ATTR_GROUP_MEMBERS = "group_members"
|
||||
ATTR_INPUT_SOURCE = "source"
|
||||
ATTR_INPUT_SOURCE_LIST = "source_list"
|
||||
ATTR_MEDIA_ANNOUNCE = "announce"
|
||||
ATTR_MEDIA_ALBUM_ARTIST = "media_album_artist"
|
||||
ATTR_MEDIA_ALBUM_NAME = "media_album_name"
|
||||
ATTR_MEDIA_ARTIST = "media_artist"
|
||||
|
|
|
@ -166,6 +166,13 @@ play_media:
|
|||
value: "add"
|
||||
- label: "Play now and clear queue"
|
||||
value: "replace"
|
||||
announce:
|
||||
name: Announce
|
||||
description: If the media should be played as an announcement.
|
||||
required: false
|
||||
example: "true"
|
||||
selector:
|
||||
boolean:
|
||||
|
||||
select_source:
|
||||
name: Select source
|
||||
|
|
|
@ -21,6 +21,7 @@ import yarl
|
|||
|
||||
from homeassistant.components.http import HomeAssistantView
|
||||
from homeassistant.components.media_player.const import (
|
||||
ATTR_MEDIA_ANNOUNCE,
|
||||
ATTR_MEDIA_CONTENT_ID,
|
||||
ATTR_MEDIA_CONTENT_TYPE,
|
||||
DOMAIN as DOMAIN_MP,
|
||||
|
@ -224,6 +225,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||
str(yarl.URL.build(path=p_type, query=params)),
|
||||
),
|
||||
ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC,
|
||||
ATTR_MEDIA_ANNOUNCE: True,
|
||||
},
|
||||
blocking=True,
|
||||
context=service.context,
|
||||
|
|
|
@ -5,6 +5,7 @@ from http import HTTPStatus
|
|||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components import media_player
|
||||
from homeassistant.components.media_player.browse_media import BrowseMedia
|
||||
|
@ -291,3 +292,25 @@ async def test_enqueue_rewrite(hass, input, expected):
|
|||
|
||||
assert len(mock_play_media.mock_calls) == 1
|
||||
assert mock_play_media.mock_calls[0][2]["enqueue"] == expected
|
||||
|
||||
|
||||
async def test_enqueue_alert_exclusive(hass):
|
||||
"""Test that alert and enqueue cannot be used together."""
|
||||
await async_setup_component(
|
||||
hass, "media_player", {"media_player": {"platform": "demo"}}
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
with pytest.raises(vol.Invalid):
|
||||
await hass.services.async_call(
|
||||
"media_player",
|
||||
"play_media",
|
||||
{
|
||||
"entity_id": "media_player.bedroom",
|
||||
"media_content_type": "music",
|
||||
"media_content_id": "1234",
|
||||
"enqueue": "play",
|
||||
"announce": True,
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
|
|
|
@ -8,6 +8,7 @@ import voluptuous as vol
|
|||
from homeassistant.components import media_source, tts
|
||||
from homeassistant.components.demo.tts import DemoProvider
|
||||
from homeassistant.components.media_player.const import (
|
||||
ATTR_MEDIA_ANNOUNCE,
|
||||
ATTR_MEDIA_CONTENT_ID,
|
||||
ATTR_MEDIA_CONTENT_TYPE,
|
||||
DOMAIN as DOMAIN_MP,
|
||||
|
@ -91,6 +92,7 @@ async def test_setup_component_and_test_service(hass, empty_cache_dir):
|
|||
)
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_ANNOUNCE] is True
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert (
|
||||
await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID])
|
||||
|
|
Loading…
Add table
Reference in a new issue