mirror of https://github.com/home-assistant/core
Pass metadata when casting an app (#51148)
* Pass through metadata when casting an app * Remove passing kwargs to quick_play Add metadata to the app_data dict. * Include pass-through of metadata * Bump pychromecast to 9.2.0 * Add changes to test to verify metadata * Fix order of imports
This commit is contained in:
parent
cc622f46c5
commit
0709aa7c8c
|
@ -3,7 +3,7 @@
|
|||
"name": "Google Cast",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/cast",
|
||||
"requirements": ["pychromecast==9.1.2"],
|
||||
"requirements": ["pychromecast==9.2.0"],
|
||||
"after_dependencies": [
|
||||
"cloud",
|
||||
"http",
|
||||
|
|
|
@ -482,10 +482,15 @@ class CastDevice(MediaPlayerEntity):
|
|||
|
||||
def play_media(self, media_type, media_id, **kwargs):
|
||||
"""Play media from a URL."""
|
||||
extra = kwargs.get(ATTR_MEDIA_EXTRA, {})
|
||||
metadata = extra.get("metadata")
|
||||
|
||||
# We do not want this to be forwarded to a group
|
||||
if media_type == CAST_DOMAIN:
|
||||
try:
|
||||
app_data = json.loads(media_id)
|
||||
if metadata is not None:
|
||||
app_data["metadata"] = extra.get("metadata")
|
||||
except json.JSONDecodeError:
|
||||
_LOGGER.error("Invalid JSON in media_content_id")
|
||||
raise
|
||||
|
|
|
@ -1330,7 +1330,7 @@ pycfdns==1.2.1
|
|||
pychannels==1.0.0
|
||||
|
||||
# homeassistant.components.cast
|
||||
pychromecast==9.1.2
|
||||
pychromecast==9.2.0
|
||||
|
||||
# homeassistant.components.pocketcasts
|
||||
pycketcasts==1.0.0
|
||||
|
|
|
@ -740,7 +740,7 @@ pybotvac==0.0.20
|
|||
pycfdns==1.2.1
|
||||
|
||||
# homeassistant.components.cast
|
||||
pychromecast==9.1.2
|
||||
pychromecast==9.2.0
|
||||
|
||||
# homeassistant.components.climacell
|
||||
pyclimacell==0.18.2
|
||||
|
|
|
@ -10,7 +10,7 @@ import attr
|
|||
import pychromecast
|
||||
import pytest
|
||||
|
||||
from homeassistant.components import tts
|
||||
from homeassistant.components import media_player, tts
|
||||
from homeassistant.components.cast import media_player as cast
|
||||
from homeassistant.components.cast.media_player import ChromecastInfo
|
||||
from homeassistant.components.media_player.const import (
|
||||
|
@ -27,7 +27,7 @@ from homeassistant.components.media_player.const import (
|
|||
SUPPORT_VOLUME_SET,
|
||||
)
|
||||
from homeassistant.config import async_process_ha_core_config
|
||||
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
||||
from homeassistant.const import ATTR_ENTITY_ID, EVENT_HOMEASSISTANT_STOP
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
|
@ -702,8 +702,20 @@ async def test_entity_play_media_cast(hass: HomeAssistant, quick_play_mock):
|
|||
chromecast.start_app.assert_called_once_with("abc123")
|
||||
|
||||
# Play_media - cast with app name (quick play)
|
||||
await common.async_play_media(hass, "cast", '{"app_name": "youtube"}', entity_id)
|
||||
quick_play_mock.assert_called_once_with(ANY, "youtube", {})
|
||||
await hass.services.async_call(
|
||||
media_player.DOMAIN,
|
||||
media_player.SERVICE_PLAY_MEDIA,
|
||||
{
|
||||
ATTR_ENTITY_ID: entity_id,
|
||||
media_player.ATTR_MEDIA_CONTENT_TYPE: "cast",
|
||||
media_player.ATTR_MEDIA_CONTENT_ID: '{"app_name":"youtube"}',
|
||||
media_player.ATTR_MEDIA_EXTRA: {"metadata": {"metadatatype": 3}},
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
quick_play_mock.assert_called_once_with(
|
||||
ANY, "youtube", {"metadata": {"metadatatype": 3}}
|
||||
)
|
||||
|
||||
|
||||
async def test_entity_play_media_cast_invalid(hass, caplog, quick_play_mock):
|
||||
|
|
Loading…
Reference in New Issue