Mercurial > libervia-backend
changeset 934:34dd9287dfe5
plugin account: bug fix profile deletion from the database + unsubscribe the contacts
author | souliane <souliane@mailoo.org> |
---|---|
date | Mon, 24 Mar 2014 16:21:14 +0100 |
parents | 955e5c781a40 |
children | 5b2d2f1f05d0 |
files | src/core/xmpp.py src/memory/sqlite.py src/plugins/plugin_misc_account.py |
diffstat | 3 files changed, 20 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/xmpp.py Mon Mar 24 10:16:07 2014 +0100 +++ b/src/core/xmpp.py Mon Mar 24 16:21:14 2014 +0100 @@ -84,7 +84,7 @@ self.conn_deferred.callback(None) def initializationFailed(self, reason): - print "initializationFailed: %s" % reason + error(_("ERROR: XMPP connection failed for profile '%(profile)s': %(reason)s" % {'profile': self.profile, 'reason': reason})) self.host_app.bridge.connectionError("AUTH_ERROR", self.profile) try: client.XMPPClient.initializationFailed(self, reason)
--- a/src/memory/sqlite.py Mon Mar 24 10:16:07 2014 +0100 +++ b/src/memory/sqlite.py Mon Mar 24 16:21:14 2014 +0100 @@ -85,6 +85,9 @@ self.dbpool = adbapi.ConnectionPool("sqlite3", db_filename, check_same_thread=False) # init_defer is the initialisation deferred, initialisation is ok when all its callbacks have been done + # XXX: foreign_keys activation doesn't seem to work, probably because of the multi-threading + # All the requests that need to use this feature should be run with runInteraction instead, + # so you can set the PRAGMA as it is done in self.deleteProfile init_defer = self.dbpool.runOperation("PRAGMA foreign_keys = ON").addErrback(lambda x: error(_("Can't activate foreign keys"))) def getNewBaseSql(): @@ -162,8 +165,13 @@ error(_("Can't delete profile [%s]") % name) return failure - del self.profiles[name] - d = self.dbpool.runQuery("DELETE FROM profiles WHERE name = ?", (name, )) + def delete(txn): + del self.profiles[name] + txn.execute("PRAGMA foreign_keys = ON") + txn.execute("DELETE FROM profiles WHERE name = ?", (name,)) + return None + + d = self.dbpool.runInteraction(delete) d.addCallback(lambda ignore: info(_("Profile [%s] deleted") % name)) d.addErrback(deletionError) return d
--- a/src/plugins/plugin_misc_account.py Mon Mar 24 10:16:07 2014 +0100 +++ b/src/plugins/plugin_misc_account.py Mon Mar 24 16:21:14 2014 +0100 @@ -105,6 +105,7 @@ d = defer.Deferred() prosody_reg = ProsodyRegisterProtocol(password, d) prosody_exe = join(plugin._prosody_path, plugin.getConfig('prosodyctl')) + # TODO delete account which are not on the same host reactor.spawnProcess(prosody_reg, prosody_exe, [prosody_exe, command, "%s@%s" % (profile, plugin.getConfig('new_account_domain'))], path=plugin._prosody_path) return d @@ -318,6 +319,14 @@ @param profile """ def userDeleted(result): + client = self.host.profiles[profile] + + for jid_ in client.roster._jids: # empty roster + client.presence.unsubscribe(jid_) + + for jid_ in self.host.memory.getWaitingSub(profile): # delete waiting subscriptions + self.host.memory.delWaitingSub(jid_) + self.host.disconnect(profile) self.host.memory.asyncDeleteProfile(profile, force=True) return defer.succeed({})