Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion homeassistant/components/plex/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ async def async_setup_entry(hass, entry):
unsub = async_dispatcher_connect(
hass,
PLEX_UPDATE_PLATFORMS_SIGNAL.format(server_id),
plex_server.update_platforms,
plex_server.async_update_platforms,
)
hass.data[PLEX_DOMAIN][DISPATCHERS].setdefault(server_id, [])
hass.data[PLEX_DOMAIN][DISPATCHERS][server_id].append(unsub)
Expand Down
8 changes: 0 additions & 8 deletions homeassistant/components/plex/media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,6 @@ def set_volume_level(self, volume):
if self.device and "playback" in self._device_protocol_capabilities:
self.device.setVolume(int(volume * 100), self._active_media_plexapi_type)
self._volume_level = volume # store since we can't retrieve
self.plex_server.update_platforms()

@property
def volume_level(self):
Expand Down Expand Up @@ -533,31 +532,26 @@ def media_play(self):
"""Send play command."""
if self.device and "playback" in self._device_protocol_capabilities:
self.device.play(self._active_media_plexapi_type)
self.plex_server.update_platforms()

def media_pause(self):
"""Send pause command."""
if self.device and "playback" in self._device_protocol_capabilities:
self.device.pause(self._active_media_plexapi_type)
self.plex_server.update_platforms()

def media_stop(self):
"""Send stop command."""
if self.device and "playback" in self._device_protocol_capabilities:
self.device.stop(self._active_media_plexapi_type)
self.plex_server.update_platforms()

def media_next_track(self):
"""Send next track command."""
if self.device and "playback" in self._device_protocol_capabilities:
self.device.skipNext(self._active_media_plexapi_type)
self.plex_server.update_platforms()

def media_previous_track(self):
"""Send previous track command."""
if self.device and "playback" in self._device_protocol_capabilities:
self.device.skipPrevious(self._active_media_plexapi_type)
self.plex_server.update_platforms()

def play_media(self, media_type, media_id, **kwargs):
"""Play a piece of media."""
Expand Down Expand Up @@ -594,8 +588,6 @@ def play_media(self, media_type, media_id, **kwargs):
except requests.exceptions.ConnectTimeout:
_LOGGER.error("Timed out playing on %s", self.name)

self.plex_server.update_platforms()

def _get_music_media(self, library_name, src):
"""Find music media and return a Plex media object."""
artist_name = src["artist_name"]
Expand Down
21 changes: 13 additions & 8 deletions homeassistant/components/plex/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from homeassistant.components.media_player import DOMAIN as MP_DOMAIN
from homeassistant.const import CONF_TOKEN, CONF_URL, CONF_VERIFY_SSL
from homeassistant.helpers.dispatcher import dispatcher_send
from homeassistant.helpers.dispatcher import async_dispatcher_send, dispatcher_send
from homeassistant.helpers.event import async_call_later

from .const import (
Expand Down Expand Up @@ -51,10 +51,10 @@ async def call_later_listener(self, _):
"""Handle call_later callback."""
nonlocal unsub
unsub = None
await self.hass.async_add_executor_job(func, self)
await func(self)

@wraps(func)
def wrapper(self):
async def wrapper(self):
"""Schedule async callback."""
nonlocal unsub
if unsub:
Expand Down Expand Up @@ -186,8 +186,12 @@ def refresh_entity(self, machine_identifier, device, session):
session,
)
Comment thread
jjlawren marked this conversation as resolved.

def _fetch_platform_data(self):
"""Fetch all data from the Plex server in a single method."""
return (self._plex_server.clients(), self._plex_server.sessions())

@debounce
def update_platforms(self):
async def async_update_platforms(self):
"""Update the platform entities."""
_LOGGER.debug("Updating devices")

Expand All @@ -209,8 +213,9 @@ def update_platforms(self):
monitored_users.add(new_user)

try:
devices = self._plex_server.clients()
sessions = self._plex_server.sessions()
devices, sessions = await self.hass.async_add_executor_job(
self._fetch_platform_data
)
except (
plexapi.exceptions.BadRequest,
requests.exceptions.RequestException,
Expand Down Expand Up @@ -271,13 +276,13 @@ def update_platforms(self):
self._known_idle.add(client_id)

if new_entity_configs:
dispatcher_send(
async_dispatcher_send(
self.hass,
PLEX_NEW_MP_SIGNAL.format(self.machine_identifier),
new_entity_configs,
)

dispatcher_send(
async_dispatcher_send(
self.hass,
PLEX_UPDATE_SENSOR_SIGNAL.format(self.machine_identifier),
sessions,
Expand Down