From 083e902dc0801fd9c87a86c9f4c1c8c4cbde9125 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Wed, 31 Aug 2022 19:53:14 +0200 Subject: [PATCH] Ignore unknown states in universal media player (#77388) Ignore unknown states --- homeassistant/components/universal/media_player.py | 13 ++++++++----- tests/components/universal/test_media_player.py | 6 ++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/universal/media_player.py b/homeassistant/components/universal/media_player.py index 099d786b901..ee2954aac28 100644 --- a/homeassistant/components/universal/media_player.py +++ b/homeassistant/components/universal/media_player.py @@ -109,6 +109,9 @@ STATES_ORDER = [ STATE_BUFFERING, STATE_PLAYING, ] +STATES_ORDER_LOOKUP = {state: idx for idx, state in enumerate(STATES_ORDER)} +STATES_ORDER_IDLE = STATES_ORDER_LOOKUP[STATE_IDLE] + ATTRS_SCHEMA = cv.schema_with_slug_keys(cv.string) CMD_SCHEMA = cv.schema_with_slug_keys(cv.SERVICE_SCHEMA) @@ -626,12 +629,12 @@ class UniversalMediaPlayer(MediaPlayerEntity): """Update state in HA.""" self._child_state = None for child_name in self._children: - if (child_state := self.hass.states.get(child_name)) and STATES_ORDER.index( - child_state.state - ) >= STATES_ORDER.index(STATE_IDLE): + if (child_state := self.hass.states.get(child_name)) and ( + child_state_order := STATES_ORDER_LOOKUP.get(child_state.state, 0) + ) >= STATES_ORDER_IDLE: if self._child_state: - if STATES_ORDER.index(child_state.state) > STATES_ORDER.index( - self._child_state.state + if child_state_order > STATES_ORDER_LOOKUP.get( + self._child_state.state, 0 ): self._child_state = child_state else: diff --git a/tests/components/universal/test_media_player.py b/tests/components/universal/test_media_player.py index c50c3e97713..b589fc09a6a 100644 --- a/tests/components/universal/test_media_player.py +++ b/tests/components/universal/test_media_player.py @@ -434,6 +434,12 @@ async def test_active_child_state(hass, mock_states): await ump.async_update() assert mock_states.mock_mp_2.entity_id == ump._child_state.entity_id + mock_states.mock_mp_1._state = "invalid_state" + mock_states.mock_mp_1.async_schedule_update_ha_state() + await hass.async_block_till_done() + await ump.async_update() + assert mock_states.mock_mp_2.entity_id == ump._child_state.entity_id + async def test_name(hass): """Test name property."""