Revert "Added server online check"

This reverts commit 9020c1c908.
This commit is contained in:
angelblue05 2015-04-26 18:15:40 -05:00
parent 1e089ba1d4
commit fb006bb5f8
4 changed files with 126 additions and 190 deletions

View file

@ -71,7 +71,7 @@ class DownloadUtils():
url = "{server}/mediabrowser/Sessions?DeviceId=%s&format=json" % deviceId url = "{server}/mediabrowser/Sessions?DeviceId=%s&format=json" % deviceId
result = self.downloadUrl(url) result = self.downloadUrl(url)
# sessionId result # sessionId result
self.logMsg("Session result: %s" % result, 2) self.logMsg("Session result: %s" % result, 1)
self.sessionId = result[0][u'Id'] self.sessionId = result[0][u'Id']
# Settings for capabilities # Settings for capabilities
@ -152,51 +152,52 @@ class DownloadUtils():
timeout = self.timeout timeout = self.timeout
default_link = "" default_link = ""
try: # If user is authenticated
if (authenticate):
# Get requests session
s = self.s
# Replace for the real values and append api_key
url = url.replace("{server}", self.server, 1)
url = url.replace("{UserId}", self.userId, 1)
url = "%s&api_key=%s" % (url, self.token)
self.logMsg("URL: %s" % url, 2)
# Prepare request
if type == "GET":
r = s.get(url, params=postBody, timeout=timeout)
elif type == "POST":
r = s.post(url, params=postBody, timeout=timeout)
elif type == "DELETE":
r = s.delete(url, params=postBody, timeout=timeout)
# If user is authenticated # If user is not authenticated
if (authenticate): elif not authenticate:
# Get requests session
s = self.s self.logMsg("URL: %s" % url, 1)
# Replace for the real values and append api_key header = self.getHeader(authenticate=False)
url = url.replace("{server}", self.server, 1) verifyssl = False
url = url.replace("{UserId}", self.userId, 1)
url = "%s&api_key=%s" % (url, self.token)
self.logMsg("URL: %s" % url, 2)
# Prepare request
if type == "GET":
r = s.get(url, params=postBody, timeout=timeout)
elif type == "POST":
r = s.post(url, params=postBody, timeout=timeout)
elif type == "DELETE":
r = s.delete(url, params=postBody, timeout=timeout)
# If user is not authenticated # If user enables ssl verification
elif not authenticate: try:
verifyssl = self.sslverify
self.logMsg("URL: %s" % url, 2) except AttributeError:
header = self.getHeader(authenticate=False) pass
verifyssl = False
# Prepare request
# If user enables ssl verification if type == "GET":
try: r = requests.get(url, params=postBody, headers=header, timeout=timeout, verify=verifyssl)
verifyssl = self.sslverify elif type == "POST":
except AttributeError: r = requests.post(url, params=postBody, headers=header, timeout=timeout, verify=verifyssl)
pass
# Prepare request
if type == "GET":
r = requests.get(url, params=postBody, headers=header, timeout=timeout, verify=verifyssl)
elif type == "POST":
r = requests.post(url, params=postBody, headers=header, timeout=timeout, verify=verifyssl)
# Process the response # Process the response
try:
r.raise_for_status()
if r.status_code == 204: if r.status_code == 204:
# No body in the response # No response in body
self.logMsg("====== 204 Success ======", 2) self.logMsg("====== 204 Success ======", 2)
return default_link return default_link
# Response code 200
elif r.status_code == requests.codes.ok: elif r.status_code == requests.codes.ok:
try: try:
# UTF-8 - JSON object # UTF-8 - JSON object
@ -205,35 +206,21 @@ class DownloadUtils():
return r return r
except: except:
self.logMsg("Unable to convert the response for: %s" % url, 1) self.logMsg("Unable to convert the response for: %s" % url, 1)
else:
r.raise_for_status()
return default_link return default_link
# TO REVIEW EXCEPTIONS # TO REVIEW EXCEPTIONS
except requests.exceptions.ConnectionError as e: except requests.exceptions.ConnectionError as e:
# Addon is already aware of status self.logMsg("Server unreachable at: %s" % url, 0)
if WINDOW.getProperty("Server_online") == "true": self.logMsg(e, 1)
self.logMsg("Server unreachable at: %s" % url, 0)
self.logMsg(e, 2)
WINDOW.setProperty("Server_online", "false")
pass
except requests.exceptions.ConnectTimeout as e: except requests.exceptions.ConnectTimeout as e:
self.logMsg("Server timeout at: %s" % url, 0) self.logMsg("Server timeout at: %s" % url, 0)
self.logMsg(e, 2) self.logMsg(e, 1)
except requests.exceptions.HTTPError as e: except requests.exceptions.HTTPError as e:
if (r.status_code == 301) or (r.status_code == 302): if r.status_code == 401:
# Redirects
pass
elif (r.status_code == 400):
# Bad requests
pass
elif (r.status_code == 401):
# Unauthorized # Unauthorized
status = WINDOW.getProperty("Server_status") status = WINDOW.getProperty("Server_status")
if (status == "401") or (status == "Auth"): if (status == "401") or (status == "Auth"):
@ -243,16 +230,19 @@ class DownloadUtils():
WINDOW.setProperty("Server_status", "401") WINDOW.setProperty("Server_status", "401")
self.logMsg("HTTP Error: %s" % e, 0) self.logMsg("HTTP Error: %s" % e, 0)
elif (r.status_code == 500): elif (r.status_code == 301) or (r.status_code == 302):
# Out of memory # Redirects
pass
elif r.status_code == 400:
# Bad requests
pass pass
except requests.exceptions.SSLError as e: except requests.exceptions.SSLError as e:
self.logMsg("Invalid SSL certificate for: %s" % url, 0) self.logMsg("Invalid SSL certificate for: %s" % url, 0)
self.logMsg(e, 2) self.logMsg(e, 1)
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:
self.logMsg("Unknown error connecting to: %s" % url, 0) self.logMsg("Unknown error connecting to: %s" % url, 0)
self.logMsg(e, 2) self.logMsg(e, 1)
return default_link return default_link

