diff --git a/resources/lib/downloadutils.py b/resources/lib/downloadutils.py index 11faa6d7..c9d42276 100644 --- a/resources/lib/downloadutils.py +++ b/resources/lib/downloadutils.py @@ -23,6 +23,11 @@ log = logging.getLogger("EMBY."+__name__) ################################################################################################## +class HTTPException(Exception): + # Emby HTTP exception + def __init__(self, status): + self.status = status + class DownloadUtils(object): @@ -112,18 +117,18 @@ class DownloadUtils(object): ) } - self.downloadUrl(url, postBody=data, action_type="POST") - log.debug("Posted capabilities to %s", self.session['Server']) - - # Attempt at getting sessionId - url = "{server}/emby/Sessions?DeviceId=%s&format=json" % device_id - try: + self.downloadUrl(url, postBody=data, action_type="POST") + log.debug("Posted capabilities to %s", self.session['Server']) + + # Attempt at getting sessionId + url = "{server}/emby/Sessions?DeviceId=%s&format=json" % device_id result = self.downloadUrl(url) session_id = result[0]['Id'] except Exception as error: log.error("Failed to retrieve the session id: " + str(error)) + return False else: log.info("SessionId: %s", session_id) @@ -153,6 +158,8 @@ class DownloadUtils(object): % (session_id, user_id)) self.downloadUrl(url, postBody={}, action_type="POST") + return True + def start_session(self): # User is identified from this point # Attach authenticated header to the session @@ -160,8 +167,8 @@ class DownloadUtils(object): session.headers = self.get_header() session.verify = self.session['SSL'] # Retry connections to the server - session.mount("http://", requests.adapters.HTTPAdapter(max_retries=1)) - session.mount("https://", requests.adapters.HTTPAdapter(max_retries=1)) + session.mount("http://", requests.adapters.HTTPAdapter(max_retries=3)) + session.mount("https://", requests.adapters.HTTPAdapter(max_retries=3)) self.session_requests = session log.info("requests session started on: %s", self.session['Server']) @@ -227,9 +234,7 @@ class DownloadUtils(object): if requires_server and (not server or not server.get("Server") or not server.get("UserId")): log.info("Aborting download, Server Details Error: %s url=%s" % (server, url)) - exc = Exception("Aborting download, Server Details Error: %s url=%s" % (server, url)) - exc.quiet = True - raise exc + raise Exception("Aborting download, Server Details Error: %s url=%s" % (server, url)) if server_id is None and self.session_requests is not None: # Main server session = self.session_requests @@ -247,9 +252,7 @@ class DownloadUtils(object): # does the URL look ok if url.startswith('/'): - exc = Exception("URL Error: " + url) - exc.quiet = True - raise exc + raise Exception("URL Error: " + url) ##### PREPARE REQUEST ##### kwargs.update({ @@ -263,6 +266,8 @@ class DownloadUtils(object): log.debug(kwargs) response = self._requests(action_type, session, **kwargs) #response = requests.get('http://httpbin.org/status/400') + if window('emby_test') == "false": + raise requests.exceptions.ConnectionError if response.status_code == 204: # No body in the response @@ -288,28 +293,20 @@ class DownloadUtils(object): ##### EXCEPTIONS ##### - except requests.exceptions.SSLError as error: - log.error("Invalid SSL certificate for: %s", url) - error.quiet = True - raise - - except requests.exceptions.ConnectTimeout as error: - log.error("ConnectTimeout at: %s", url) - error.quiet = True - raise - - except requests.exceptions.ReadTimeout as error: - log.error("ReadTimeout at: %s", url) - error.quiet = True - raise - except requests.exceptions.ConnectionError as error: # Make the addon aware of status + window('emby_test', value="true") + if window('emby_online') != "false": log.error("Server unreachable at: %s", url) window('emby_online', value="false") - error.quiet = True - raise + + raise HTTPException(None) + + except requests.exceptions.ReadTimeout as error: + log.error("ReadTimeout at: %s", url) + + raise HTTPException(None) except requests.exceptions.HTTPError as error: @@ -336,13 +333,10 @@ class DownloadUtils(object): message="Unauthorized.", icon=xbmcgui.NOTIFICATION_ERROR) - error.quiet = True - raise + raise HTTPException(response.status_code) # if we got to here and did not process the download for some reason then that is bad - exc = Exception("Unhandled Download : %s", url) - #exc.quiet = True - raise exc + raise Exception("Unhandled Download : %s", url) def _ensure_server(self, server_id=None): @@ -365,7 +359,7 @@ class DownloadUtils(object): 'UserId': "", 'Server': "", 'Token': "", - 'SSL': False + 'SSL': True } if server_id is None: # Main server @@ -388,4 +382,4 @@ class DownloadUtils(object): elif action == "DELETE": response = session.delete(**kwargs) - return response + return response \ No newline at end of file