From 5245db81eb7974e8cb6e9fbf772cb438f3951e45 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Sat, 19 Aug 2023 13:19:14 -0400 Subject: [PATCH] feat(alert): add option to use custom socket --- plexapi/alert.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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):