Report webOS media player state (#113774)
* support for webos media player state * add test coverage and don't use assumed state if media player state is available * fallback to assumed state if media state isn't available Co-authored-by: Shay Levy <levyshay1@gmail.com> --------- Co-authored-by: Shay Levy <levyshay1@gmail.com>
This commit is contained in:
parent
50d83bbdbf
commit
a6fdd4e1e2
2 changed files with 35 additions and 0 deletions
|
@ -241,6 +241,20 @@ class LgWebOSMediaPlayerEntity(RestoreEntity, MediaPlayerEntity):
|
||||||
name=self._device_name,
|
name=self._device_name,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self._attr_assumed_state = True
|
||||||
|
if (
|
||||||
|
self._client.media_state is not None
|
||||||
|
and self._client.media_state.get("foregroundAppInfo") is not None
|
||||||
|
):
|
||||||
|
self._attr_assumed_state = False
|
||||||
|
for entry in self._client.media_state.get("foregroundAppInfo"):
|
||||||
|
if entry.get("playState") == "playing":
|
||||||
|
self._attr_state = MediaPlayerState.PLAYING
|
||||||
|
elif entry.get("playState") == "paused":
|
||||||
|
self._attr_state = MediaPlayerState.PAUSED
|
||||||
|
elif entry.get("playState") == "unloaded":
|
||||||
|
self._attr_state = MediaPlayerState.IDLE
|
||||||
|
|
||||||
if self._client.system_info is not None or self.state != MediaPlayerState.OFF:
|
if self._client.system_info is not None or self.state != MediaPlayerState.OFF:
|
||||||
maj_v = self._client.software_info.get("major_ver")
|
maj_v = self._client.software_info.get("major_ver")
|
||||||
min_v = self._client.software_info.get("minor_ver")
|
min_v = self._client.software_info.get("minor_ver")
|
||||||
|
|
|
@ -21,6 +21,7 @@ from homeassistant.components.media_player import (
|
||||||
SERVICE_SELECT_SOURCE,
|
SERVICE_SELECT_SOURCE,
|
||||||
MediaPlayerDeviceClass,
|
MediaPlayerDeviceClass,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
|
MediaPlayerState,
|
||||||
MediaType,
|
MediaType,
|
||||||
)
|
)
|
||||||
from homeassistant.components.webostv.const import (
|
from homeassistant.components.webostv.const import (
|
||||||
|
@ -811,3 +812,23 @@ async def test_reauth_reconnect(hass: HomeAssistant, client, monkeypatch) -> Non
|
||||||
assert "context" in flow
|
assert "context" in flow
|
||||||
assert flow["context"].get("source") == SOURCE_REAUTH
|
assert flow["context"].get("source") == SOURCE_REAUTH
|
||||||
assert flow["context"].get("entry_id") == entry.entry_id
|
assert flow["context"].get("entry_id") == entry.entry_id
|
||||||
|
|
||||||
|
|
||||||
|
async def test_update_media_state(hass: HomeAssistant, client, monkeypatch) -> None:
|
||||||
|
"""Test updating media state."""
|
||||||
|
await setup_webostv(hass)
|
||||||
|
|
||||||
|
data = {"foregroundAppInfo": [{"playState": "playing"}]}
|
||||||
|
monkeypatch.setattr(client, "media_state", data)
|
||||||
|
await client.mock_state_update()
|
||||||
|
assert hass.states.get(ENTITY_ID).state == MediaPlayerState.PLAYING
|
||||||
|
|
||||||
|
data = {"foregroundAppInfo": [{"playState": "paused"}]}
|
||||||
|
monkeypatch.setattr(client, "media_state", data)
|
||||||
|
await client.mock_state_update()
|
||||||
|
assert hass.states.get(ENTITY_ID).state == MediaPlayerState.PAUSED
|
||||||
|
|
||||||
|
data = {"foregroundAppInfo": [{"playState": "unloaded"}]}
|
||||||
|
monkeypatch.setattr(client, "media_state", data)
|
||||||
|
await client.mock_state_update()
|
||||||
|
assert hass.states.get(ENTITY_ID).state == MediaPlayerState.IDLE
|
||||||
|
|
Loading…
Add table
Reference in a new issue