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 = ""
# 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 not authenticated
elif not authenticate:
self.logMsg("URL: %s" % url, 1)
header = self.getHeader(authenticate=False)
verifyssl = False
# If user enables ssl verification
try:
verifyssl = self.sslverify
except AttributeError:
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
try: try:
r.raise_for_status()
# 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 not authenticated
elif not authenticate:
self.logMsg("URL: %s" % url, 2)
header = self.getHeader(authenticate=False)
verifyssl = False
# If user enables ssl verification
try:
verifyssl = self.sslverify
except AttributeError:
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
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
@ -230,6 +226,9 @@ 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 = []
@ -32,8 +31,6 @@ class WebSocketThread(threading.Thread):
client = None client = None
keepRunning = True keepRunning = True
uc = UserClient()
def __init__(self, *args): def __init__(self, *args):
self.KodiMonitor = KodiMonitor.Kodi_Monitor() self.KodiMonitor = KodiMonitor.Kodi_Monitor()
@ -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):
@ -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()
@ -70,115 +66,76 @@ class Service():
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()
currentFile = xbmc.Player().getPlayingFile()
# isServerOnline verification if(player.played_information.get(currentFile) != None):
if WINDOW.getProperty("Server_online") == "true": player.played_information[currentFile]["currentPosition"] = playTime
# Server is online, proceed.
if xbmc.Player().isPlaying(): # send update
try: td = datetime.today() - lastProgressUpdate
playTime = xbmc.Player().getTime() secDiff = td.seconds
totalTime = xbmc.Player().getTotalTime() if(secDiff > 10):
currentFile = xbmc.Player().getPlayingFile() try:
player.reportPlayback()
except Exception, msg:
xbmc.log("MB3 Sync Service -> Exception reporting progress : " + msg)
pass
lastProgressUpdate = datetime.today()
# 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()
if(player.played_information.get(currentFile) != None): except Exception, e:
player.played_information[currentFile]["currentPosition"] = playTime xbmc.log("MB3 Sync Service -> Exception in Playback Monitor Service : " + str(e))
pass
# send update
td = datetime.today() - lastProgressUpdate
secDiff = td.seconds
if(secDiff > 10):
try:
player.reportPlayback()
except Exception, msg:
self.logMsg("Exception reporting progress: %s" % msg, 1)
pass
lastProgressUpdate = datetime.today()
# 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):
if user.getServer() == "": # Correctly launch the websocket, if user manually launches the add-on
# Server information missing if (self.newWebSocketThread == None):
pass self.newWebSocketThread = "Started"
# Make a simple api call to server ws.start()
elif not user.getPublicUsers():
self.server_online = False #full sync
# Server is not online, suppress future warning if(startupComplete == False):
if WINDOW.getProperty("Server_online") != "false": xbmc.log("Doing_Db_Sync: syncDatabase (Started)")
WINDOW.setProperty("Server_online", "false") libSync = librarySync.syncDatabase()
self.logMsg("Server is offline.", 1) xbmc.log("Doing_Db_Sync: syncDatabase (Finished) " + str(libSync))
xbmcgui.Dialog().notification("Error connecting", "%s Server is unreachable." % self.addonName) countSync = librarySync.updatePlayCounts()
xbmc.log("Doing_Db_Sync: updatePlayCounts (Finished) " + str(countSync))
# Force refresh newly set thumbnails
xbmc.executebuiltin("UpdateLibrary(video)")
if(libSync and countSync):
startupComplete = True
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()