diff --git a/plexapi/alert.py b/plexapi/alert.py index 79ecc4453..fdf8ac105 100644 --- a/plexapi/alert.py +++ b/plexapi/alert.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- import json +import socket +from typing import Callable import threading from plexapi import log @@ -32,15 +34,17 @@ class AlertListener(threading.Thread): callbackError (func): Callback function to call on errors. The callback function will be sent a single argument 'error' which will contain the Error object. :samp:`def my_callback(error): ...` + ws_socket (socket): Socket to use for the connection. If not specified, a new socket will be created. """ key = '/:/websockets/notifications' - def __init__(self, server, callback=None, callbackError=None): + def __init__(self, server, callback: Callable = None, callbackError: Callable = None, ws_socket: socket = None): super(AlertListener, self).__init__() self.daemon = True self._server = server self._callback = callback self._callbackError = callbackError + self._socket = ws_socket self._ws = None def run(self): @@ -52,8 +56,13 @@ def run(self): # create the websocket connection url = self._server.url(self.key, includeToken=True).replace('http', 'ws') log.info('Starting AlertListener: %s', url) - self._ws = websocket.WebSocketApp(url, on_message=self._onMessage, - on_error=self._onError) + + if self._socket: + self._ws = websocket.create_connection(url=url, on_message=self._onMessage, on_error=self._onError, + socket=self._socket) + else: + self._ws = websocket.WebSocketApp(url, on_message=self._onMessage, on_error=self._onError) + self._ws.run_forever() def stop(self):