When a passphrase dialog is cancelled, no further attempt to connect is made, and the icon is not marked as favourite. Fixes #1805. Details:
1. a backlink to the NMSettings object is placed in each NMSettingsConnection object, 2. NMSettings.clear_connections method is adjusted to better fit the semantics of the previously proposed 0.88 patch, 3. a new delete_connection method is added to NMSettings, 4. the connection is deleted when the SecretsResponse.set_error method is called, thus preventing further attempts to connect and marking the network as no longer a favourite, 5. a new wipe method is added to NMSettingsConnection for removing a network from the connections file; the method was copied from save, 6. a new delete method is added to NMSettingsConnection for deleting a network (see #4 above), the connection is removed from the NMSettings dictionary first so that when the Removed signal is cascaded into the mesh box the favourite badge will be removed. --- src/jarabe/model/network.py | 47 ++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py index e43dba0..021d1a3 100644 --- a/src/jarabe/model/network.py +++ b/src/jarabe/model/network.py @@ -208,6 +208,7 @@ class NMSettings(dbus.service.Object): pass def add_connection(self, ssid, conn): + conn._nm_settings = self self.connections[ssid] = conn conn.secrets_request.connect(self.__secrets_request_cb) self.NewConnection(conn.path) @@ -217,9 +218,15 @@ class NMSettings(dbus.service.Object): response=kwargs['response']) def clear_connections(self): - for connection in self.connections.values(): - connection.Removed() - self.connections = {} + for uuid in self.connections.keys(): + conn = self.connections[uuid] + conn.Removed() + self.connections.pop(uuid) + + def delete_connection(self, conn): + for uuid in self.connections.keys(): + if self.connections[uuid] == conn: + self.connections.pop(uuid) class SecretsResponse(object): ''' Intermediate object to report the secrets from the dialog @@ -235,6 +242,7 @@ class SecretsResponse(object): self._reply_cb(secrets.get_dict()) def set_error(self, error): + self._connection.delete() self._error_cb(error) class NMSettingsConnection(dbus.service.Object): @@ -359,6 +367,39 @@ class NMSettingsConnection(dbus.service.Object): else: reply(self._secrets.get_dict()) + def wipe(self): + """ remove the connection from the stored connections file """ + profile_path = env.get_profile_path() + config_path = os.path.join(profile_path, 'nm', 'connections.cfg') + + config = ConfigParser.ConfigParser() + try: + try: + if not config.read(config_path): + logging.error('Error reading the nm config file') + return + except ConfigParser.ParsingError, e: + logging.error('Error reading the nm config file: %s' % e) + return + identifier = self._settings.connection.id + + if identifier in config.sections(): + config.remove_section(identifier) + except ConfigParser.Error, e: + logging.error('Error constructing %s: %s' % (identifier, e)) + else: + f = open(config_path, 'w') + try: + config.write(f) + except ConfigParser.Error, e: + logging.error('Can not write %s error: %s' % (config_path, e)) + f.close() + + def delete(self): + self._nm_settings.delete_connection(self) + self.wipe() + self.Removed() + class AccessPoint(gobject.GObject): __gsignals__ = { 'props-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, -- 1.7.0 -- James Cameron http://quozl.linux.org.au/ _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel