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