diff --git a/data/interfaces/default/settings.html b/data/interfaces/default/settings.html index aee5e3b9..d1195d49 100644 --- a/data/interfaces/default/settings.html +++ b/data/interfaces/default/settings.html @@ -666,12 +666,7 @@
-
- - - - -
+

@@ -1937,11 +1932,11 @@ $(document).ready(function() { data: { hostname: pms_ip, port: pms_port, - identifier: pms_identifier, ssl: pms_ssl, remote: pms_is_remote, manual: pms_url_manual, - get_url: serverChanged + get_url: true, + test_websocket: true }, cache: true, async: true, @@ -1954,15 +1949,23 @@ $(document).ready(function() { var result = xhr; var identifier = result.identifier; var url = result.url; + var ws = result.ws; if (identifier) { $("#pms_identifier").val(identifier); + if (url) { $("#pms_url").val(url); } - $("#pms_verify").html('').fadeIn('fast'); - $("#pms_ip_group").removeClass("has-error"); - serverChanged = false; + if (ws === false) { + $("#pms_verify").html('').fadeIn('fast'); + $("#pms_ip_group").addClass("has-error"); + showMsg(' Server found but unable to connect websocket.
Check the logs for errors.', false, true, 5000, true) + } else { + $("#pms_verify").html('').fadeIn('fast'); + $("#pms_ip_group").removeClass("has-error"); + serverChanged = false; + } if (_callback) { _callback(); @@ -1990,13 +1993,6 @@ $(document).ready(function() { $("#pms_web_url").val(pms_web_url || 'https://app.plex.tv/desktop'); } - $('#test_pms_url_button').on('click', function(){ - var pms_url = $.trim($("#pms_url").val()); - if (pms_url.startsWith('http')) { - window.open(pms_url + '/web', '_blank'); - } - }); - $('#test_pms_web_button').on('click', function(){ var pms_web_url = $.trim($("#pms_web_url").val()); window.open(pms_web_url, '_blank'); diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 3af68ea4..282e5517 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -27,6 +27,8 @@ from hashing_passwords import make_hash from mako.lookup import TemplateLookup from mako import exceptions +import websocket + import plexpy import activity_pinger import common @@ -3463,7 +3465,7 @@ class WebInterface(object): @requireAuth(member_of("admin")) @addtoapi() def get_server_id(self, hostname=None, port=None, identifier=None, ssl=0, remote=0, manual=0, - get_url=False, **kwargs): + get_url=False, test_websocket=False, **kwargs): """ Get the PMS server identifier. ``` @@ -3519,6 +3521,23 @@ class WebInterface(object): pms_url_manual=manual, pms_identifier=identifier) result['url'] = server['pms_url'] + result['ws'] = None + + if test_websocket == 'true': + # Quick test websocket connection + ws_url = result['url'].replace('http', 'ws', 1) + '/:/websockets/notifications' + header = ['X-Plex-Token: %s' % plexpy.CONFIG.PMS_TOKEN] + + logger.debug("Testing websocket connection...") + try: + test_ws = websocket.create_connection(ws_url, header=header) + test_ws.close() + logger.debug("Websocket test connection successful.") + result['ws'] = True + except (websocket.WebSocketException, IOError, Exception) as e: + logger.error("Websocket test connection failed: %s" % e) + result['ws'] = False + return result else: logger.warn('Unable to retrieve the PMS identifier.')