mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Fix progress for Plex media_players (#22224)
* Return current position and last updated timestamp needed by UI * Add throttling to position updating * Simplify logic, don't clear position when refreshing * Use seconds * Update homeassistant/components/plex/media_player.py Co-Authored-By: jjlawren <jjlawren@users.noreply.github.com> * Add throttling to position updating * Simplify logic, don't clear position when refreshing
This commit is contained in:
parent
1ddc65a0ce
commit
ce550206a4
@ -322,6 +322,7 @@ class PlexClient(MediaPlayerDevice):
|
||||
self._media_image_url = None
|
||||
self._media_title = None
|
||||
self._media_position = None
|
||||
self._media_position_updated_at = None
|
||||
# Music
|
||||
self._media_album_artist = None
|
||||
self._media_album_name = None
|
||||
@ -361,7 +362,6 @@ class PlexClient(MediaPlayerDevice):
|
||||
self._media_duration = None
|
||||
self._media_image_url = None
|
||||
self._media_title = None
|
||||
self._media_position = None
|
||||
# Music
|
||||
self._media_album_artist = None
|
||||
self._media_album_name = None
|
||||
@ -417,7 +417,21 @@ class PlexClient(MediaPlayerDevice):
|
||||
self._make = self._player.device
|
||||
else:
|
||||
self._is_player_available = False
|
||||
self._media_position = self._session.viewOffset
|
||||
|
||||
# Calculate throttled position for proper progress display.
|
||||
position = int(self._session.viewOffset / 1000)
|
||||
now = dt_util.utcnow()
|
||||
if self._media_position is not None:
|
||||
pos_diff = (position - self._media_position)
|
||||
time_diff = now - self._media_position_updated_at
|
||||
if (pos_diff != 0 and
|
||||
abs(time_diff.total_seconds() - pos_diff) > 5):
|
||||
self._media_position_updated_at = now
|
||||
self._media_position = position
|
||||
else:
|
||||
self._media_position_updated_at = now
|
||||
self._media_position = position
|
||||
|
||||
self._media_content_id = self._session.ratingKey
|
||||
self._media_content_rating = getattr(
|
||||
self._session, 'contentRating', None)
|
||||
@ -426,7 +440,7 @@ class PlexClient(MediaPlayerDevice):
|
||||
|
||||
if self._is_player_active and self._session is not None:
|
||||
self._session_type = self._session.type
|
||||
self._media_duration = self._session.duration
|
||||
self._media_duration = int(self._session.duration / 1000)
|
||||
# title (movie name, tv episode name, music song name)
|
||||
self._media_title = self._session.title
|
||||
# media type
|
||||
@ -621,6 +635,16 @@ class PlexClient(MediaPlayerDevice):
|
||||
"""Return the duration of current playing media in seconds."""
|
||||
return self._media_duration
|
||||
|
||||
@property
|
||||
def media_position(self):
|
||||
"""Return the duration of current playing media in seconds."""
|
||||
return self._media_position
|
||||
|
||||
@property
|
||||
def media_position_updated_at(self):
|
||||
"""When was the position of the current playing media valid."""
|
||||
return self._media_position_updated_at
|
||||
|
||||
@property
|
||||
def media_image_url(self):
|
||||
"""Return the image URL of current playing media."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user