View file

@ -46,7 +46,6 @@ class UserClient(threading.Thread):
self.__dict__ = self._shared_state self.__dict__ = self._shared_state
self.className = self.__class__.__name__ self.className = self.__class__.__name__
self.__language__ = self.addon.getLocalizedString
threading.Thread.__init__(self, *args) threading.Thread.__init__(self, *args)
@ -162,9 +161,6 @@ class UserClient(threading.Thread):
if (result != ""): if (result != ""):
users = result users = result
else:
# Server connection failed
return False
return users return users
@ -229,7 +225,10 @@ class UserClient(threading.Thread):
users = self.getPublicUsers() users = self.getPublicUsers()
password = "" password = ""
'''if users == "":
self.WINDOW.setProperty("Server_status", "Stop")
return'''
# Find user in list # Find user in list
for user in users: for user in users:
name = user[u'Name'] name = user[u'Name']

View file

@ -18,7 +18,6 @@ from DownloadUtils import DownloadUtils
from PlaybackUtils import PlaybackUtils from PlaybackUtils import PlaybackUtils
from LibrarySync import LibrarySync from LibrarySync import LibrarySync
from WriteKodiDB import WriteKodiDB from WriteKodiDB import WriteKodiDB
from UserClient import UserClient
import Utils as utils import Utils as utils
pendingUserDataList = [] pendingUserDataList = []
@ -31,8 +30,6 @@ class WebSocketThread(threading.Thread):
logLevel = 0 logLevel = 0
client = None client = None
keepRunning = True keepRunning = True
uc = UserClient()
def __init__(self, *args): def __init__(self, *args):
@ -249,7 +246,7 @@ class WebSocketThread(threading.Thread):
LibrarySync().updatePlayCount(itemId) LibrarySync().updatePlayCount(itemId)
def on_error(self, ws, error): def on_error(self, ws, error):
self.logMsg("Error : " + str(error), 2) self.logMsg("Error : " + str(error))
#raise #raise
def on_close(self, ws): def on_close(self, ws):
@ -301,7 +298,7 @@ class WebSocketThread(threading.Thread):
username = WINDOW.getProperty('currUser') username = WINDOW.getProperty('currUser')
server = WINDOW.getProperty('server%s' % username) server = WINDOW.getProperty('server%s' % username)
host = WINDOW.getProperty('server_%s' % username) host = WINDOW.getProperty('server_%s' % username)
if(self.logLevel >= 1): if(self.logLevel >= 1):
websocket.enableTrace(True) websocket.enableTrace(True)
''' '''
@ -326,19 +323,12 @@ class WebSocketThread(threading.Thread):
self.client.on_open = self.on_open self.client.on_open = self.on_open
while not self.KodiMonitor.abortRequested(): while not self.KodiMonitor.abortRequested():
self.logMsg("Client Starting")
self.client.run_forever() self.client.run_forever()
if(self.keepRunning):
if (self.keepRunning): self.logMsg("Client Needs To Restart")
# Server is not online, suppress future warning
if WINDOW.getProperty("Server_online") == "true":
self.logMsg("Server is unreachable.", 1)
WINDOW.setProperty("Server_online", "false")
xbmcgui.Dialog().notification("Error connecting", "Server is unreachable.")
if self.KodiMonitor.waitForAbort(5): if self.KodiMonitor.waitForAbort(5):
break break
self.logMsg("Thread Exited") self.logMsg("Thread Exited")

