Plex refactor (#11235)
* Cleaned up '_clear_media()' * Moved media Type to new method * renamed "clear_media()' to ' clear_media_details()' reset 'app_name' (Library Name) in clear_media_details moved thumbs to '_set_media_image()' * Moved playback info into setmedia type as it was just used for the next anyway * Moved library name & image download to only happen if session and player active as else no point anyway * Fixed Linting issue * Some tweaks to clean up unintended complexity * Removed redundant declarations * Fixed whitespace * Revert "Fixed whitespace" This reverts commit0985445c47
. * Revert "Removed redundant declarations" This reverts commit6f9d5a85b0
.
This commit is contained in:
parent
5566ea8c81
commit
3fa45375d9
1 changed files with 69 additions and 61 deletions
|
@ -227,7 +227,7 @@ def request_configuration(host, hass, config, add_devices_callback):
|
||||||
_CONFIGURING[host] = configurator.request_config(
|
_CONFIGURING[host] = configurator.request_config(
|
||||||
'Plex Media Server',
|
'Plex Media Server',
|
||||||
plex_configuration_callback,
|
plex_configuration_callback,
|
||||||
description=('Enter the X-Plex-Token'),
|
description='Enter the X-Plex-Token',
|
||||||
entity_picture='/static/images/logo_plex_mediaserver.png',
|
entity_picture='/static/images/logo_plex_mediaserver.png',
|
||||||
submit_caption='Confirm',
|
submit_caption='Confirm',
|
||||||
fields=[{
|
fields=[{
|
||||||
|
@ -273,8 +273,23 @@ class PlexClient(MediaPlayerDevice):
|
||||||
self.plex_sessions = plex_sessions
|
self.plex_sessions = plex_sessions
|
||||||
self.update_devices = update_devices
|
self.update_devices = update_devices
|
||||||
self.update_sessions = update_sessions
|
self.update_sessions = update_sessions
|
||||||
|
# General
|
||||||
self._clear_media()
|
self._media_content_id = None
|
||||||
|
self._media_content_rating = None
|
||||||
|
self._media_content_type = None
|
||||||
|
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
|
||||||
|
self._media_artist = None
|
||||||
|
self._media_track = None
|
||||||
|
# TV Show
|
||||||
|
self._media_episode = None
|
||||||
|
self._media_season = None
|
||||||
|
self._media_series_title = None
|
||||||
|
|
||||||
self.refresh(device, session)
|
self.refresh(device, session)
|
||||||
|
|
||||||
|
@ -296,7 +311,7 @@ class PlexClient(MediaPlayerDevice):
|
||||||
'media_player', prefix,
|
'media_player', prefix,
|
||||||
self.name.lower().replace('-', '_'))
|
self.name.lower().replace('-', '_'))
|
||||||
|
|
||||||
def _clear_media(self):
|
def _clear_media_details(self):
|
||||||
"""Set all Media Items to None."""
|
"""Set all Media Items to None."""
|
||||||
# General
|
# General
|
||||||
self._media_content_id = None
|
self._media_content_id = None
|
||||||
|
@ -316,10 +331,13 @@ class PlexClient(MediaPlayerDevice):
|
||||||
self._media_season = None
|
self._media_season = None
|
||||||
self._media_series_title = None
|
self._media_series_title = None
|
||||||
|
|
||||||
|
# Clear library Name
|
||||||
|
self._app_name = ''
|
||||||
|
|
||||||
def refresh(self, device, session):
|
def refresh(self, device, session):
|
||||||
"""Refresh key device data."""
|
"""Refresh key device data."""
|
||||||
# new data refresh
|
# new data refresh
|
||||||
self._clear_media()
|
self._clear_media_details()
|
||||||
|
|
||||||
if session: # Not being triggered by Chrome or FireTablet Plex App
|
if session: # Not being triggered by Chrome or FireTablet Plex App
|
||||||
self._session = session
|
self._session = session
|
||||||
|
@ -355,82 +373,22 @@ class PlexClient(MediaPlayerDevice):
|
||||||
self._media_content_id = self._session.ratingKey
|
self._media_content_id = self._session.ratingKey
|
||||||
self._media_content_rating = self._session.contentRating
|
self._media_content_rating = self._session.contentRating
|
||||||
|
|
||||||
if self._player_state == 'playing':
|
self._set_player_state()
|
||||||
self._is_player_active = True
|
|
||||||
self._state = STATE_PLAYING
|
|
||||||
elif self._player_state == 'paused':
|
|
||||||
self._is_player_active = True
|
|
||||||
self._state = STATE_PAUSED
|
|
||||||
elif self.device:
|
|
||||||
self._is_player_active = False
|
|
||||||
self._state = STATE_IDLE
|
|
||||||
else:
|
|
||||||
self._is_player_active = False
|
|
||||||
self._state = STATE_OFF
|
|
||||||
|
|
||||||
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 = self._session.duration
|
||||||
|
# title (movie name, tv episode name, music song name)
|
||||||
|
self._media_title = self._session.title
|
||||||
|
# media type
|
||||||
|
self._set_media_type()
|
||||||
|
self._app_name = self._session.section().title \
|
||||||
|
if self._session.section() is not None else ''
|
||||||
|
self._set_media_image()
|
||||||
else:
|
else:
|
||||||
self._session_type = None
|
self._session_type = None
|
||||||
|
|
||||||
# media type
|
def _set_media_image(self):
|
||||||
if self._session_type == 'clip':
|
|
||||||
_LOGGER.debug("Clip content type detected, compatibility may "
|
|
||||||
"vary: %s", self.entity_id)
|
|
||||||
self._media_content_type = MEDIA_TYPE_TVSHOW
|
|
||||||
elif self._session_type == 'episode':
|
|
||||||
self._media_content_type = MEDIA_TYPE_TVSHOW
|
|
||||||
elif self._session_type == 'movie':
|
|
||||||
self._media_content_type = MEDIA_TYPE_VIDEO
|
|
||||||
elif self._session_type == 'track':
|
|
||||||
self._media_content_type = MEDIA_TYPE_MUSIC
|
|
||||||
|
|
||||||
# title (movie name, tv episode name, music song name)
|
|
||||||
if self._session and self._is_player_active:
|
|
||||||
self._media_title = self._session.title
|
|
||||||
|
|
||||||
# Movies
|
|
||||||
if (self.media_content_type == MEDIA_TYPE_VIDEO and
|
|
||||||
self._session.year is not None):
|
|
||||||
self._media_title += ' (' + str(self._session.year) + ')'
|
|
||||||
|
|
||||||
# TV Show
|
|
||||||
if self._media_content_type is MEDIA_TYPE_TVSHOW:
|
|
||||||
# season number (00)
|
|
||||||
if callable(self._session.seasons):
|
|
||||||
self._media_season = self._session.seasons()[0].index.zfill(2)
|
|
||||||
elif self._session.parentIndex is not None:
|
|
||||||
self._media_season = self._session.parentIndex.zfill(2)
|
|
||||||
else:
|
|
||||||
self._media_season = None
|
|
||||||
# show name
|
|
||||||
self._media_series_title = self._session.grandparentTitle
|
|
||||||
# episode number (00)
|
|
||||||
if self._session.index is not None:
|
|
||||||
self._media_episode = str(self._session.index).zfill(2)
|
|
||||||
|
|
||||||
# Music
|
|
||||||
if self._media_content_type == MEDIA_TYPE_MUSIC:
|
|
||||||
self._media_album_name = self._session.parentTitle
|
|
||||||
self._media_album_artist = self._session.grandparentTitle
|
|
||||||
self._media_track = self._session.index
|
|
||||||
self._media_artist = self._session.originalTitle
|
|
||||||
# use album artist if track artist is missing
|
|
||||||
if self._media_artist is None:
|
|
||||||
_LOGGER.debug("Using album artist because track artist "
|
|
||||||
"was not found: %s", self.entity_id)
|
|
||||||
self._media_artist = self._media_album_artist
|
|
||||||
|
|
||||||
# set app name to library name
|
|
||||||
if (self._session is not None
|
|
||||||
and self._session.section() is not None):
|
|
||||||
self._app_name = self._session.section().title
|
|
||||||
else:
|
|
||||||
self._app_name = ''
|
|
||||||
|
|
||||||
# media image url
|
|
||||||
if self._session is not None:
|
|
||||||
thumb_url = self._session.thumbUrl
|
thumb_url = self._session.thumbUrl
|
||||||
if (self.media_content_type is MEDIA_TYPE_TVSHOW
|
if (self.media_content_type is MEDIA_TYPE_TVSHOW
|
||||||
and not self.config.get(CONF_USE_EPISODE_ART)):
|
and not self.config.get(CONF_USE_EPISODE_ART)):
|
||||||
|
@ -444,11 +402,60 @@ class PlexClient(MediaPlayerDevice):
|
||||||
|
|
||||||
self._media_image_url = thumb_url
|
self._media_image_url = thumb_url
|
||||||
|
|
||||||
|
def _set_player_state(self):
|
||||||
|
if self._player_state == 'playing':
|
||||||
|
self._is_player_active = True
|
||||||
|
self._state = STATE_PLAYING
|
||||||
|
elif self._player_state == 'paused':
|
||||||
|
self._is_player_active = True
|
||||||
|
self._state = STATE_PAUSED
|
||||||
|
elif self.device:
|
||||||
|
self._is_player_active = False
|
||||||
|
self._state = STATE_IDLE
|
||||||
|
else:
|
||||||
|
self._is_player_active = False
|
||||||
|
self._state = STATE_OFF
|
||||||
|
|
||||||
|
def _set_media_type(self):
|
||||||
|
if self._session_type in ['clip', 'episode']:
|
||||||
|
self._media_content_type = MEDIA_TYPE_TVSHOW
|
||||||
|
|
||||||
|
# season number (00)
|
||||||
|
if callable(self._session.seasons):
|
||||||
|
self._media_season = self._session.seasons()[0].index.zfill(2)
|
||||||
|
elif self._session.parentIndex is not None:
|
||||||
|
self._media_season = self._session.parentIndex.zfill(2)
|
||||||
|
else:
|
||||||
|
self._media_season = None
|
||||||
|
# show name
|
||||||
|
self._media_series_title = self._session.grandparentTitle
|
||||||
|
# episode number (00)
|
||||||
|
if self._session.index is not None:
|
||||||
|
self._media_episode = str(self._session.index).zfill(2)
|
||||||
|
|
||||||
|
elif self._session_type == 'movie':
|
||||||
|
self._media_content_type = MEDIA_TYPE_VIDEO
|
||||||
|
if self._session.year is not None and \
|
||||||
|
self._media_title is not None:
|
||||||
|
self._media_title += ' (' + str(self._session.year) + ')'
|
||||||
|
|
||||||
|
elif self._session_type == 'track':
|
||||||
|
self._media_content_type = MEDIA_TYPE_MUSIC
|
||||||
|
self._media_album_name = self._session.parentTitle
|
||||||
|
self._media_album_artist = self._session.grandparentTitle
|
||||||
|
self._media_track = self._session.index
|
||||||
|
self._media_artist = self._session.originalTitle
|
||||||
|
# use album artist if track artist is missing
|
||||||
|
if self._media_artist is None:
|
||||||
|
_LOGGER.debug("Using album artist because track artist "
|
||||||
|
"was not found: %s", self.entity_id)
|
||||||
|
self._media_artist = self._media_album_artist
|
||||||
|
|
||||||
def force_idle(self):
|
def force_idle(self):
|
||||||
"""Force client to idle."""
|
"""Force client to idle."""
|
||||||
self._state = STATE_IDLE
|
self._state = STATE_IDLE
|
||||||
self._session = None
|
self._session = None
|
||||||
self._clear_media()
|
self._clear_media_details()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def unique_id(self):
|
def unique_id(self):
|
||||||
|
@ -792,9 +799,10 @@ class PlexClient(MediaPlayerDevice):
|
||||||
@property
|
@property
|
||||||
def device_state_attributes(self):
|
def device_state_attributes(self):
|
||||||
"""Return the scene state attributes."""
|
"""Return the scene state attributes."""
|
||||||
attr = {}
|
attr = {
|
||||||
attr['media_content_rating'] = self._media_content_rating
|
'media_content_rating': self._media_content_rating,
|
||||||
attr['session_username'] = self._session_username
|
'session_username': self._session_username,
|
||||||
attr['media_library_name'] = self._app_name
|
'media_library_name': self._app_name
|
||||||
|
}
|
||||||
|
|
||||||
return attr
|
return attr
|
||||||
|
|
Loading…
Add table
Reference in a new issue