def set_library_window_values(force=False): log.debug("set_library_window_values Called forced={0}", force) home_window = HomeWindow() already_set = home_window.getProperty("view_item.0.name") if not force and already_set: return for index in range(0, 20): home_window.clearProperty("view_item.%i.name" % index) home_window.clearProperty("view_item.%i.id" % index) home_window.clearProperty("view_item.%i.type" % index) home_window.clearProperty("view_item.%i.thumb" % index) data_manager = DataManager() url = "{server}/emby/Users/{userid}/Views" result = data_manager.GetContent(url) if result is None: return result = result.get("Items") server = downloadUtils.getServer() index = 0 for item in result: type = item.get("CollectionType") if type in ["movies", "boxsets", "music", "tvshows"]: name = item.get("Name") id = item.get("Id") # plugin.video.jellyfincon- prop_name = "view_item.%i.name" % index home_window.setProperty(prop_name, name) log.debug( "set_library_window_values: plugin.video.jellyfincon-{0}={1}", prop_name, name) prop_name = "view_item.%i.id" % index home_window.setProperty(prop_name, id) log.debug( "set_library_window_values: plugin.video.jellyfincon-{0}={1}", prop_name, id) prop_name = "view_item.%i.type" % index home_window.setProperty(prop_name, type) log.debug( "set_library_window_values: plugin.video.jellyfincon-{0}={1}", prop_name, type) thumb = downloadUtils.getArtwork(item, "Primary", server=server) prop_name = "view_item.%i.thumb" % index home_window.setProperty(prop_name, thumb) log.debug( "set_library_window_values: plugin.video.jellyfincon-{0}={1}", prop_name, thumb) index += 1
def stopAll(played_information): if len(played_information) == 0: return log.debug("played_information: {0}", played_information) home_screen = HomeWindow() home_screen.clearProperty("currently_playing_id") for item_url in played_information: data = played_information.get(item_url) if data.get("currently_playing", False) is True: log.debug("item_url: {0}", item_url) log.debug("item_data: {0}", data) current_possition = data.get("currentPossition", 0) emby_item_id = data.get("item_id") if emby_item_id is not None and len( emby_item_id) != 0 and emby_item_id != "None": log.debug("Playback Stopped at: {0}", current_possition) url = "{server}/emby/Sessions/Playing/Stopped" postdata = { 'ItemId': emby_item_id, 'MediaSourceId': emby_item_id, 'PositionTicks': int(current_possition * 10000000) } download_utils.downloadUrl(url, postBody=postdata, method="POST") data["currently_playing"] = False if data.get("play_action_type", "") == "play": promptForStopActions(emby_item_id, current_possition) device_id = ClientInformation().getDeviceId() url = "{server}/emby/Videos/ActiveEncodings?DeviceId=%s" % device_id download_utils.downloadUrl(url, method="DELETE")
def stopAll(played_information): if len(played_information) == 0: return log.debug("played_information: {0}", played_information) home_screen = HomeWindow() home_screen.clearProperty("currently_playing_id") for item_url in played_information: data = played_information.get(item_url) if data.get("currently_playing", False) is True: log.debug("item_url: {0}", item_url) log.debug("item_data: {0}", data) current_possition = data.get("currentPossition", 0) emby_item_id = data.get("item_id") if emby_item_id is not None and len(emby_item_id) != 0 and emby_item_id != "None": log.debug("Playback Stopped at: {0}", current_possition) url = "{server}/emby/Sessions/Playing/Stopped" postdata = { 'ItemId': emby_item_id, 'MediaSourceId': emby_item_id, 'PositionTicks': int(current_possition * 10000000) } download_utils.downloadUrl(url, postBody=postdata, method="POST") data["currently_playing"] = False if data.get("play_action_type", "") == "play": promptForStopActions(emby_item_id, current_possition) device_id = ClientInformation().getDeviceId() url = "{server}/emby/Videos/ActiveEncodings?DeviceId=%s" % device_id download_utils.downloadUrl(url, method="DELETE")
def checkServer(force=False, change_user=False, notify=False): log.debug("checkServer Called") settings = xbmcaddon.Addon() serverUrl = "" if force is False: # if not forcing use server details from settings svr = downloadUtils.getServer() if svr is not None: serverUrl = svr # if the server is not set then try to detect it if serverUrl == "": serverInfo = getServerDetails() serverNames = [] for server in serverInfo: serverNames.append(server.get("Name", i18n('n/a'))) if serverNames: return_index = xbmcgui.Dialog().select(i18n('select_server'), serverNames) else: xbmcgui.Dialog().ok(__addon_name__, i18n('no_server_detected')) return_index = -1 if (return_index == -1): xbmc.executebuiltin("ActivateWindow(Home)") return serverUrl = serverInfo[return_index]["Address"] log.debug("Selected server: {0}", serverUrl) # parse the url url_bits = urlparse(serverUrl) server_address = url_bits.hostname server_port = str(url_bits.port) server_protocol = url_bits.scheme log.debug("Detected server info {0} - {1} - {2}", server_protocol, server_address, server_port) # save the server info settings.setSetting("port", server_port) settings.setSetting("ipaddress", server_address) if server_protocol == "https": settings.setSetting("use_https", "true") else: settings.setSetting("use_https", "false") if notify: xbmcgui.Dialog().ok(i18n('server_detect_succeeded'), i18n('found_server'), i18n('address:') + server_address, i18n('server_port:') + server_port) # we need to change the user current_username = settings.getSetting("username") current_username = unicode(current_username, "utf-8") # if asked or we have no current user then show user selection screen if change_user or len(current_username) == 0: # get a list of users log.debug("Getting user list") jsonData = downloadUtils.downloadUrl(serverUrl + "/emby/Users/Public?format=json", authenticate=False) log.debug("jsonData: {0}", jsonData) try: result = json.loads(jsonData) except: result = None if result is None: xbmcgui.Dialog().ok(i18n('error'), i18n('unable_connect_server'), i18n('address:') + serverUrl) else: names = [] user_list = [] secured = [] for user in result: config = user.get("Configuration") if (config != None): if (config.get("IsHidden") is None) or (config.get("IsHidden") is False): name = user.get("Name") user_list.append(name) if (user.get("HasPassword") is True): secured.append(True) name = i18n('username_secured') % name else: secured.append(False) names.append(name) if (len(current_username) > 0) and (not any(n == current_username for n in user_list)): names.insert(0, i18n('username_userdefined') % current_username) user_list.insert(0, current_username) secured.insert(0, True) names.insert(0, i18n('username_userinput')) user_list.insert(0, '') secured.insert(0, True) log.debug("User List: {0}", names) log.debug("User List: {0}", user_list) return_value = xbmcgui.Dialog().select(i18n('select_user'), names) if (return_value > -1): log.debug("Selected User Index: {0}", return_value) if return_value == 0: kb = xbmc.Keyboard() kb.setHeading(i18n('username:'******'password:'******'password', kb.getText()) else: settings.setSetting('password', '') home_window = HomeWindow() home_window.clearProperty("userid") home_window.clearProperty("AccessToken") xbmc.executebuiltin("ActivateWindow(Home)")
def checkServer(force=False, change_user=False, notify=False): log.debug("checkServer Called") settings = xbmcaddon.Addon() serverUrl = "" something_changed = False if force is False: # if not forcing use server details from settings svr = downloadUtils.getServer() if svr is not None: serverUrl = svr # if the server is not set then try to detect it if serverUrl == "": serverInfo = getServerDetails() serverNames = [] for server in serverInfo: serverNames.append(server.get("Name", i18n('n/a'))) if serverNames: return_index = xbmcgui.Dialog().select(i18n('select_server'), serverNames) else: xbmcgui.Dialog().ok(__addon_name__, i18n('no_server_detected')) return_index = -1 if (return_index == -1): xbmc.executebuiltin("ActivateWindow(Home)") return serverUrl = serverInfo[return_index]["Address"] log.debug("Selected server: {0}", serverUrl) # parse the url url_bits = urlparse(serverUrl) server_address = url_bits.hostname server_port = str(url_bits.port) server_protocol = url_bits.scheme log.debug("Detected server info {0} - {1} - {2}", server_protocol, server_address, server_port) # save the server info settings.setSetting("port", server_port) settings.setSetting("ipaddress", server_address) if server_protocol == "https": settings.setSetting("use_https", "true") else: settings.setSetting("use_https", "false") something_changed = True if notify: xbmcgui.Dialog().ok(i18n('server_detect_succeeded'), i18n('found_server'), i18n('address:') + server_address, i18n('server_port:') + server_port) # we need to change the user current_username = settings.getSetting("username") current_username = unicode(current_username, "utf-8") # if asked or we have no current user then show user selection screen if change_user or len(current_username) == 0: # get a list of users log.debug("Getting user list") jsonData = downloadUtils.downloadUrl(serverUrl + "/emby/Users/Public?format=json", authenticate=False) # TODO: add a setting to enable this show_manual = False log.debug("jsonData: {0}", jsonData) try: result = json.loads(jsonData) except: result = None if result is None: xbmcgui.Dialog().ok(i18n('error'), i18n('unable_connect_server'), i18n('address:') + serverUrl) else: selected_id = 0 names = [] user_list = [] secured = [] for user in result: config = user.get("Configuration") if (config != None): if (config.get("IsHidden") is None) or (config.get("IsHidden") is False): name = user.get("Name") user_list.append(name) if (user.get("HasPassword") is True): secured.append(True) name = i18n('username_secured') % name else: secured.append(False) names.append(name) if current_username == name: selected_id = len(names) - 1 if (len(current_username) > 0) and (not any(n == current_username for n in user_list)): names.insert(0, i18n('username_userdefined') % current_username) user_list.insert(0, current_username) secured.insert(0, True) if show_manual: names.append(i18n('username_userinput')) user_list.append('') secured.append(True) log.debug("User List: {0}", names) log.debug("User List: {0}", user_list) if current_username: selection_title = i18n('select_user') + " (" + current_username + ")" else: selection_title = i18n('select_user') return_value = xbmcgui.Dialog().select(selection_title, names, preselect=selected_id) if return_value > -1 and return_value != selected_id: log.debug("Selected User Index: {0}", return_value) if show_manual and return_value == (len(user_list) -1): kb = xbmc.Keyboard() kb.setHeading(i18n('username:'******'password', saved_password) else: kb = xbmc.Keyboard() kb.setHeading(i18n('password:'******'password', kb.getText()) # should we save the password save_password = xbmcgui.Dialog().yesno( "Save Password?", "Do you want to save the password?") if save_password: log.debug("Saving password for fast user switching: {0}", hashed_username) settings.setSetting("saved_user_password_" + hashed_username, kb.getText()) else: log.debug("Saving username is no password: {0}", selected_user) settings.setSetting("username", selected_user) settings.setSetting('password', '') if something_changed: home_window = HomeWindow() home_window.clearProperty("userid") home_window.clearProperty("AccessToken") home_window.setProperty("embycon_widget_reload", str(time.time())) download_utils = DownloadUtils() download_utils.authenticate() download_utils.getUserId() xbmc.executebuiltin("ActivateWindow(Home)") xbmc.executebuiltin("ReloadSkin()")