mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +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_image_url = None
|
||||||
self._media_title = None
|
self._media_title = None
|
||||||
self._media_position = None
|
self._media_position = None
|
||||||
|
self._media_position_updated_at = None
|
||||||
# Music
|
# Music
|
||||||
self._media_album_artist = None
|
self._media_album_artist = None
|
||||||
self._media_album_name = None
|
self._media_album_name = None
|
||||||
@ -361,7 +362,6 @@ class PlexClient(MediaPlayerDevice):
|
|||||||
self._media_duration = None
|
self._media_duration = None
|
||||||
self._media_image_url = None
|
self._media_image_url = None
|
||||||
self._media_title = None
|
self._media_title = None
|
||||||
self._media_position = None
|
|
||||||
# Music
|
# Music
|
||||||
self._media_album_artist = None
|
self._media_album_artist = None
|
||||||
self._media_album_name = None
|
self._media_album_name = None
|
||||||
@ -417,7 +417,21 @@ class PlexClient(MediaPlayerDevice):
|
|||||||
self._make = self._player.device
|
self._make = self._player.device
|
||||||
else:
|
else:
|
||||||
self._is_player_available = False
|
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_id = self._session.ratingKey
|
||||||
self._media_content_rating = getattr(
|
self._media_content_rating = getattr(
|
||||||
self._session, 'contentRating', None)
|
self._session, 'contentRating', None)
|
||||||
@ -426,7 +440,7 @@ class PlexClient(MediaPlayerDevice):
|
|||||||
|
|
||||||
if self._is_player_active and self._session is not None:
|
if self._is_player_active and self._session is not None:
|
||||||
self._session_type = self._session.type
|
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)
|
# title (movie name, tv episode name, music song name)
|
||||||
self._media_title = self._session.title
|
self._media_title = self._session.title
|
||||||
# media type
|
# media type
|
||||||
@ -621,6 +635,16 @@ class PlexClient(MediaPlayerDevice):
|
|||||||
"""Return the duration of current playing media in seconds."""
|
"""Return the duration of current playing media in seconds."""
|
||||||
return self._media_duration
|
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
|
@property
|
||||||
def media_image_url(self):
|
def media_image_url(self):
|
||||||
"""Return the image URL of current playing media."""
|
"""Return the image URL of current playing media."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user