mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 04:07:08 +00:00
Add support for announce to play_media (#72566)
This commit is contained in:
parent
f9bd384e6c
commit
99f3ca1f08
@ -76,6 +76,7 @@ from .const import ( # noqa: F401
|
|||||||
ATTR_INPUT_SOURCE_LIST,
|
ATTR_INPUT_SOURCE_LIST,
|
||||||
ATTR_MEDIA_ALBUM_ARTIST,
|
ATTR_MEDIA_ALBUM_ARTIST,
|
||||||
ATTR_MEDIA_ALBUM_NAME,
|
ATTR_MEDIA_ALBUM_NAME,
|
||||||
|
ATTR_MEDIA_ANNOUNCE,
|
||||||
ATTR_MEDIA_ARTIST,
|
ATTR_MEDIA_ARTIST,
|
||||||
ATTR_MEDIA_CHANNEL,
|
ATTR_MEDIA_CHANNEL,
|
||||||
ATTR_MEDIA_CONTENT_ID,
|
ATTR_MEDIA_CONTENT_ID,
|
||||||
@ -182,9 +183,10 @@ DEVICE_CLASS_RECEIVER = MediaPlayerDeviceClass.RECEIVER.value
|
|||||||
MEDIA_PLAYER_PLAY_MEDIA_SCHEMA = {
|
MEDIA_PLAYER_PLAY_MEDIA_SCHEMA = {
|
||||||
vol.Required(ATTR_MEDIA_CONTENT_TYPE): cv.string,
|
vol.Required(ATTR_MEDIA_CONTENT_TYPE): cv.string,
|
||||||
vol.Required(ATTR_MEDIA_CONTENT_ID): 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)
|
cv.boolean, vol.Coerce(MediaPlayerEnqueue)
|
||||||
),
|
),
|
||||||
|
vol.Exclusive(ATTR_MEDIA_ANNOUNCE, "enqueue_announce"): cv.boolean,
|
||||||
vol.Optional(ATTR_MEDIA_EXTRA, default={}): dict,
|
vol.Optional(ATTR_MEDIA_EXTRA, default={}): dict,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ ATTR_ENTITY_PICTURE_LOCAL = "entity_picture_local"
|
|||||||
ATTR_GROUP_MEMBERS = "group_members"
|
ATTR_GROUP_MEMBERS = "group_members"
|
||||||
ATTR_INPUT_SOURCE = "source"
|
ATTR_INPUT_SOURCE = "source"
|
||||||
ATTR_INPUT_SOURCE_LIST = "source_list"
|
ATTR_INPUT_SOURCE_LIST = "source_list"
|
||||||
|
ATTR_MEDIA_ANNOUNCE = "announce"
|
||||||
ATTR_MEDIA_ALBUM_ARTIST = "media_album_artist"
|
ATTR_MEDIA_ALBUM_ARTIST = "media_album_artist"
|
||||||
ATTR_MEDIA_ALBUM_NAME = "media_album_name"
|
ATTR_MEDIA_ALBUM_NAME = "media_album_name"
|
||||||
ATTR_MEDIA_ARTIST = "media_artist"
|
ATTR_MEDIA_ARTIST = "media_artist"
|
||||||
|
@ -166,6 +166,13 @@ play_media:
|
|||||||
value: "add"
|
value: "add"
|
||||||
- label: "Play now and clear queue"
|
- label: "Play now and clear queue"
|
||||||
value: "replace"
|
value: "replace"
|
||||||
|
announce:
|
||||||
|
name: Announce
|
||||||
|
description: If the media should be played as an announcement.
|
||||||
|
required: false
|
||||||
|
example: "true"
|
||||||
|
selector:
|
||||||
|
boolean:
|
||||||
|
|
||||||
select_source:
|
select_source:
|
||||||
name: Select source
|
name: Select source
|
||||||
|
@ -21,6 +21,7 @@ import yarl
|
|||||||
|
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.components.media_player.const import (
|
from homeassistant.components.media_player.const import (
|
||||||
|
ATTR_MEDIA_ANNOUNCE,
|
||||||
ATTR_MEDIA_CONTENT_ID,
|
ATTR_MEDIA_CONTENT_ID,
|
||||||
ATTR_MEDIA_CONTENT_TYPE,
|
ATTR_MEDIA_CONTENT_TYPE,
|
||||||
DOMAIN as DOMAIN_MP,
|
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)),
|
str(yarl.URL.build(path=p_type, query=params)),
|
||||||
),
|
),
|
||||||
ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC,
|
ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC,
|
||||||
|
ATTR_MEDIA_ANNOUNCE: True,
|
||||||
},
|
},
|
||||||
blocking=True,
|
blocking=True,
|
||||||
context=service.context,
|
context=service.context,
|
||||||
|
@ -5,6 +5,7 @@ from http import HTTPStatus
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components import media_player
|
from homeassistant.components import media_player
|
||||||
from homeassistant.components.media_player.browse_media import BrowseMedia
|
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 len(mock_play_media.mock_calls) == 1
|
||||||
assert mock_play_media.mock_calls[0][2]["enqueue"] == expected
|
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 import media_source, tts
|
||||||
from homeassistant.components.demo.tts import DemoProvider
|
from homeassistant.components.demo.tts import DemoProvider
|
||||||
from homeassistant.components.media_player.const import (
|
from homeassistant.components.media_player.const import (
|
||||||
|
ATTR_MEDIA_ANNOUNCE,
|
||||||
ATTR_MEDIA_CONTENT_ID,
|
ATTR_MEDIA_CONTENT_ID,
|
||||||
ATTR_MEDIA_CONTENT_TYPE,
|
ATTR_MEDIA_CONTENT_TYPE,
|
||||||
DOMAIN as DOMAIN_MP,
|
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 len(calls) == 1
|
||||||
|
assert calls[0].data[ATTR_MEDIA_ANNOUNCE] is True
|
||||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||||
assert (
|
assert (
|
||||||
await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID])
|
await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user