Fix webostv media player (#64690)

* Fix webostv media player

* Revise service call error handling
This commit is contained in:
Shay Levy 2022-01-22 19:26:02 +02:00 committed by GitHub
parent 30eacdbea0
commit 9d39a38c16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -24,6 +24,7 @@ from homeassistant.components.media_player.const import (
SUPPORT_PLAY_MEDIA, SUPPORT_PLAY_MEDIA,
SUPPORT_PREVIOUS_TRACK, SUPPORT_PREVIOUS_TRACK,
SUPPORT_SELECT_SOURCE, SUPPORT_SELECT_SOURCE,
SUPPORT_STOP,
SUPPORT_TURN_OFF, SUPPORT_TURN_OFF,
SUPPORT_TURN_ON, SUPPORT_TURN_ON,
SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_MUTE,
@ -39,6 +40,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -64,6 +66,7 @@ SUPPORT_WEBOSTV = (
| SUPPORT_SELECT_SOURCE | SUPPORT_SELECT_SOURCE
| SUPPORT_PLAY_MEDIA | SUPPORT_PLAY_MEDIA
| SUPPORT_PLAY | SUPPORT_PLAY
| SUPPORT_STOP
) )
SUPPORT_WEBOSTV_VOLUME = SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_STEP SUPPORT_WEBOSTV_VOLUME = SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_STEP
@ -103,16 +106,15 @@ def cmd(
try: try:
await func(self, *args, **kwargs) await func(self, *args, **kwargs)
except WEBOSTV_EXCEPTIONS as exc: except WEBOSTV_EXCEPTIONS as exc:
# If TV is off, we expect calls to fail. if self.state != STATE_OFF:
if self.state == STATE_OFF: raise HomeAssistantError(
level = logging.INFO f"Error calling {func.__name__} on entity {self.entity_id}, state:{self.state}"
else: ) from exc
level = logging.ERROR _LOGGER.warning(
_LOGGER.log( "Error calling %s on entity %s, state:%s, error: %r",
level,
"Error calling %s on entity %s: %r",
func.__name__, func.__name__,
self.entity_id, self.entity_id,
self.state,
exc, exc,
) )
@ -208,9 +210,12 @@ class LgWebOSMediaPlayerEntity(MediaPlayerEntity):
): ):
self._source_list[source["label"]] = source self._source_list[source["label"]] = source
# empty list, TV may be off, keep previous list
if not self._source_list and source_list:
self._source_list = source_list
# special handling of live tv since this might # special handling of live tv since this might
# not appear in the app or input lists in some cases # not appear in the app or input lists in some cases
if not found_live_tv: elif not found_live_tv:
app = {"id": LIVE_TV_APP_ID, "title": "Live TV"} app = {"id": LIVE_TV_APP_ID, "title": "Live TV"}
if LIVE_TV_APP_ID == self._client.current_app_id: if LIVE_TV_APP_ID == self._client.current_app_id:
self._current_source = app["title"] self._current_source = app["title"]
@ -222,8 +227,6 @@ class LgWebOSMediaPlayerEntity(MediaPlayerEntity):
or any(word in app["id"] for word in conf_sources) or any(word in app["id"] for word in conf_sources)
): ):
self._source_list["Live TV"] = app self._source_list["Live TV"] = app
if not self._source_list and source_list:
self._source_list = source_list
@util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS) @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)
async def async_update(self) -> None: async def async_update(self) -> None: