Always update all Plex client types (#24038)

This commit is contained in:
jjlawren 2019-05-23 07:00:41 -05:00 committed by Pascal Vizeli
parent 7f7435f003
commit 8d22479d24

View File

@ -29,7 +29,6 @@ MIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)
PLEX_CONFIG_FILE = 'plex.conf' PLEX_CONFIG_FILE = 'plex.conf'
PLEX_DATA = 'plex' PLEX_DATA = 'plex'
CONF_INCLUDE_NON_CLIENTS = 'include_non_clients'
CONF_USE_EPISODE_ART = 'use_episode_art' CONF_USE_EPISODE_ART = 'use_episode_art'
CONF_USE_CUSTOM_ENTITY_IDS = 'use_custom_entity_ids' CONF_USE_CUSTOM_ENTITY_IDS = 'use_custom_entity_ids'
CONF_SHOW_ALL_CONTROLS = 'show_all_controls' CONF_SHOW_ALL_CONTROLS = 'show_all_controls'
@ -37,7 +36,6 @@ CONF_REMOVE_UNAVAILABLE_CLIENTS = 'remove_unavailable_clients'
CONF_CLIENT_REMOVE_INTERVAL = 'client_remove_interval' CONF_CLIENT_REMOVE_INTERVAL = 'client_remove_interval'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_INCLUDE_NON_CLIENTS, default=False): cv.boolean,
vol.Optional(CONF_USE_EPISODE_ART, default=False): cv.boolean, vol.Optional(CONF_USE_EPISODE_ART, default=False): cv.boolean,
vol.Optional(CONF_USE_CUSTOM_ENTITY_IDS, default=False): cv.boolean, vol.Optional(CONF_USE_CUSTOM_ENTITY_IDS, default=False): cv.boolean,
vol.Optional(CONF_SHOW_ALL_CONTROLS, default=False): cv.boolean, vol.Optional(CONF_SHOW_ALL_CONTROLS, default=False): cv.boolean,
@ -160,8 +158,7 @@ def setup_plexserver(
if device.machineIdentifier not in plex_clients: if device.machineIdentifier not in plex_clients:
new_client = PlexClient( new_client = PlexClient(
config, device, None, plex_sessions, update_devices, config, device, None, plex_sessions, update_devices)
update_sessions)
plex_clients[device.machineIdentifier] = new_client plex_clients[device.machineIdentifier] = new_client
_LOGGER.debug("New device: %s", device.machineIdentifier) _LOGGER.debug("New device: %s", device.machineIdentifier)
new_plex_clients.append(new_client) new_plex_clients.append(new_client)
@ -171,27 +168,38 @@ def setup_plexserver(
plex_clients[device.machineIdentifier].refresh(device, None) plex_clients[device.machineIdentifier].refresh(device, None)
# add devices with a session and no client (ex. PlexConnect Apple TV's) # add devices with a session and no client (ex. PlexConnect Apple TV's)
if config.get(CONF_INCLUDE_NON_CLIENTS): try:
# To avoid errors when plex sessions created during iteration sessions = plexserver.sessions()
sessions = list(plex_sessions.items()) except plexapi.exceptions.BadRequest:
for machine_identifier, (session, player) in sessions: _LOGGER.exception("Error listing plex sessions")
if machine_identifier in available_client_ids: return
# Avoid using session if already added as a device. except requests.exceptions.RequestException as ex:
_LOGGER.debug("Skipping session, device exists: %s", _LOGGER.warning(
machine_identifier) "Could not connect to plex server at http://%s (%s)", host, ex)
continue return
if (machine_identifier not in plex_clients plex_sessions.clear()
and machine_identifier is not None): for session in sessions:
new_client = PlexClient( for player in session.players:
config, player, session, plex_sessions, update_devices, plex_sessions[player.machineIdentifier] = session, player
update_sessions)
plex_clients[machine_identifier] = new_client for machine_identifier, (session, player) in plex_sessions.items():
_LOGGER.debug("New session: %s", machine_identifier) if machine_identifier in available_client_ids:
new_plex_clients.append(new_client) # Avoid using session if already added as a device.
else: _LOGGER.debug("Skipping session, device exists: %s",
_LOGGER.debug("Refreshing session: %s", machine_identifier) machine_identifier)
plex_clients[machine_identifier].refresh(None, session) continue
if (machine_identifier not in plex_clients
and machine_identifier is not None):
new_client = PlexClient(
config, player, session, plex_sessions, update_devices)
plex_clients[machine_identifier] = new_client
_LOGGER.debug("New session: %s", machine_identifier)
new_plex_clients.append(new_client)
else:
_LOGGER.debug("Refreshing session: %s", machine_identifier)
plex_clients[machine_identifier].refresh(None, session)
clients_to_remove = [] clients_to_remove = []
for client in plex_clients.values(): for client in plex_clients.values():
@ -219,25 +227,6 @@ def setup_plexserver(
if new_plex_clients: if new_plex_clients:
add_entities_callback(new_plex_clients) add_entities_callback(new_plex_clients)
@util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)
def update_sessions():
"""Update the sessions objects."""
try:
sessions = plexserver.sessions()
except plexapi.exceptions.BadRequest:
_LOGGER.exception("Error listing plex sessions")
return
except requests.exceptions.RequestException as ex:
_LOGGER.warning(
"Could not connect to plex server at http://%s (%s)", host, ex)
return
plex_sessions.clear()
for session in sessions:
for player in session.players:
plex_sessions[player.machineIdentifier] = session, player
update_sessions()
update_devices() update_devices()
@ -285,7 +274,7 @@ class PlexClient(MediaPlayerDevice):
"""Representation of a Plex device.""" """Representation of a Plex device."""
def __init__(self, config, device, session, plex_sessions, def __init__(self, config, device, session, plex_sessions,
update_devices, update_sessions): update_devices):
"""Initialize the Plex device.""" """Initialize the Plex device."""
self._app_name = '' self._app_name = ''
self._device = None self._device = None
@ -309,7 +298,6 @@ class PlexClient(MediaPlayerDevice):
self.config = config self.config = config
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
# General # General
self._media_content_id = None self._media_content_id = None
self._media_content_rating = None self._media_content_rating = None
@ -575,7 +563,6 @@ class PlexClient(MediaPlayerDevice):
def update(self): def update(self):
"""Get the latest details.""" """Get the latest details."""
self.update_devices(no_throttle=True) self.update_devices(no_throttle=True)
self.update_sessions(no_throttle=True)
@property @property
def _active_media_plexapi_type(self): def _active_media_plexapi_type(self):