Add Kodi keypress event (#93321)

* Add keypress events

* Fix styling

* fix tests

* improve tests

* Revert device trigger

* Add entity_id to event for ease of filtering
This commit is contained in:
starkillerOG 2023-05-25 11:11:29 +02:00 committed by GitHub
parent f86cc34644
commit 4ef315b32a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -26,6 +26,7 @@ from homeassistant.components.media_player import (
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
from homeassistant.const import (
ATTR_ENTITY_ID,
CONF_DEVICE_ID,
CONF_HOST,
CONF_NAME,
CONF_PASSWORD,
@ -33,6 +34,7 @@ from homeassistant.const import (
CONF_PROXY_SSL,
CONF_SSL,
CONF_TIMEOUT,
CONF_TYPE,
CONF_USERNAME,
EVENT_HOMEASSISTANT_STARTED,
)
@ -279,6 +281,7 @@ class KodiEntity(MediaPlayerEntity):
self._connection = connection
self._kodi = kodi
self._unique_id = uid
self._device_id = None
self._players = None
self._properties = {}
self._item = {}
@ -336,6 +339,20 @@ class KodiEntity(MediaPlayerEntity):
self._app_properties["muted"] = data["muted"]
self.async_write_ha_state()
@callback
def async_on_key_press(self, sender, data):
"""Handle a incoming key press notification."""
self.hass.bus.async_fire(
f"{DOMAIN}_keypress",
{
CONF_TYPE: "keypress",
CONF_DEVICE_ID: self._device_id,
ATTR_ENTITY_ID: self.entity_id,
"sender": sender,
"data": data,
},
)
async def async_on_quit(self, sender, data):
"""Reset the player state on quit action."""
await self._clear_connection()
@ -410,6 +427,7 @@ class KodiEntity(MediaPlayerEntity):
dev_reg = dr.async_get(self.hass)
device = dev_reg.async_get_device({(DOMAIN, self.unique_id)})
dev_reg.async_update_device(device.id, sw_version=sw_version)
self._device_id = device.id
self.async_schedule_update_ha_state(True)
@ -457,6 +475,7 @@ class KodiEntity(MediaPlayerEntity):
self._connection.server.Application.OnVolumeChanged = (
self.async_on_volume_changed
)
self._connection.server.Other.OnKeyPress = self.async_on_key_press
self._connection.server.System.OnQuit = self.async_on_quit
self._connection.server.System.OnRestart = self.async_on_quit
self._connection.server.System.OnSleep = self.async_on_quit