From 78ba286e921209d68fb77dbed0b6199e0502db01 Mon Sep 17 00:00:00 2001 From: faush01 Date: Fri, 9 Jan 2015 12:00:19 +1100 Subject: [PATCH] fixes for cold start setting a server address should work without restart --- resources/lib/ArtworkLoader.py | 7 ++- resources/lib/DownloadUtils.py | 4 +- resources/lib/WebSocketClient.py | 104 +++++++++++++------------------ 3 files changed, 48 insertions(+), 67 deletions(-) diff --git a/resources/lib/ArtworkLoader.py b/resources/lib/ArtworkLoader.py index b83483b..a8659f9 100644 --- a/resources/lib/ArtworkLoader.py +++ b/resources/lib/ArtworkLoader.py @@ -16,9 +16,6 @@ import random import time from DownloadUtils import DownloadUtils -#define our global download utils -downloadUtils = DownloadUtils() - class ArtworkRotationThread(threading.Thread): item_art_links = {} @@ -298,6 +295,8 @@ class ArtworkRotationThread(threading.Thread): mb3Port = addonSettings.getSetting('port') userName = addonSettings.getSetting('username') + downloadUtils = DownloadUtils() + # get the user ID userid = downloadUtils.getUserId() self.logMsg("updateCollectionArtLinks UserID : " + userid) @@ -512,6 +511,8 @@ class ArtworkRotationThread(threading.Thread): mb3Port = addonSettings.getSetting('port') userName = addonSettings.getSetting('username') + downloadUtils = DownloadUtils() + userid = downloadUtils.getUserId() itemUrl = "http://" + mb3Host + ":" + mb3Port + "/mediabrowser/Users/" + userid + "/Items/" + id + "?Fields=ParentId&format=json" diff --git a/resources/lib/DownloadUtils.py b/resources/lib/DownloadUtils.py index 30390f4..e9e8445 100644 --- a/resources/lib/DownloadUtils.py +++ b/resources/lib/DownloadUtils.py @@ -128,7 +128,7 @@ class DownloadUtils(): jsonData = None try: - jsonData = self.downloadUrl(host + ":" + port + "/mediabrowser/Users/Public?format=json", authenticate=False) + jsonData = self.downloadUrl(host + ":" + port + "/mediabrowser/Users/Public?format=json", suppress=True, authenticate=False) except Exception, msg: error = "Get User unable to connect to " + host + ":" + port + " : " + str(msg) xbmc.log (error) @@ -201,7 +201,7 @@ class DownloadUtils(): messageData = "username=" + self.addonSettings.getSetting('username') + "&password=" + sha1.hexdigest() - resp = self.downloadUrl(url, postBody=messageData, type="POST", authenticate=False) + resp = self.downloadUrl(url, postBody=messageData, type="POST", suppress=True, authenticate=False) accessToken = None try: diff --git a/resources/lib/WebSocketClient.py b/resources/lib/WebSocketClient.py index 10e10c3..0602d7d 100644 --- a/resources/lib/WebSocketClient.py +++ b/resources/lib/WebSocketClient.py @@ -178,7 +178,7 @@ class WebSocketThread(threading.Thread): messageString = json.dumps(messageData) self.logMsg("Opened : " + str(messageString)) ws.send(messageString) - ''' + downloadUtils = DownloadUtils() # get session ID @@ -202,76 +202,56 @@ class WebSocketThread(threading.Thread): stringdata = json.dumps(postData) self.logMsg("Capabilities URL : " + url); self.logMsg("Capabilities Data : " + stringdata) - #downloadUtils.downloadUrl(url, postBody=stringdata, type="POST") - ''' + downloadUtils.downloadUrl(url, postBody=stringdata, type="POST") except Exception, e: self.logMsg("Exception : " + str(e), level=0) - def getWebSocketPort(self, host, port): - - userUrl = "http://" + host + ":" + port + "/mediabrowser/System/Info?format=json" - - try: - requesthandle = urllib.urlopen(userUrl, proxies={}) - jsonData = requesthandle.read() - requesthandle.close() - except Exception, e: - self.logMsg("WebSocketThread getWebSocketPort urlopen : " + str(e) + " (" + userUrl + ")", level=0) - return -1 - - try: - result = json.loads(jsonData) - except Exception, e: - self.logMsg("WebSocketThread getWebSocketPort jsonload : " + str(e) + " (" + jsonData + ")", level=2) - return -1 - - wsPort = result.get("WebSocketPortNumber") - if(wsPort != None): - return wsPort - else: - return -1 - def run(self): - addonSettings = xbmcaddon.Addon(id='plugin.video.mbcon') - mb3Host = addonSettings.getSetting('ipaddress') - mb3Port = addonSettings.getSetting('port') + while(self.keepRunning and xbmc.abortRequested == False): - if(self.logLevel >= 1): - websocket.enableTrace(True) - - #wsPort = self.getWebSocketPort(mb3Host, mb3Port); - wsPort = mb3Port - self.logMsg("WebSocketPortNumber = " + str(wsPort)) - #if(wsPort == -1): - # self.logMsg("Could not retrieve WebSocket port, can not run WebScoket Client") - # return + addonSettings = xbmcaddon.Addon(id='plugin.video.mbcon') + mb3Host = addonSettings.getSetting('ipaddress') + mb3Port = addonSettings.getSetting('port') - downloadUtils = DownloadUtils() - authHeaders = downloadUtils.getAuthHeader() - flatHeaders = [] - for header in authHeaders: - flatHeaders.append(header + ": " + authHeaders[header]) - self.logMsg("Flat Header : " + str(flatHeaders)) - - # Make a call to /System/Info. WebSocketPortNumber is the port hosting the web socket. - webSocketUrl = "ws://" + mb3Host + ":" + str(wsPort) + "/mediabrowser" - self.logMsg("WebSocket URL : " + webSocketUrl) - self.client = websocket.WebSocketApp(webSocketUrl, - header = flatHeaders, - on_message = self.on_message, - on_error = self.on_error, - on_close = self.on_close) - - self.client.on_open = self.on_open - - while(self.keepRunning): - self.logMsg("Client Starting") - self.client.run_forever() - if(self.keepRunning): + if(self.logLevel >= 1): + websocket.enableTrace(True) + + if(mb3Host != None and len(mb3Host) > 0): + + try: + + wsPort = mb3Port + self.logMsg("WebSocketPortNumber = " + str(wsPort)) + + downloadUtils = DownloadUtils() + authHeaders = downloadUtils.getAuthHeader() + flatHeaders = [] + for header in authHeaders: + flatHeaders.append(header + ": " + authHeaders[header]) + self.logMsg("Flat Header : " + str(flatHeaders)) + + # Make a call to /System/Info. WebSocketPortNumber is the port hosting the web socket. + webSocketUrl = "ws://" + mb3Host + ":" + str(wsPort) + "/mediabrowser" + self.logMsg("WebSocket URL : " + webSocketUrl) + self.client = websocket.WebSocketApp(webSocketUrl, + header = flatHeaders, + on_message = self.on_message, + on_error = self.on_error, + on_close = self.on_close) + + self.client.on_open = self.on_open + + self.logMsg("Client Starting") + if(self.keepRunning): + self.client.run_forever() + except: + self.logMsg("Error thrown in Web Socket Setup") + + if(self.keepRunning and xbmc.abortRequested == False): self.logMsg("Client Needs To Restart") - xbmc.sleep(10000) + xbmc.sleep(5000) self.logMsg("Thread Exited")