Add support for announce to play_media (#72566)

This commit is contained in:
Paulus Schoutsen 2022-05-30 20:41:05 -07:00 committed by GitHub
parent f9bd384e6c
commit 99f3ca1f08
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 38 additions and 1 deletions

View file

@ -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,
}

View file

@ -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"

View file

@ -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

View file

@ -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,

View file

@ -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,
)

View file

@ -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])