diff --git a/homeassistant/components/media_player/emby.py b/homeassistant/components/media_player/emby.py index 5349e74ed40..3fae52dd052 100644 --- a/homeassistant/components/media_player/emby.py +++ b/homeassistant/components/media_player/emby.py @@ -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 diff --git a/requirements_all.txt b/requirements_all.txt index fe37b085b2c..f9d1b36fb5f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -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