mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Made universal media player cache active player
Revised universal media player to cache the active player when updating the state when any of the children change. Revised tests to accommodate this change.
This commit is contained in:
parent
85d732a45a
commit
a8d5b0e5ec
@ -144,6 +144,7 @@ class UniversalMediaPlayer(MediaPlayerDevice):
|
||||
self._children = children
|
||||
self._cmds = commands
|
||||
self._attrs = attributes
|
||||
self._child_state = None
|
||||
|
||||
track_state_change(hass, self.dependencies, self.update_state)
|
||||
|
||||
@ -207,13 +208,19 @@ class UniversalMediaPlayer(MediaPlayerDevice):
|
||||
else:
|
||||
return None
|
||||
|
||||
@property
|
||||
def active_child_state(self):
|
||||
def _cache_active_child_state(self):
|
||||
""" The state of the active child or None """
|
||||
for child_name in self._children:
|
||||
child_state = self.hass.states.get(child_name)
|
||||
if child_state and child_state.state not in OFF_STATES:
|
||||
return child_state
|
||||
self._child_state = child_state
|
||||
return
|
||||
self._child_state = None
|
||||
|
||||
@property
|
||||
def active_child_state(self):
|
||||
""" the state of the active child or none """
|
||||
return self._child_state
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
@ -420,4 +427,5 @@ class UniversalMediaPlayer(MediaPlayerDevice):
|
||||
|
||||
def update_state(self, *_):
|
||||
""" event to trigger a state update in HA """
|
||||
self._cache_active_child_state()
|
||||
self.update_ha_state()
|
||||
|
@ -190,21 +190,26 @@ class TestMediaPlayer(unittest.TestCase):
|
||||
universal.validate_config(config)
|
||||
|
||||
ump = universal.UniversalMediaPlayer(self.hass, **config)
|
||||
ump.entity_id = media_player.ENTITY_ID_FORMAT.format(config['name'])
|
||||
ump.update_state()
|
||||
|
||||
self.assertEqual(None, ump.active_child_state)
|
||||
|
||||
self.mock_mp_1._state = STATE_PLAYING
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(self.mock_mp_1.entity_id,
|
||||
ump.active_child_state.entity_id)
|
||||
|
||||
self.mock_mp_2._state = STATE_PLAYING
|
||||
self.mock_mp_2.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(self.mock_mp_1.entity_id,
|
||||
ump.active_child_state.entity_id)
|
||||
|
||||
self.mock_mp_1._state = STATE_OFF
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(self.mock_mp_2.entity_id,
|
||||
ump.active_child_state.entity_id)
|
||||
|
||||
@ -223,11 +228,14 @@ class TestMediaPlayer(unittest.TestCase):
|
||||
universal.validate_config(config)
|
||||
|
||||
ump = universal.UniversalMediaPlayer(self.hass, **config)
|
||||
ump.entity_id = media_player.ENTITY_ID_FORMAT.format(config['name'])
|
||||
ump.update_state()
|
||||
|
||||
self.assertTrue(ump.state, STATE_OFF)
|
||||
|
||||
self.mock_mp_1._state = STATE_PLAYING
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(STATE_PLAYING, ump.state)
|
||||
|
||||
def test_state_with_children_and_attrs(self):
|
||||
@ -236,17 +244,22 @@ class TestMediaPlayer(unittest.TestCase):
|
||||
universal.validate_config(config)
|
||||
|
||||
ump = universal.UniversalMediaPlayer(self.hass, **config)
|
||||
ump.entity_id = media_player.ENTITY_ID_FORMAT.format(config['name'])
|
||||
ump.update_state()
|
||||
|
||||
self.assertEqual(ump.state, STATE_OFF)
|
||||
|
||||
self.hass.states.set(self.mock_state_switch_id, STATE_ON)
|
||||
ump.update_state()
|
||||
self.assertEqual(ump.state, STATE_ON)
|
||||
|
||||
self.mock_mp_1._state = STATE_PLAYING
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(ump.state, STATE_PLAYING)
|
||||
|
||||
self.hass.states.set(self.mock_state_switch_id, STATE_OFF)
|
||||
ump.update_state()
|
||||
self.assertEqual(ump.state, STATE_OFF)
|
||||
|
||||
def test_volume_level(self):
|
||||
@ -255,15 +268,19 @@ class TestMediaPlayer(unittest.TestCase):
|
||||
universal.validate_config(config)
|
||||
|
||||
ump = universal.UniversalMediaPlayer(self.hass, **config)
|
||||
ump.entity_id = media_player.ENTITY_ID_FORMAT.format(config['name'])
|
||||
ump.update_state()
|
||||
|
||||
self.assertEqual(None, ump.volume_level)
|
||||
|
||||
self.mock_mp_1._state = STATE_PLAYING
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(0, ump.volume_level)
|
||||
|
||||
self.mock_mp_1._volume_level = 1
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(1, ump.volume_level)
|
||||
|
||||
def test_is_volume_muted_children_only(self):
|
||||
@ -272,15 +289,19 @@ class TestMediaPlayer(unittest.TestCase):
|
||||
universal.validate_config(config)
|
||||
|
||||
ump = universal.UniversalMediaPlayer(self.hass, **config)
|
||||
ump.entity_id = media_player.ENTITY_ID_FORMAT.format(config['name'])
|
||||
ump.update_state()
|
||||
|
||||
self.assertFalse(ump.is_volume_muted)
|
||||
|
||||
self.mock_mp_1._state = STATE_PLAYING
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertFalse(ump.is_volume_muted)
|
||||
|
||||
self.mock_mp_1._is_volume_muted = True
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertTrue(ump.is_volume_muted)
|
||||
|
||||
def test_is_volume_muted_children_and_attr(self):
|
||||
@ -301,12 +322,15 @@ class TestMediaPlayer(unittest.TestCase):
|
||||
universal.validate_config(config)
|
||||
|
||||
ump = universal.UniversalMediaPlayer(self.hass, **config)
|
||||
ump.entity_id = media_player.ENTITY_ID_FORMAT.format(config['name'])
|
||||
ump.update_state()
|
||||
|
||||
self.assertEqual(0, ump.supported_media_commands)
|
||||
|
||||
self.mock_mp_1._supported_media_commands = 512
|
||||
self.mock_mp_1._state = STATE_PLAYING
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
self.assertEqual(512, ump.supported_media_commands)
|
||||
|
||||
def test_supported_media_commands_children_and_cmds(self):
|
||||
@ -320,11 +344,14 @@ class TestMediaPlayer(unittest.TestCase):
|
||||
config['commands']['volume_mute'] = 'test'
|
||||
|
||||
ump = universal.UniversalMediaPlayer(self.hass, **config)
|
||||
ump.entity_id = media_player.ENTITY_ID_FORMAT.format(config['name'])
|
||||
ump.update_state()
|
||||
|
||||
self.mock_mp_1._supported_media_commands = \
|
||||
universal.SUPPORT_VOLUME_SET
|
||||
self.mock_mp_1._state = STATE_PLAYING
|
||||
self.mock_mp_1.update_ha_state()
|
||||
ump.update_state()
|
||||
|
||||
check_flags = universal.SUPPORT_TURN_ON | universal.SUPPORT_TURN_OFF \
|
||||
| universal.SUPPORT_VOLUME_STEP | universal.SUPPORT_VOLUME_MUTE
|
||||
|
Loading…
x
Reference in New Issue
Block a user