View file

@ -1,7 +1,6 @@
import xbmcaddon import xbmcaddon
import xbmc import xbmc
import xbmcgui import xbmcgui
import os import os
import threading import threading
import json import json
@ -31,28 +30,25 @@ class Service():
clientInfo = ClientInformation() clientInfo = ClientInformation()
addonName = clientInfo.getAddonName() addonName = clientInfo.getAddonName()
WINDOW = xbmcgui.Window(10000) className = None
warn_auth = True
server_online = True
def __init__(self, *args ): def __init__(self, *args ):
self.KodiMonitor = KodiMonitor.Kodi_Monitor() self.KodiMonitor = KodiMonitor.Kodi_Monitor()
self.className = self.__class__.__name__
addonName = self.addonName addonName = self.addonName
self.className = self.__class__.__name__
self.logMsg("Starting Monitor", 0) self.logMsg("Starting Monitor", 0)
self.logMsg("======== START %s ========" % addonName, 0) self.logMsg("======== START %s ========" % addonName, 0)
self.logMsg("KODI Version: %s" % xbmc.getInfoLabel("System.BuildVersion"), 0) self.logMsg("KODI Version: %s" % xbmc.getInfoLabel("System.BuildVersion"), 0)
self.logMsg("%s Version: %s" % (addonName, self.clientInfo.getVersion()), 0) self.logMsg("%s Version: %s" % (addonName, self.clientInfo.getVersion()), 0)
pass
def logMsg(self, msg, lvl=1): def logMsg(self, msg, lvl=1):
utils.logMsg("%s %s" % (self.addonName, self.className), msg, int(lvl)) utils.logMsg("%s %s" % (self.addonName, self.className), str(msg), int(lvl))
def ServiceEntryPoint(self): def ServiceEntryPoint(self):
WINDOW = self.WINDOW
ConnectionManager().checkServer() ConnectionManager().checkServer()
lastProgressUpdate = datetime.today() lastProgressUpdate = datetime.today()
@ -69,116 +65,77 @@ class Service():
ws = WebSocketThread() ws = WebSocketThread()
lastFile = None lastFile = None
# Main program
while not self.KodiMonitor.abortRequested(): while not self.KodiMonitor.abortRequested():
if self.KodiMonitor.waitForAbort(1): if self.KodiMonitor.waitForAbort(1):
# Abort was requested while waiting. We should exit # Abort was requested while waiting. We should exit
break break
if (self.newUserClient == None): if xbmc.Player().isPlaying():
self.newUserClient = "Started" try:
user.start() playTime = xbmc.Player().getTime()
totalTime = xbmc.Player().getTotalTime()
# isServerOnline verification currentFile = xbmc.Player().getPlayingFile()
if WINDOW.getProperty("Server_online") == "true":
# Server is online, proceed. if(player.played_information.get(currentFile) != None):
player.played_information[currentFile]["currentPosition"] = playTime
if xbmc.Player().isPlaying():
try: # send update
playTime = xbmc.Player().getTime() td = datetime.today() - lastProgressUpdate
totalTime = xbmc.Player().getTotalTime() secDiff = td.seconds
currentFile = xbmc.Player().getPlayingFile() if(secDiff > 10):
try:
if(player.played_information.get(currentFile) != None): player.reportPlayback()
player.played_information[currentFile]["currentPosition"] = playTime except Exception, msg:
xbmc.log("MB3 Sync Service -> Exception reporting progress : " + msg)
# send update pass
td = datetime.today() - lastProgressUpdate lastProgressUpdate = datetime.today()
secDiff = td.seconds # only try autoplay when there's 20 seconds or less remaining and only once!
if(secDiff > 10): if (totalTime - playTime <= 20 and (lastFile==None or lastFile!=currentFile)):
try: lastFile = currentFile
player.reportPlayback() player.autoPlayPlayback()
except Exception, msg:
self.logMsg("Exception reporting progress: %s" % msg, 1) except Exception, e:
pass xbmc.log("MB3 Sync Service -> Exception in Playback Monitor Service : " + str(e))
lastProgressUpdate = datetime.today() pass
# only try autoplay when there's 20 seconds or less remaining and only once!
if (totalTime - playTime <= 20 and (lastFile==None or lastFile!=currentFile)):
lastFile = currentFile
player.autoPlayPlayback()
except Exception, e:
self.logMsg("Exception in Playback Monitor Service : " + str(e), 1)
pass
else:
# background worker for database sync
if (user.currUser != None):
# Correctly launch the websocket, if user manually launches the add-on
if (self.newWebSocketThread == None):
self.newWebSocketThread = "Started"
ws.start()
#full sync
if (startupComplete == False):
self.logMsg("Doing_Db_Sync: syncDatabase (Started)", 1)
libSync = librarySync.syncDatabase()
self.logMsg("Doing_Db_Sync: syncDatabase (Finished) " + str(libSync), 1)
countSync = librarySync.updatePlayCounts()
self.logMsg("Doing_Db_Sync: updatePlayCounts (Finished) " + str(countSync), 1)
# Force refresh newly set thumbnails
xbmc.executebuiltin("UpdateLibrary(video)")
if (libSync and countSync):
startupComplete = True
else:
if self.KodiMonitor.waitForAbort(10):
# Abort was requested while waiting. We should exit
break
WebSocketThread().processPendingActions()
else:
# Supress future warnings
if self.warn_auth:
self.logMsg("Not authenticated yet.", 1)
self.warn_auth = False
else: else:
# Wait until server becomes online or shut down is requested if (self.newUserClient == None):
while not self.KodiMonitor.abortRequested(): self.newUserClient = "Started"
user.start()
# background worker for database sync
if (user.currUser != None):
# Correctly launch the websocket, if user manually launches the add-on
if (self.newWebSocketThread == None):
self.newWebSocketThread = "Started"
ws.start()
#full sync
if(startupComplete == False):
xbmc.log("Doing_Db_Sync: syncDatabase (Started)")
libSync = librarySync.syncDatabase()
xbmc.log("Doing_Db_Sync: syncDatabase (Finished) " + str(libSync))
countSync = librarySync.updatePlayCounts()
xbmc.log("Doing_Db_Sync: updatePlayCounts (Finished) " + str(countSync))
if user.getServer() == "": # Force refresh newly set thumbnails
# Server information missing xbmc.executebuiltin("UpdateLibrary(video)")
pass if(libSync and countSync):
# Make a simple api call to server startupComplete = True
elif not user.getPublicUsers():
self.server_online = False
# Server is not online, suppress future warning
if WINDOW.getProperty("Server_online") != "false":
WINDOW.setProperty("Server_online", "false")
self.logMsg("Server is offline.", 1)
xbmcgui.Dialog().notification("Error connecting", "%s Server is unreachable." % self.addonName)
else: else:
# Server is online if self.KodiMonitor.waitForAbort(10):
if not self.server_online: # Abort was requested while waiting. We should exit
# Server was not online when Kodi started. break
# Wait for server to be fully established. WebSocketThread().processPendingActions()
if self.KodiMonitor.waitForAbort(10):
# Abort was requested while waiting.
break
self.logMsg("Server is online and ready.", 1)
xbmcgui.Dialog().notification("Connection successful", "%s Server is online." % self.addonName, time=2000)
WINDOW.setProperty("Server_online", "true")
break
if self.KodiMonitor.waitForAbort(1): else:
# Abort was requested while waiting. xbmc.log("Not authenticated yet")
break
self.logMsg("======== STOP %s ========" % self.addonName, 0) utils.logMsg("MB3 Sync Service", "stopping Service",0)
# If user reset library database. # If user reset library database.
WINDOW = xbmcgui.Window(10000)
if WINDOW.getProperty("SyncInstallRunDone") == "false": if WINDOW.getProperty("SyncInstallRunDone") == "false":
addon = xbmcaddon.Addon('plugin.video.emby') addon = xbmcaddon.Addon('plugin.video.emby')
addon.setSetting("SyncInstallRunDone", "false") addon.setSetting("SyncInstallRunDone", "false")
@ -190,5 +147,5 @@ class Service():
user.stopClient() user.stopClient()
# Start the service #start the service
Service().ServiceEntryPoint() Service().ServiceEntryPoint()