diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index 20ee1cc..f3a83f9 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -673,3 +673,11 @@ msgstr "" msgctxt "#30314" msgid "Play" msgstr "" + +msgctxt "#30315" +msgid "Suppress notifications for connection errors" +msgstr "" + +msgctxt "#30316" +msgid "Connection Error" +msgstr "" diff --git a/resources/lib/datamanager.py b/resources/lib/datamanager.py index c026493..ebe5e46 100644 --- a/resources/lib/datamanager.py +++ b/resources/lib/datamanager.py @@ -29,7 +29,7 @@ class DataManager(): return json.loads(jsonData) def GetContent(self, url): - jsonData = DownloadUtils().downloadUrl(url, suppress=False, popup=1) + jsonData = DownloadUtils().downloadUrl(url) result = self.loadJasonData(jsonData) return result diff --git a/resources/lib/downloadutils.py b/resources/lib/downloadutils.py index 8283800..d7a6285 100644 --- a/resources/lib/downloadutils.py +++ b/resources/lib/downloadutils.py @@ -215,16 +215,16 @@ class DownloadUtils(): url = "{server}/emby/Users/AuthenticateByName?format=json" - clientInfo = ClientInformation() - txt_mac = clientInfo.getDeviceId() - version = clientInfo.getVersion() - client = clientInfo.getClient() + #clientInfo = ClientInformation() + #txt_mac = clientInfo.getDeviceId() + #version = clientInfo.getVersion() + #client = clientInfo.getClient() - deviceName = settings.getSetting('deviceName') - deviceName = deviceName.replace("\"", "_") + #deviceName = settings.getSetting('deviceName') + #deviceName = deviceName.replace("\"", "_") - authString = "Mediabrowser Client=\"" + client + "\",Device=\"" + deviceName + "\",DeviceId=\"" + txt_mac + "\",Version=\"" + version + "\"" - headers = {'Accept-encoding': 'gzip', 'Authorization': authString} + #authString = "Mediabrowser Client=\"" + client + "\",Device=\"" + deviceName + "\",DeviceId=\"" + txt_mac + "\",Version=\"" + version + "\"" + #headers = {'Accept-encoding': 'gzip', 'Authorization': authString} sha1 = hashlib.sha1(settings.getSetting('password')) messageData = "username=" + settings.getSetting('username') + "&password=" + sha1.hexdigest() @@ -283,12 +283,15 @@ class DownloadUtils(): log.debug("EmbyCon Authentication Header : " + str(headers)) return headers - def downloadUrl(self, url, suppress=False, postBody=None, method="GET", popup=0, authenticate=True, headers=None): + def downloadUrl(self, url, suppress=False, postBody=None, method="GET", authenticate=True, headers=None): log.debug("downloadUrl") return_data = "null" settings = xbmcaddon.Addon(id='plugin.video.embycon') + if settings.getSetting("suppressErrors") == "true": + suppress = True + log.debug(url) if url.find("{server}") != -1: server = self.getServer() @@ -341,7 +344,6 @@ class DownloadUtils(): if (host == "" or host == "" or port == ""): return "" - settings = xbmcaddon.Addon('plugin.video.embycon') use_https = settings.getSetting('use_https') == 'true' verify_cert = settings.getSetting('verify_cert') == 'true' @@ -394,32 +396,19 @@ class DownloadUtils(): log.debug(return_data) log.debug("====== 200 finished ======") - #elif (int(data.status) == 301) or (int(data.status) == 302): - # try: - # conn.close() - # except: - # pass - # return data.getheader('Location') - elif int(data.status) >= 400: error = "HTTP response error: " + str(data.status) + " " + str(data.reason) log.error(error) if suppress is False: - if popup == 0: - xbmcgui.Dialog().notification(self.addon_name, i18n('url_error_') % str(data.reason)) - else: - xbmcgui.Dialog().ok(self.addon_name, i18n('url_error_') % str(data.reason)) + xbmcgui.Dialog().notification(self.addon_name, i18n('url_error_') % str(data.reason)) log.error(error) except Exception, msg: error = "Unable to connect to " + str(server) + " : " + str(msg) log.error(error) if suppress is False: - if popup == 0: - xbmcgui.Dialog().notification(self.addon_name, i18n('url_error_') % str(msg)) - else: - xbmcgui.Dialog().ok(self.addon_name, i18n('url_error_') % i18n('unable_connect_server'), str(msg)) - #raise + xbmcgui.Dialog().notification(i18n("connection_error"), str(msg)) + finally: try: log.debug("Closing HTTP connection: " + str(conn)) diff --git a/resources/lib/functions.py b/resources/lib/functions.py index 8443ced..9abc0f9 100644 --- a/resources/lib/functions.py +++ b/resources/lib/functions.py @@ -352,11 +352,6 @@ def getContent(url, params): # use the data manager to get the data result = dataManager.GetContent(url) - if result == None or len(result) == 0: - if (progress != None): - progress.close() - return - dirItems = processDirectory(result, progress, params) if dirItems is None: return @@ -364,6 +359,8 @@ def getContent(url, params): xbmcplugin.endOfDirectory(pluginhandle, cacheToDisc=False) + log.debug("== EXIT: getContent == %s " % dirItems) + # if the view master addon is available then run the script try: view_addon = xbmcaddon.Addon("script.viewmaster") @@ -397,18 +394,17 @@ def processDirectory(results, progress, params): dirItems = [] if results is None: - result = [] + results = [] + if isinstance(results, dict): - result = results.get("Items") - else: - result = results + results = results.get("Items", []) # flatten single season # if there is only one result and it is a season and you have flatten signle season turned on then # build a new url, set the content media type and call get content again flatten_single_season = settings.getSetting("flatten_single_season") == "true" - if flatten_single_season and len(result) == 1 and result[0].get("Type", "") == "Season": - season_id = result[0].get("Id") + if flatten_single_season and len(results) == 1 and results[0].get("Type", "") == "Season": + season_id = results[0].get("Id") season_url = ('{server}/emby/Users/{userid}/items' + '?ParentId=' + season_id + '&IsVirtualUnAired=false' + @@ -430,7 +426,7 @@ def processDirectory(results, progress, params): display_options["addResumePercent"] = settings.getSetting("addResumePercent") == 'true' display_options["addSubtitleAvailable"] = settings.getSetting("addSubtitleAvailable") == 'true' - item_count = len(result) + item_count = len(results) current_item = 1 first_season_item = None total_unwatched = 0 @@ -445,7 +441,7 @@ def processDirectory(results, progress, params): gui_options["add_season_number"] = add_season_number gui_options["add_episode_number"] = add_episode_number - for item in result: + for item in results: if (progress != None): percentDone = (float(current_item) / float(item_count)) * 100 @@ -627,7 +623,7 @@ def populate_listitem(item_id): log.debug("populate_listitem: " + item_id) url = "{server}/emby/Users/{userid}/Items/" + item_id + "?format=json" - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=1) + jsonData = downloadUtils.downloadUrl(url) result = json.loads(jsonData) log.debug("populate_listitem item info: " + str(result)) @@ -962,7 +958,7 @@ def playTrailer(id): url = ("{server}/emby/Users/{userid}/Items/%s/LocalTrailers?format=json" % id) - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=1) + jsonData = downloadUtils.downloadUrl(url) result = json.loads(jsonData) log.debug("LocalTrailers" + str(result)) @@ -975,7 +971,7 @@ def playTrailer(id): trailer_list.append(info) url = ("{server}/emby/Users/{userid}/Items/%s?format=json&Fields=RemoteTrailers" % id) - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=1) + jsonData = downloadUtils.downloadUrl(url) result = json.loads(jsonData) log.debug("RemoteTrailers" + str(result)) diff --git a/resources/lib/play_utils.py b/resources/lib/play_utils.py index 68ff39f..d561ca8 100644 --- a/resources/lib/play_utils.py +++ b/resources/lib/play_utils.py @@ -39,7 +39,7 @@ def playFile(play_info): server = downloadUtils.getServer() url = "{server}/emby/Users/{userid}/Items/" + id + "?format=json" - jsonData = downloadUtils.downloadUrl(url, suppress=False, popup=1) + jsonData = downloadUtils.downloadUrl(url) result = json.loads(jsonData) log.debug("Playfile item info: " + str(result)) diff --git a/resources/lib/server_sessions.py b/resources/lib/server_sessions.py index 85e7a9d..d4a4d3f 100644 --- a/resources/lib/server_sessions.py +++ b/resources/lib/server_sessions.py @@ -37,9 +37,8 @@ def showServerSessions(): media_id = play_state.get("MediaSourceId", None) log.debug("Media ID " + str(media_id)) if media_id is not None: - jsonData = downloadUtils.downloadUrl("{server}/emby/Users/{userid}/Items/" + - media_id + "?format=json", - suppress=False, popup=1) + url = "{server}/emby/Users/{userid}/Items/" + media_id + "?format=json" + jsonData = downloadUtils.downloadUrl(url) media_info = json.loads(jsonData) log.debug("Media Info " + str(media_info)) runtime = media_info.get("RunTimeTicks", 0) diff --git a/resources/lib/translation.py b/resources/lib/translation.py index e9c81cb..2b131d0 100644 --- a/resources/lib/translation.py +++ b/resources/lib/translation.py @@ -119,5 +119,6 @@ STRINGS = { 'select_trailer': 30308, 'select_source': 30309, 'embycon_error': 30311, - 'embycon_error_submit': 30312 + 'embycon_error_submit': 30312, + 'connection_error': 30316 } diff --git a/resources/lib/widgets.py b/resources/lib/widgets.py index c9e83c6..3fbccd4 100644 --- a/resources/lib/widgets.py +++ b/resources/lib/widgets.py @@ -151,8 +151,7 @@ def getWidgetContentCast(handle, params): server = downloadUtils.getServer() id = params["id"] - jsonData = downloadUtils.downloadUrl("{server}/emby/Users/{userid}/Items/" + id + "?format=json", - suppress=False, popup=1) + jsonData = downloadUtils.downloadUrl("{server}/emby/Users/{userid}/Items/" + id + "?format=json") result = json.loads(jsonData) log.debug("ItemInfo: " + str(result)) @@ -208,7 +207,7 @@ def populateWidgetItems(itemsUrl, override_select_action=None): log.debug("WIDGET_DATE_URL: " + itemsUrl) # get the items - jsonData = downloadUtils.downloadUrl(itemsUrl, suppress=False) + jsonData = downloadUtils.downloadUrl(itemsUrl) log.debug("Widget(Items) jsonData: " + jsonData) result = json.loads(jsonData) diff --git a/resources/settings.xml b/resources/settings.xml index 5bd5fec..a96bacf 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -59,5 +59,6 @@ + \ No newline at end of file diff --git a/service.py b/service.py index 3d0a061..3f6e5ee 100644 --- a/service.py +++ b/service.py @@ -89,12 +89,12 @@ def promptForStopActions(item_id, current_possition): prompt_delete_movie_percentage = int(settings.getSetting('promptDeleteMoviePercentage')) # everything is off so return - if prompt_next_percentage == 100 and prompt_delete_episode_percentage == 100 and prompt_delete_movie_percentage == 100: + if (prompt_next_percentage == 100 and + prompt_delete_episode_percentage == 100 and + prompt_delete_movie_percentage == 100): return - jsonData = download_utils.downloadUrl("{server}/emby/Users/{userid}/Items/" + - item_id + "?format=json", - suppress=False, popup=1) + jsonData = download_utils.downloadUrl("{server}/emby/Users/{userid}/Items/" + item_id + "?format=json") result = json.loads(jsonData) prompt_to_delete = False runtime = result.get("RunTimeTicks", 0) @@ -142,16 +142,17 @@ def promptForStopActions(item_id, current_possition): log.debug("No episode number, can not prompt for next episode") return - jsonData = download_utils.downloadUrl('{server}/emby/Users/{userid}/Items?' + - '?Recursive=true' + - '&ParentId=' + parendId + - #'&Filters=IsUnplayed,IsNotFolder' + - '&IsVirtualUnaired=false' + - '&IsMissing=False' + - '&IncludeItemTypes=Episode' + - '&ImageTypeLimit=1' + - '&format=json', - suppress=False, popup=1) + url = ( '{server}/emby/Users/{userid}/Items?' + + '?Recursive=true' + + '&ParentId=' + parendId + + # '&Filters=IsUnplayed,IsNotFolder' + + '&IsVirtualUnaired=false' + + '&IsMissing=False' + + '&IncludeItemTypes=Episode' + + '&ImageTypeLimit=1' + + '&format=json') + + jsonData = download_utils.downloadUrl(url) items_result = json.loads(jsonData) log.debug("Prompt Next Item Details: %s" % items_result) @@ -163,7 +164,7 @@ def promptForStopActions(item_id, current_possition): resp = True if play_prompt: - #next_epp_name = str(index) + " of " + str(item_list[-1].get("IndexNumber", -1)) + " - " + item.get("Name", "n/a") + # next_epp_name = str(index) + " of " + str(item_list[-1].get("IndexNumber", -1)) + " - " + item.get("Name", "n/a") next_epp_name = ("%02d - " % (index,)) + item.get("Name", "n/a") resp = xbmcgui.Dialog().yesno(i18n("play_next_title"), i18n("play_next_question"), next_epp_name, autoclose=10000)