diff --git a/agkyra/gui/settings.html b/agkyra/gui/settings.html index 85596c660d46ed60866c4d989e79f3db194755bc..c85cad45d3743adcc56a5288a63d44df7a55f605 100644 --- a/agkyra/gui/settings.html +++ b/agkyra/gui/settings.html @@ -45,7 +45,6 @@ var removed_at_least_one = false win.cookies.getAll({url: url}, function(cookies) { $.each(cookies, function(i, cookie) { - console.log('I have a cookie to remove ' + cookie.name + ', ' + cookie.domain); win.cookies.remove({url: url, name: cookie.name} ); removed_at_least_one = true; }); @@ -56,9 +55,7 @@ var gui = require('nw.gui'); var cred_win = null; var logout_win = null; - var can_close_cred = false; var got_cookie = false; - var can_close_logout = false; var show_creds = true; function get_credentials() { var cookie_name = '_pithos2_a'; @@ -80,7 +77,7 @@ } }); cred_win.on('loaded', function() { - if (got_cookie) can_close_cred = true; + if (got_cookie) cred_win.close(); }); cred_win.on('closed', function() { @@ -89,10 +86,9 @@ {focus: true, width:20, height: 20 }); logout_win.hide(); logout_win.on('loaded', function() { - while( - remove_cookies(logout_win, get_account_ui()) || - remove_cookies(logout_win, get_pithos_ui())) {} - can_close_logout = true; + while(remove_cookies(logout_win, get_pithos_ui())) {} + logout_win.close(); + show_creds = true; }); }); } @@ -103,16 +99,6 @@ if (get_pithos_ui() && show_creds) { $('#get_creds').show(); } else {$('#get_creds').hide(); } - // Garbage collector - if (can_close_logout) { - can_close_logout = false; - logout_win.close(); - show_creds = true; - } - else if (can_close_cred) { - can_close_cred = false; - cred_win.close(); - } }, 500); </script> </head> diff --git a/agkyra/protocol.py b/agkyra/protocol.py index 1641bd30d13ca7b0713d3e5fa54205d2a61923ec..c358c016fa8839034eec0cdfd33631f2d70fe29e 100644 --- a/agkyra/protocol.py +++ b/agkyra/protocol.py @@ -64,15 +64,42 @@ class WebSocketProtocol(WebSocket): settings = dict( token=None, url=None, container=None, directory=None, - exclude=None, pithos_ui=None) + exclude=None) status = dict(progress=0, paused=True) file_syncer = None cnf = AgkyraConfig() + def _get_default_sync(self): + """Get global.default_sync or pick the first sync as default + If there are no syncs, create a 'default' sync. + """ + sync = self.cnf.get('global', 'default_sync') + if not sync: + for sync in self.cnf.keys('sync'): + break + self.cnf.set('global', 'default_sync', sync or 'default') + return sync or 'default' + + def _get_sync_cloud(self, sync): + """Get the <sync>.cloud or pick the first cloud and use it + In case of cloud picking, set the cloud as the <sync>.cloud for future + sessions. + If no clouds are found, create a 'default' cloud, with an empty url. + """ + try: + cloud = self.cnf.get_sync(sync, 'cloud') + except KeyError: + cloud = None + if not cloud: + for cloud in self.cnf.keys('cloud'): + break + self.cnf.set_sync(sync, 'cloud', cloud or 'default') + return cloud or 'default' + def _load_settings(self): LOG.debug('Start loading settings') - sync = self.cnf.get('global', 'default_sync') - cloud = self.cnf.get_sync(sync, 'cloud') + sync = self._get_default_sync() + cloud = self._get_sync_cloud(sync) try: self.settings['url'] = self.cnf.get_cloud(cloud, 'url') @@ -84,16 +111,27 @@ class WebSocketProtocol(WebSocket): self.settings['url'] = None for option in ('container', 'directory', 'exclude'): - self.settings[option] = self.cnf.get_sync(sync, option) + try: + self.settings[option] = self.cnf.get_sync(sync, option) + except KeyError: + LOG.debug('No %s is set' % option) LOG.debug('Finished loading settings') def _dump_settings(self): LOG.debug('Saving settings') - sync = self.cnf.get('global', 'default_sync') - cloud = self.cnf.get_sync(sync, 'cloud') + if not self.settings.get('url', None): + LOG.debug('No settings to save') + return + + sync = self._get_default_sync() + cloud = self._get_sync_cloud(sync) + + try: + old_url = self.cnf.get_cloud(cloud, 'url') or '' + except KeyError: + old_url = self.settings['url'] - old_url = self.cnf.get_cloud(cloud, 'url') or '' while old_url != self.settings['url']: cloud = '%s_%s' % (cloud, sync) try: @@ -102,11 +140,11 @@ class WebSocketProtocol(WebSocket): break self.cnf.set_cloud(cloud, 'url', self.settings['url']) - self.cnf.set_cloud(cloud, 'token', self.settings['token']) + self.cnf.set_cloud(cloud, 'token', self.settings['token'] or '') self.cnf.set_sync(sync, 'cloud', cloud) for option in ('directory', 'container', 'exclude'): - self.cnf.set_sync(sync, option, self.settings[option]) + self.cnf.set_sync(sync, option, self.settings[option] or '') self.cnf.write() LOG.debug('Settings saved')