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.')