Improve reproduce_state for media players (#38266)
This commit is contained in:
parent
3881e0cb23
commit
6e6d6c65ef
2 changed files with 23 additions and 17 deletions
|
@ -5,7 +5,6 @@ from typing import Any, Dict, Iterable, Optional
|
|||
from homeassistant.const import (
|
||||
SERVICE_MEDIA_PAUSE,
|
||||
SERVICE_MEDIA_PLAY,
|
||||
SERVICE_MEDIA_SEEK,
|
||||
SERVICE_MEDIA_STOP,
|
||||
SERVICE_TURN_OFF,
|
||||
SERVICE_TURN_ON,
|
||||
|
@ -25,7 +24,6 @@ from .const import (
|
|||
ATTR_MEDIA_CONTENT_ID,
|
||||
ATTR_MEDIA_CONTENT_TYPE,
|
||||
ATTR_MEDIA_ENQUEUE,
|
||||
ATTR_MEDIA_SEEK_POSITION,
|
||||
ATTR_MEDIA_VOLUME_LEVEL,
|
||||
ATTR_MEDIA_VOLUME_MUTED,
|
||||
ATTR_SOUND_MODE,
|
||||
|
@ -58,16 +56,18 @@ async def _async_reproduce_states(
|
|||
DOMAIN, service, data, blocking=True, context=context
|
||||
)
|
||||
|
||||
if state.state == STATE_ON:
|
||||
await call_service(SERVICE_TURN_ON, [])
|
||||
elif state.state == STATE_OFF:
|
||||
if state.state == STATE_OFF:
|
||||
await call_service(SERVICE_TURN_OFF, [])
|
||||
elif state.state == STATE_PLAYING:
|
||||
await call_service(SERVICE_MEDIA_PLAY, [])
|
||||
elif state.state == STATE_IDLE:
|
||||
await call_service(SERVICE_MEDIA_STOP, [])
|
||||
elif state.state == STATE_PAUSED:
|
||||
await call_service(SERVICE_MEDIA_PAUSE, [])
|
||||
# entities that are off have no other attributes to restore
|
||||
return
|
||||
|
||||
if state.state in [
|
||||
STATE_ON,
|
||||
STATE_PLAYING,
|
||||
STATE_IDLE,
|
||||
STATE_PAUSED,
|
||||
]:
|
||||
await call_service(SERVICE_TURN_ON, [])
|
||||
|
||||
if ATTR_MEDIA_VOLUME_LEVEL in state.attributes:
|
||||
await call_service(SERVICE_VOLUME_SET, [ATTR_MEDIA_VOLUME_LEVEL])
|
||||
|
@ -75,15 +75,14 @@ async def _async_reproduce_states(
|
|||
if ATTR_MEDIA_VOLUME_MUTED in state.attributes:
|
||||
await call_service(SERVICE_VOLUME_MUTE, [ATTR_MEDIA_VOLUME_MUTED])
|
||||
|
||||
if ATTR_MEDIA_SEEK_POSITION in state.attributes:
|
||||
await call_service(SERVICE_MEDIA_SEEK, [ATTR_MEDIA_SEEK_POSITION])
|
||||
|
||||
if ATTR_INPUT_SOURCE in state.attributes:
|
||||
await call_service(SERVICE_SELECT_SOURCE, [ATTR_INPUT_SOURCE])
|
||||
|
||||
if ATTR_SOUND_MODE in state.attributes:
|
||||
await call_service(SERVICE_SELECT_SOUND_MODE, [ATTR_SOUND_MODE])
|
||||
|
||||
already_playing = False
|
||||
|
||||
if (ATTR_MEDIA_CONTENT_TYPE in state.attributes) and (
|
||||
ATTR_MEDIA_CONTENT_ID in state.attributes
|
||||
):
|
||||
|
@ -91,6 +90,14 @@ async def _async_reproduce_states(
|
|||
SERVICE_PLAY_MEDIA,
|
||||
[ATTR_MEDIA_CONTENT_TYPE, ATTR_MEDIA_CONTENT_ID, ATTR_MEDIA_ENQUEUE],
|
||||
)
|
||||
already_playing = True
|
||||
|
||||
if state.state == STATE_PLAYING and not already_playing:
|
||||
await call_service(SERVICE_MEDIA_PLAY, [])
|
||||
elif state.state == STATE_IDLE:
|
||||
await call_service(SERVICE_MEDIA_STOP, [])
|
||||
elif state.state == STATE_PAUSED:
|
||||
await call_service(SERVICE_MEDIA_PAUSE, [])
|
||||
|
||||
|
||||
async def async_reproduce_states(
|
||||
|
|
|
@ -7,7 +7,6 @@ from homeassistant.components.media_player.const import (
|
|||
ATTR_MEDIA_CONTENT_ID,
|
||||
ATTR_MEDIA_CONTENT_TYPE,
|
||||
ATTR_MEDIA_ENQUEUE,
|
||||
ATTR_MEDIA_SEEK_POSITION,
|
||||
ATTR_MEDIA_VOLUME_LEVEL,
|
||||
ATTR_MEDIA_VOLUME_MUTED,
|
||||
ATTR_SOUND_MODE,
|
||||
|
@ -20,7 +19,6 @@ from homeassistant.components.media_player.reproduce_state import async_reproduc
|
|||
from homeassistant.const import (
|
||||
SERVICE_MEDIA_PAUSE,
|
||||
SERVICE_MEDIA_PLAY,
|
||||
SERVICE_MEDIA_SEEK,
|
||||
SERVICE_MEDIA_STOP,
|
||||
SERVICE_TURN_OFF,
|
||||
SERVICE_TURN_ON,
|
||||
|
@ -53,6 +51,8 @@ ENTITY_2 = "media_player.test2"
|
|||
async def test_state(hass, service, state):
|
||||
"""Test that we can turn a state into a service call."""
|
||||
calls_1 = async_mock_service(hass, DOMAIN, service)
|
||||
if service != SERVICE_TURN_ON:
|
||||
async_mock_service(hass, DOMAIN, SERVICE_TURN_ON)
|
||||
|
||||
await async_reproduce_states(hass, [State(ENTITY_1, state)])
|
||||
|
||||
|
@ -149,7 +149,6 @@ async def test_attribute_no_state(hass):
|
|||
[
|
||||
(SERVICE_VOLUME_SET, ATTR_MEDIA_VOLUME_LEVEL),
|
||||
(SERVICE_VOLUME_MUTE, ATTR_MEDIA_VOLUME_MUTED),
|
||||
(SERVICE_MEDIA_SEEK, ATTR_MEDIA_SEEK_POSITION),
|
||||
(SERVICE_SELECT_SOURCE, ATTR_INPUT_SOURCE),
|
||||
(SERVICE_SELECT_SOUND_MODE, ATTR_SOUND_MODE),
|
||||
],
|
||||
|
|
Loading…
Add table
Reference in a new issue