Add available property to kodi, with some code cleanup (#69115)

* Add available property to kodi, with some code cleanup

* Update homeassistant/components/kodi/media_player.py

Co-authored-by: Shay Levy <levyshay1@gmail.com>

Co-authored-by: Shay Levy <levyshay1@gmail.com>
This commit is contained in:
Raman Gupta 2022-04-30 03:05:22 -04:00 committed by GitHub
parent 7b682e2990
commit 5e3740d5ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,7 +9,6 @@ import re
from typing import Any, TypeVar from typing import Any, TypeVar
import urllib.parse import urllib.parse
import jsonrpc_base
from jsonrpc_base.jsonrpc import ProtocolError, TransportError from jsonrpc_base.jsonrpc import ProtocolError, TransportError
from pykodi import CannotConnectError from pykodi import CannotConnectError
from typing_extensions import Concatenate, ParamSpec from typing_extensions import Concatenate, ParamSpec
@ -258,10 +257,7 @@ def cmd(
"""Wrap all command methods.""" """Wrap all command methods."""
try: try:
await func(obj, *args, **kwargs) await func(obj, *args, **kwargs)
except ( except (TransportError, ProtocolError) as exc:
jsonrpc_base.jsonrpc.TransportError,
jsonrpc_base.jsonrpc.ProtocolError,
) as exc:
# If Kodi is off, we expect calls to fail. # If Kodi is off, we expect calls to fail.
if obj.state == STATE_OFF: if obj.state == STATE_OFF:
log_function = _LOGGER.debug log_function = _LOGGER.debug
@ -301,7 +297,6 @@ class KodiEntity(MediaPlayerEntity):
"""Initialize the Kodi entity.""" """Initialize the Kodi entity."""
self._connection = connection self._connection = connection
self._kodi = kodi self._kodi = kodi
self._name = name
self._unique_id = uid self._unique_id = uid
self._players = None self._players = None
self._properties = {} self._properties = {}
@ -311,6 +306,8 @@ class KodiEntity(MediaPlayerEntity):
self._media_position = None self._media_position = None
self._connect_error = False self._connect_error = False
self._attr_name = name
def _reset_state(self, players=None): def _reset_state(self, players=None):
self._players = players self._players = players
self._properties = {} self._properties = {}
@ -440,7 +437,7 @@ class KodiEntity(MediaPlayerEntity):
try: try:
await self._connection.connect() await self._connection.connect()
await self._on_ws_connected() await self._on_ws_connected()
except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): except (TransportError, CannotConnectError):
if not self._connect_error: if not self._connect_error:
self._connect_error = True self._connect_error = True
_LOGGER.warning("Unable to connect to Kodi via websocket") _LOGGER.warning("Unable to connect to Kodi via websocket")
@ -451,7 +448,7 @@ class KodiEntity(MediaPlayerEntity):
async def _ping(self): async def _ping(self):
try: try:
await self._kodi.ping() await self._kodi.ping()
except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): except (TransportError, CannotConnectError):
if not self._connect_error: if not self._connect_error:
self._connect_error = True self._connect_error = True
_LOGGER.warning("Unable to ping Kodi via websocket") _LOGGER.warning("Unable to ping Kodi via websocket")
@ -528,11 +525,6 @@ class KodiEntity(MediaPlayerEntity):
else: else:
self._reset_state([]) self._reset_state([])
@property
def name(self):
"""Return the name of the device."""
return self._name
@property @property
def should_poll(self): def should_poll(self):
"""Return True if entity has to be polled for state.""" """Return True if entity has to be polled for state."""
@ -644,6 +636,11 @@ class KodiEntity(MediaPlayerEntity):
return None return None
@property
def available(self):
"""Return True if entity is available."""
return not self._connect_error
async def async_turn_on(self): async def async_turn_on(self):
"""Turn the media player on.""" """Turn the media player on."""
_LOGGER.debug("Firing event to turn on device") _LOGGER.debug("Firing event to turn on device")
@ -765,7 +762,7 @@ class KodiEntity(MediaPlayerEntity):
try: try:
result = await self._kodi.call_method(method, **kwargs) result = await self._kodi.call_method(method, **kwargs)
result_ok = True result_ok = True
except jsonrpc_base.jsonrpc.ProtocolError as exc: except ProtocolError as exc:
result = exc.args[2]["error"] result = exc.args[2]["error"]
_LOGGER.error( _LOGGER.error(
"Run API method %s.%s(%s) error: %s", "Run API method %s.%s(%s) error: %s",
@ -774,7 +771,7 @@ class KodiEntity(MediaPlayerEntity):
kwargs, kwargs,
result, result,
) )
except jsonrpc_base.jsonrpc.TransportError: except TransportError:
result = None result = None
_LOGGER.warning( _LOGGER.warning(
"TransportError trying to run API method %s.%s(%s)", "TransportError trying to run API method %s.%s(%s)",