diff --git a/resources/lib/app/__init__.py b/resources/lib/app/__init__.py index ef41dd56..c224d7b9 100644 --- a/resources/lib/app/__init__.py +++ b/resources/lib/app/__init__.py @@ -24,9 +24,9 @@ def init(entrypoint=False): instances """ global ACCOUNT, APP, CONN, SYNC, PLAYSTATE - ACCOUNT = Account(entrypoint) APP = App(entrypoint) CONN = Connection(entrypoint) + ACCOUNT = Account(entrypoint) SYNC = Sync(entrypoint) if not entrypoint: PLAYSTATE = PlayState() diff --git a/resources/lib/app/account.py b/resources/lib/app/account.py index a8ec03dd..112df454 100644 --- a/resources/lib/app/account.py +++ b/resources/lib/app/account.py @@ -21,15 +21,20 @@ class Account(object): def set_authenticated(self): self.authenticated = True utils.window('plex_authenticated', value='true') - # Start download session - from .. import downloadutils - self._session = downloadutils.DownloadUtils() - self._session.startSession(reset=True) def set_unauthenticated(self): self.authenticated = False utils.window('plex_authenticated', clear=True) + def reset_session(self): + try: + self._session.stopSession() + except AttributeError: + pass + from .. import downloadutils + self._session = downloadutils.DownloadUtils() + self._session.startSession(reset=True) + def load(self): LOG.debug('Loading account settings') # User name we used to sign in to plex.tv @@ -59,6 +64,10 @@ class Account(object): utils.window('plex_token', value=self.plex_token or '') utils.window('pms_token', value=self.pms_token or '') utils.window('plexAvatar', value=self.avatar or '') + + # Start download session + self.reset_session() + LOG.debug('Loaded user %s, %s with plex token %s... and pms token %s...', self.plex_username, self.plex_user_id, self.plex_token[:5] if self.plex_token else None, @@ -77,7 +86,7 @@ class Account(object): self.restricted_user = None self.authenticated = False try: - self._session.close() + self._session.stopSession() except AttributeError: pass self._session = None @@ -105,7 +114,7 @@ class Account(object): self.plex_login = None self.plex_login_id = None try: - self._session.close() + self._session.stopSession() except AttributeError: pass self._session = None diff --git a/resources/lib/initialsetup.py b/resources/lib/initialsetup.py index 0bc3bf5d..94c9b11f 100644 --- a/resources/lib/initialsetup.py +++ b/resources/lib/initialsetup.py @@ -26,24 +26,6 @@ if not path_ops.exists(v.EXTERNAL_SUBTITLE_TEMP_PATH): path_ops.makedirs(v.EXTERNAL_SUBTITLE_TEMP_PATH) -def _write_pms_settings(url, token): - """ - Sets certain settings for server by asking for the PMS' settings - Call with url: scheme://ip:port - """ - xml = PF.get_PMS_settings(url, token) - try: - xml.attrib - except AttributeError: - LOG.error('Could not get PMS settings for %s', url) - return - for entry in xml: - if entry.attrib.get('id', '') == 'allowMediaDeletion': - value = 'true' if entry.get('value', '1') == '1' else 'false' - utils.settings('plex_allows_mediaDeletion', value=value) - utils.window('plex_allows_mediaDeletion', value=value) - - class InitialSetup(object): """ Will load Plex PMS settings (e.g. address) and token @@ -69,6 +51,24 @@ class InitialSetup(object): utils.settings('userid', value=self.plex_login_id or '') utils.settings('plexToken', value=self.plex_token or '') + @staticmethod + def save_pms_settings(url, token): + """ + Sets certain settings for server by asking for the PMS' settings + Call with url: scheme://ip:port + """ + xml = PF.get_PMS_settings(url, token) + try: + xml.attrib + except AttributeError: + LOG.error('Could not get PMS settings for %s', url) + return + for entry in xml: + if entry.attrib.get('id', '') == 'allowMediaDeletion': + value = 'true' if entry.get('value', '1') == '1' else 'false' + utils.settings('plex_allows_mediaDeletion', value=value) + utils.window('plex_allows_mediaDeletion', value=value) + def enter_new_pms_address(self): # "Enter your Plex Media Server's IP or URL. Examples are:" utils.messageDialog(utils.lang(29999), @@ -261,8 +261,6 @@ class InitialSetup(object): server = self._user_pick_pms() else: server = self._auto_pick_pms() - if server is not None: - _write_pms_settings(server['baseURL'], server['token']) return server def _auto_pick_pms(self): @@ -389,6 +387,7 @@ class InitialSetup(object): utils.settings('plex_servername', server['name']) utils.settings('plex_serverowned', 'true' if server['owned'] else 'false') + utils.settings('accessToken', server['token']) # Careful to distinguish local from remote PMS if server['local']: scheme = server['scheme'] @@ -486,7 +485,6 @@ class InitialSetup(object): migration.check_migration() # Reload the server IP cause we might've deleted it during migration app.CONN.load() - app.CONN.server = app.CONN.server # Display a warning if Kodi puts ALL movies into the queue, basically # breaking playback reporting for PKC @@ -512,7 +510,7 @@ class InitialSetup(object): if self.check_existing_pms(): LOG.info("Using PMS %s with machineIdentifier %s", app.CONN.server, app.CONN.machine_identifier) - _write_pms_settings(app.CONN.server, self.pms_token) + self.save_pms_settings(app.CONN.server, self.pms_token) if reboot is True: utils.reboot_kodi() return @@ -525,6 +523,7 @@ class InitialSetup(object): server = self.pick_pms() if server is not None: # Write our chosen server to Kodi settings file + self.save_pms_settings(server['baseURL'], server['token']) self.write_pms_to_settings(server) # User already answered the installation questions diff --git a/resources/lib/service_entry.py b/resources/lib/service_entry.py index 750e1aa7..edb22fda 100644 --- a/resources/lib/service_entry.py +++ b/resources/lib/service_entry.py @@ -115,8 +115,11 @@ class Service(): self.connection_check_counter = 0 server = self.setup.pick_pms() if server: + LOG.debug('Found server: %s', server) + self.setup.save_pms_settings(server['baseURL'], server['token']) self.setup.write_pms_to_settings(server) app.CONN.load() + app.ACCOUNT.reset_session() else: # Server is online self.connection_check_counter = 0 @@ -169,19 +172,22 @@ class Service(): return False else: server = self.setup.pick_pms(showDialog=True) - if server is None: + if not server: LOG.info('We did not connect to a new PMS, aborting') return False LOG.info("User chose server %s", server['name']) if server['baseURL'] == app.CONN.server: LOG.info('User chose old PMS to connect to') return False + # Save changes to to file + self.setup.save_pms_settings(server['baseURL'], server['token']) self.setup.write_pms_to_settings(server) if not self.log_out(): return False # Wipe Kodi and Plex database as well as playlists and video nodes utils.wipe_database() app.CONN.load() + app.ACCOUNT.reset_session() app.ACCOUNT.set_unauthenticated() self.server_has_been_online = False self.welcome_msg = False @@ -235,6 +241,7 @@ class Service(): def enter_new_pms_address(self): if self.setup.enter_new_pms_address(): app.CONN.load() + app.ACCOUNT.reset_session() app.ACCOUNT.set_unauthenticated() self.server_has_been_online = False self.welcome_msg = False