diff --git a/addon.xml b/addon.xml index d46e551..c25404b 100644 --- a/addon.xml +++ b/addon.xml @@ -1,7 +1,7 @@ diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index 1353dd9..c105a2f 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -779,7 +779,7 @@ msgid "Manually enter user details" msgstr "" msgctxt "#30367" -msgid "Allow password saving" +msgid "Allow fast user switching password saving" msgstr "" msgctxt "#30368" @@ -821,3 +821,7 @@ msgstr "" msgctxt "#30377" msgid "Sending request" msgstr "" + +msgctxt "#30378" +msgid "Persist user details" +msgstr "" \ No newline at end of file diff --git a/resources/lib/downloadutils.py b/resources/lib/downloadutils.py index a057de5..0ccbe15 100644 --- a/resources/lib/downloadutils.py +++ b/resources/lib/downloadutils.py @@ -22,6 +22,36 @@ from .translation import string_load log = SimpleLogging(__name__) + +def save_user_details(settings, user_name, user_password): + save_user_to_settings = settings.getSetting("save_user_to_settings") == "true" + if save_user_to_settings: + settings.setSetting("username", user_name) + settings.setSetting("password", user_password) + else: + settings.setSetting("username", "") + settings.setSetting("password", "") + home_window = HomeWindow() + home_window.setProperty("username", user_name) + home_window.setProperty("password", user_password) + + +def load_user_details(settings): + save_user_to_settings = settings.getSetting("save_user_to_settings") == "true" + if save_user_to_settings: + user_name = settings.getSetting("username") + user_password = settings.getSetting("password") + else: + home_window = HomeWindow() + user_name = home_window.getProperty("username") + user_password = home_window.getProperty("password") + + user_details = {} + user_details["username"] = user_name + user_details["password"] = user_password + return user_details + + def getDetailsString(): addonSettings = xbmcaddon.Addon() @@ -359,25 +389,25 @@ class DownloadUtils(): return userid settings = xbmcaddon.Addon() - userName = settings.getSetting('username') + user_details = load_user_details(settings) + user_name = user_details.get("username", "") - if not userName: + if not user_name: return "" - log.debug("Looking for user name: {0}", userName) + log.debug("Looking for user name: {0}", user_name) - jsonData = None try: - jsonData = self.downloadUrl("{server}/emby/Users/Public?format=json", suppress=True, authenticate=False) + json_data = self.downloadUrl("{server}/emby/Users/Public?format=json", suppress=True, authenticate=False) except Exception as msg: log.error("Get User unable to connect: {0}", msg) return "" - log.debug("GETUSER_JSONDATA_01: {0}", jsonData) + log.debug("GETUSER_JSONDATA_01: {0}", json_data) result = [] try: - result = json.loads(jsonData) + result = json.loads(json_data) except Exception as e: log.debug("Could not load user data: {0}", e) return "" @@ -389,7 +419,7 @@ class DownloadUtils(): secure = False for user in result: - if user.get("Name") == unicode(userName, "utf-8"): + if user.get("Name") == unicode(user_name, "utf-8"): userid = user.get("Id") userImage = self.get_user_artwork(user, 'Primary') log.debug("Username Found: {0}", user.get("Name")) @@ -440,9 +470,10 @@ class DownloadUtils(): url = "{server}/emby/Users/AuthenticateByName?format=json" - pwd_sha = hashlib.sha1(settings.getSetting('password')).hexdigest() - user_name = urllib.quote(settings.getSetting('username')) - pwd_text = urllib.quote(settings.getSetting('password')) + user_details = load_user_details(settings) + pwd_sha = hashlib.sha1(user_details.get("password", "")).hexdigest() + user_name = urllib.quote(user_details.get("username", "")) + pwd_text = urllib.quote(user_details.get("password", "")) messageData = "username=" + user_name + "&password=" + pwd_sha @@ -522,7 +553,8 @@ class DownloadUtils(): return_data = "null" settings = xbmcaddon.Addon() - username = settings.getSetting("username") + user_details = load_user_details(settings) + username = user_details.get("username", "") if settings.getSetting("suppressErrors") == "true": suppress = True @@ -642,8 +674,7 @@ class DownloadUtils(): hashed_username = m.hexdigest() log.error("HTTP response error 401 auth error, removing any saved passwords for user: {0}", hashed_username) settings.setSetting("saved_user_password_" + hashed_username, "") - settings.setSetting("username", "") - settings.setSetting("password", "") + save_user_details(settings, "", "") log.error("HTTP response error: {0} {1}", data.status, data.reason) if suppress is False: diff --git a/resources/lib/server_detect.py b/resources/lib/server_detect.py index 7096f6a..76f6d5b 100644 --- a/resources/lib/server_detect.py +++ b/resources/lib/server_detect.py @@ -12,7 +12,7 @@ import xbmcgui import xbmc from .kodi_utils import HomeWindow -from .downloadutils import DownloadUtils +from .downloadutils import DownloadUtils, save_user_details, load_user_details from .simple_logging import SimpleLogging from .translation import string_load from .utils import datetime_from_string @@ -181,7 +181,8 @@ def checkServer(force=False, change_user=False, notify=False): something_changed = True # do we need to change the user - current_username = settings.getSetting("username") + user_details = load_user_details(settings) + current_username = user_details.get("username", "") current_username = unicode(current_username, "utf-8") # if asked or we have no current user then show user selection screen @@ -334,8 +335,8 @@ def checkServer(force=False, change_user=False, notify=False): if saved_password: log.debug("Saving username and password: {0}", selected_user_name) log.debug("Using stored password for user: {0}", hashed_username) - settings.setSetting("username", selected_user_name) - settings.setSetting('password', saved_password) + save_user_details(settings, selected_user_name, saved_password) + else: kb = xbmc.Keyboard() kb.setHeading(string_load(30006)) @@ -343,8 +344,7 @@ def checkServer(force=False, change_user=False, notify=False): kb.doModal() if kb.isConfirmed(): log.debug("Saving username and password: {0}", selected_user_name) - settings.setSetting("username", selected_user_name) - settings.setSetting('password', kb.getText()) + save_user_details(settings, selected_user_name, kb.getText()) # should we save the password if allow_password_saving: @@ -354,8 +354,7 @@ def checkServer(force=False, change_user=False, notify=False): settings.setSetting("saved_user_password_" + hashed_username, kb.getText()) else: log.debug("Saving username with no password: {0}", selected_user_name) - settings.setSetting("username", selected_user_name) - settings.setSetting('password', '') + save_user_details(settings, selected_user_name, "") if something_changed: home_window = HomeWindow() diff --git a/resources/settings.xml b/resources/settings.xml index baff63e..689eb7e 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -1,15 +1,17 @@ + - + + - + diff --git a/service.py b/service.py index 36d72a2..a2c4e4a 100644 --- a/service.py +++ b/service.py @@ -11,7 +11,7 @@ import xbmc import xbmcaddon import xbmcgui -from resources.lib.downloadutils import DownloadUtils +from resources.lib.downloadutils import DownloadUtils, save_user_details from resources.lib.simple_logging import SimpleLogging from resources.lib.play_utils import Service, PlaybackService, sendProgress from resources.lib.kodi_utils import HomeWindow @@ -19,6 +19,9 @@ from resources.lib.widgets import checkForNewContent, set_background_image, set_ from resources.lib.websocket_client import WebSocketClient from resources.lib.menu_functions import set_library_window_values from resources.lib.context_monitor import ContextMonitor +from resources.lib.server_detect import checkServer + +settings = xbmcaddon.Addon() # clear user and token when logging in home_window = HomeWindow() @@ -27,6 +30,9 @@ home_window.clearProperty("AccessToken") home_window.clearProperty("Params") log = SimpleLogging('service') + +checkServer() + download_utils = DownloadUtils() # auth the service @@ -54,7 +60,7 @@ home_window.setProperty("session_id", str(time.time())) # start the WebSocket Client running -settings = xbmcaddon.Addon() + remote_control = settings.getSetting('remoteControl') == "true" if remote_control: websocket_client.start()