mirror of
https://github.com/pkkid/python-plexapi
synced 2025-02-16 21:08:27 +00:00
Merge pull request #408 from zSeriesGuy/Update-websockets-client
Update websockets client
This commit is contained in:
commit
6987182774
3 changed files with 23 additions and 11 deletions
|
@ -6,9 +6,9 @@ from plexapi import log
|
||||||
|
|
||||||
|
|
||||||
class AlertListener(threading.Thread):
|
class AlertListener(threading.Thread):
|
||||||
""" Creates a websocket connection to the PlexServer to optionally recieve alert notifications.
|
""" Creates a websocket connection to the PlexServer to optionally receive alert notifications.
|
||||||
These often include messages from Plex about media scans as well as updates to currently running
|
These often include messages from Plex about media scans as well as updates to currently running
|
||||||
Transcode Sessions. This class implements threading.Thread, therfore to start monitoring
|
Transcode Sessions. This class implements threading.Thread, therefore to start monitoring
|
||||||
alerts you must call .start() on the object once it's created. When calling
|
alerts you must call .start() on the object once it's created. When calling
|
||||||
`PlexServer.startAlertListener()`, the thread will be started for you.
|
`PlexServer.startAlertListener()`, the thread will be started for you.
|
||||||
|
|
||||||
|
@ -26,9 +26,9 @@ class AlertListener(threading.Thread):
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
server (:class:`~plexapi.server.PlexServer`): PlexServer this listener is connected to.
|
server (:class:`~plexapi.server.PlexServer`): PlexServer this listener is connected to.
|
||||||
callback (func): Callback function to call on recieved messages. The callback function
|
callback (func): Callback function to call on received messages. The callback function
|
||||||
will be sent a single argument 'data' which will contain a dictionary of data
|
will be sent a single argument 'data' which will contain a dictionary of data
|
||||||
recieved from the server. :samp:`def my_callback(data): ...`
|
received from the server. :samp:`def my_callback(data): ...`
|
||||||
"""
|
"""
|
||||||
key = '/:/websockets/notifications'
|
key = '/:/websockets/notifications'
|
||||||
|
|
||||||
|
@ -48,15 +48,21 @@ class AlertListener(threading.Thread):
|
||||||
self._ws.run_forever()
|
self._ws.run_forever()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
""" Stop the AlertListener thread. Once the notifier is stopped, it cannot be diractly
|
""" Stop the AlertListener thread. Once the notifier is stopped, it cannot be directly
|
||||||
started again. You must call :func:`plexapi.server.PlexServer.startAlertListener()`
|
started again. You must call :func:`plexapi.server.PlexServer.startAlertListener()`
|
||||||
from a PlexServer instance.
|
from a PlexServer instance.
|
||||||
"""
|
"""
|
||||||
log.info('Stopping AlertListener.')
|
log.info('Stopping AlertListener.')
|
||||||
self._ws.close()
|
self._ws.close()
|
||||||
|
|
||||||
def _onMessage(self, ws, message):
|
def _onMessage(self, *args):
|
||||||
""" Called when websocket message is recieved. """
|
""" Called when websocket message is received.
|
||||||
|
In earlier releases, websocket-client returned a tuple of two parameters: a websocket.app.WebSocketApp object
|
||||||
|
and the message as a STR. Current releases appear to only return the message.
|
||||||
|
We are assuming the last argument in the tuple is the message.
|
||||||
|
This is to support compatibility with current and previous releases of websocket-client.
|
||||||
|
"""
|
||||||
|
message = args[-1]
|
||||||
try:
|
try:
|
||||||
data = json.loads(message)['NotificationContainer']
|
data = json.loads(message)['NotificationContainer']
|
||||||
log.debug('Alert: %s %s %s', *data)
|
log.debug('Alert: %s %s %s', *data)
|
||||||
|
@ -65,6 +71,12 @@ class AlertListener(threading.Thread):
|
||||||
except Exception as err: # pragma: no cover
|
except Exception as err: # pragma: no cover
|
||||||
log.error('AlertListener Msg Error: %s', err)
|
log.error('AlertListener Msg Error: %s', err)
|
||||||
|
|
||||||
def _onError(self, ws, err): # pragma: no cover
|
def _onError(self, *args): # pragma: no cover
|
||||||
""" Called when websocket error is recieved. """
|
""" Called when websocket error is received.
|
||||||
|
In earlier releases, websocket-client returned a tuple of two parameters: a websocket.app.WebSocketApp object
|
||||||
|
and the error. Current releases appear to only return the error.
|
||||||
|
We are assuming the last argument in the tuple is the message.
|
||||||
|
This is to support compatibility with current and previous releases of websocket-client.
|
||||||
|
"""
|
||||||
|
err = args[-1]
|
||||||
log.error('AlertListener Error: %s' % err)
|
log.error('AlertListener Error: %s' % err)
|
||||||
|
|
|
@ -4,4 +4,4 @@
|
||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
requests
|
requests
|
||||||
tqdm
|
tqdm
|
||||||
websocket-client==0.48.0
|
websocket-client
|
||||||
|
|
|
@ -14,7 +14,7 @@ requests
|
||||||
sphinx
|
sphinx
|
||||||
sphinxcontrib-napoleon
|
sphinxcontrib-napoleon
|
||||||
tqdm
|
tqdm
|
||||||
websocket-client==0.48.0
|
websocket-client
|
||||||
|
|
||||||
# Installing sphinx-rtd-theme directly from github above is used until a point release
|
# Installing sphinx-rtd-theme directly from github above is used until a point release
|
||||||
# above 0.4.3 is released. https://github.com/readthedocs/sphinx_rtd_theme/issues/739
|
# above 0.4.3 is released. https://github.com/readthedocs/sphinx_rtd_theme/issues/739
|
||||||
|
|
Loading…
Add table
Reference in a new issue