mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Add media position support and trailer type to Emby (#4792)
* Add media position support and trailer type to Emby * Adjustments to mitigate TypeError * Simplify media_position property * Update handling when data isn't available * Update emby.py
This commit is contained in:
parent
2a7fa5afc3
commit
d7ccf07922
@ -20,12 +20,15 @@ from homeassistant.const import (
|
||||
STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING, STATE_UNKNOWN)
|
||||
from homeassistant.helpers.event import (track_utc_time_change)
|
||||
from homeassistant.util import Throttle
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
REQUIREMENTS = ['pyemby==0.1']
|
||||
REQUIREMENTS = ['pyemby==0.2']
|
||||
|
||||
MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10)
|
||||
MIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)
|
||||
|
||||
MEDIA_TYPE_TRAILER = 'trailer'
|
||||
|
||||
DEFAULT_PORT = 8096
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
@ -119,6 +122,8 @@ class EmbyClient(MediaPlayerDevice):
|
||||
self.update_sessions = update_sessions
|
||||
self.client = client
|
||||
self.set_device(device)
|
||||
self.media_status_last_position = None
|
||||
self.media_status_received = None
|
||||
|
||||
def set_device(self, device):
|
||||
"""Set the device property."""
|
||||
@ -178,6 +183,17 @@ class EmbyClient(MediaPlayerDevice):
|
||||
"""Get the latest details."""
|
||||
self.update_devices(no_throttle=True)
|
||||
self.update_sessions(no_throttle=True)
|
||||
# Check if we should update progress
|
||||
try:
|
||||
position = self.session['PlayState']['PositionTicks']
|
||||
except (KeyError, TypeError):
|
||||
self.media_status_last_position = None
|
||||
self.media_status_received = None
|
||||
else:
|
||||
position = int(position) / 10000000
|
||||
if position != self.media_status_last_position:
|
||||
self.media_status_last_position = position
|
||||
self.media_status_received = dt_util.utcnow()
|
||||
|
||||
def play_percent(self):
|
||||
"""Return current media percent complete."""
|
||||
@ -220,6 +236,8 @@ class EmbyClient(MediaPlayerDevice):
|
||||
return MEDIA_TYPE_TVSHOW
|
||||
elif media_type == 'Movie':
|
||||
return MEDIA_TYPE_VIDEO
|
||||
elif media_type == 'Trailer':
|
||||
return MEDIA_TYPE_TRAILER
|
||||
return None
|
||||
except KeyError:
|
||||
return None
|
||||
@ -233,19 +251,32 @@ class EmbyClient(MediaPlayerDevice):
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
@property
|
||||
def media_position(self):
|
||||
"""Position of current playing media in seconds."""
|
||||
return self.media_status_last_position
|
||||
|
||||
@property
|
||||
def media_position_updated_at(self):
|
||||
"""
|
||||
When was the position of the current playing media valid.
|
||||
|
||||
Returns value from homeassistant.util.dt.utcnow().
|
||||
"""
|
||||
return self.media_status_received
|
||||
|
||||
@property
|
||||
def media_image_url(self):
|
||||
"""Image url of current playing media."""
|
||||
if self.now_playing_item is not None:
|
||||
try:
|
||||
return self.client.get_image(
|
||||
self.now_playing_item['ThumbItemId'], 'Thumb',
|
||||
self.play_percent())
|
||||
self.now_playing_item['ThumbItemId'], 'Thumb', 0)
|
||||
except KeyError:
|
||||
try:
|
||||
return self.client.get_image(
|
||||
self.now_playing_item['PrimaryImageItemId'], 'Primary',
|
||||
self.play_percent())
|
||||
self.now_playing_item[
|
||||
'PrimaryImageItemId'], 'Primary', 0)
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
|
@ -390,7 +390,7 @@ pycmus==0.1.0
|
||||
pydispatcher==2.0.5
|
||||
|
||||
# homeassistant.components.media_player.emby
|
||||
pyemby==0.1
|
||||
pyemby==0.2
|
||||
|
||||
# homeassistant.components.envisalink
|
||||
pyenvisalink==1.9
|
||||
|
Loading…
x
Reference in New Issue
Block a user