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>
pull/116416/head
rale 2024-04-29 13:43:46 -05:00 committed by GitHub
parent 50d83bbdbf
commit a6fdd4e1e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 0 deletions

View File

@ -241,6 +241,20 @@ class LgWebOSMediaPlayerEntity(RestoreEntity, MediaPlayerEntity):
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:
maj_v = self._client.software_info.get("major_ver")
min_v = self._client.software_info.get("minor_ver")

View File

@ -21,6 +21,7 @@ from homeassistant.components.media_player import (
SERVICE_SELECT_SOURCE,
MediaPlayerDeviceClass,
MediaPlayerEntityFeature,
MediaPlayerState,
MediaType,
)
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 flow["context"].get("source") == SOURCE_REAUTH
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