From 41ea8fa9b4e15c7332cf2f9e6fded10745228582 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 21 Mar 2023 15:01:35 +0100 Subject: [PATCH] Guess media type when cast is playing media without media type (#90048) --- homeassistant/components/cast/media_player.py | 10 +++++++++- tests/components/cast/test_media_player.py | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/cast/media_player.py b/homeassistant/components/cast/media_player.py index 0540380bc99..b701890d85d 100644 --- a/homeassistant/components/cast/media_player.py +++ b/homeassistant/components/cast/media_player.py @@ -819,7 +819,15 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity): return MediaType.MOVIE if media_status.media_is_musictrack: return MediaType.MUSIC - return None + + chromecast = self._get_chromecast() + if chromecast.cast_type in ( + pychromecast.const.CAST_TYPE_AUDIO, + pychromecast.const.CAST_TYPE_GROUP, + ): + return MediaType.MUSIC + + return MediaType.VIDEO @property def media_duration(self): diff --git a/tests/components/cast/test_media_player.py b/tests/components/cast/test_media_player.py index eea8c050888..8001411ac71 100644 --- a/tests/components/cast/test_media_player.py +++ b/tests/components/cast/test_media_player.py @@ -1336,7 +1336,17 @@ async def test_entity_play_media_playlist( ) -async def test_entity_media_content_type(hass: HomeAssistant) -> None: +@pytest.mark.parametrize( + ("cast_type", "default_content_type"), + [ + (pychromecast.const.CAST_TYPE_AUDIO, "music"), + (pychromecast.const.CAST_TYPE_GROUP, "music"), + (pychromecast.const.CAST_TYPE_CHROMECAST, "video"), + ], +) +async def test_entity_media_content_type( + hass: HomeAssistant, cast_type, default_content_type +) -> None: """Test various content types.""" entity_id = "media_player.speaker" reg = er.async_get(hass) @@ -1344,6 +1354,7 @@ async def test_entity_media_content_type(hass: HomeAssistant) -> None: info = get_fake_chromecast_info() chromecast, _ = await async_setup_media_player_cast(hass, info) + chromecast.cast_type = cast_type _, conn_status_cb, media_status_cb = get_status_callbacks(chromecast) connection_status = MagicMock() @@ -1364,7 +1375,7 @@ async def test_entity_media_content_type(hass: HomeAssistant) -> None: media_status_cb(media_status) await hass.async_block_till_done() state = hass.states.get(entity_id) - assert state.attributes.get("media_content_type") is None + assert state.attributes.get("media_content_type") == default_content_type media_status.media_is_tvshow = True media_status_cb(media_status)