From b261c4b7f8fe683220652807a1c18103d1795643 Mon Sep 17 00:00:00 2001 From: vetegrodd Date: Mon, 5 Nov 2018 18:39:37 +0100 Subject: [PATCH] Activate kodi media player progress bar (#17626) * Added code for progress bar * Added doc string * Using in * More cleaning * Only update position if needed. --- homeassistant/components/media_player/kodi.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/homeassistant/components/media_player/kodi.py b/homeassistant/components/media_player/kodi.py index 01d8069dc3b..a83287eb617 100644 --- a/homeassistant/components/media_player/kodi.py +++ b/homeassistant/components/media_player/kodi.py @@ -33,6 +33,7 @@ from homeassistant.helpers import script from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.template import Template from homeassistant.util.yaml import dump +import homeassistant.util.dt as dt_util REQUIREMENTS = ['jsonrpc-async==0.6', 'jsonrpc-websocket==0.6'] @@ -281,6 +282,8 @@ class KodiDevice(MediaPlayerDevice): self.hass = hass self._name = name self._unique_id = unique_id + self._media_position_updated_at = None + self._media_position = None kwargs = { 'timeout': timeout, @@ -313,6 +316,7 @@ class KodiDevice(MediaPlayerDevice): self._ws_server.Player.OnAVChange = self.async_on_speed_event self._ws_server.Player.OnResume = self.async_on_speed_event self._ws_server.Player.OnSpeedChanged = self.async_on_speed_event + self._ws_server.Player.OnSeek = self.async_on_speed_event self._ws_server.Player.OnStop = self.async_on_stop self._ws_server.Application.OnVolumeChanged = \ self.async_on_volume_changed @@ -371,6 +375,8 @@ class KodiDevice(MediaPlayerDevice): self._players = [] self._properties = {} self._item = {} + self._media_position_updated_at = None + self._media_position = None self.async_schedule_update_ha_state() @callback @@ -473,6 +479,11 @@ class KodiDevice(MediaPlayerDevice): ['time', 'totaltime', 'speed', 'live'] ) + position = self._properties['time'] + if self._media_position != position: + self._media_position_updated_at = dt_util.utcnow() + self._media_position = position + self._item = (await self.server.Player.GetItem( player_id, ['title', 'file', 'uniqueid', 'thumbnail', 'artist', @@ -482,6 +493,8 @@ class KodiDevice(MediaPlayerDevice): self._properties = {} self._item = {} self._app_properties = {} + self._media_position = None + self._media_position_updated_at = None @property def server(self): @@ -543,6 +556,24 @@ class KodiDevice(MediaPlayerDevice): total_time['minutes'] * 60 + total_time['seconds']) + @property + def media_position(self): + """Position of current playing media in seconds.""" + time = self._properties.get('time') + + if time is None: + return None + + return ( + time['hours'] * 3600 + + time['minutes'] * 60 + + time['seconds']) + + @property + def media_position_updated_at(self): + """Last valid time of media position.""" + return self._media_position_updated_at + @property def media_image_url(self): """Image url of current playing media."""