Activate kodi media player progress bar (#17626)

* Added code for progress bar

* Added doc string

* Using in

* More cleaning

* Only update position if needed.
This commit is contained in:
vetegrodd 2018-11-05 18:39:37 +01:00 committed by Adam Mills
parent 26ba4a56e8
commit b261c4b7f8

View File

@ -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."""