From 33a9f1434f1fe85db4bf78b8524037356079d5c3 Mon Sep 17 00:00:00 2001 From: mathieui Date: Wed, 24 Jul 2013 21:34:14 +0200 Subject: [PATCH] Fix contact removal --- src/roster.py | 28 +++++++++++++++++----------- src/tabs.py | 2 +- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/roster.py b/src/roster.py index d6fed94f..5a068909 100644 --- a/src/roster.py +++ b/src/roster.py @@ -69,18 +69,10 @@ class Roster(object): """Set the a Contact value for the bare jid key""" self.contacts[key] = value - def __delitem__(self, jid): - """Remove a contact from the roster""" + def remove(self, jid): + """Send a removal iq to the server""" jid = safeJID(jid).bare - contact = self[jid] - if not contact: - return - for group in list(self.groups.values()): - group.remove(contact) - if not group: - del self.groups[group.name] - del self.contacts[contact.bare_jid] - if jid in self.jids(): + if self.__node[jid]: try: self.__node[jid].send_presence(ptype='unavailable') self.__node.remove(jid) @@ -88,6 +80,20 @@ class Roster(object): import traceback log.debug('IqError when removing %s:\n%s', jid, traceback.format_exc()) + def __delitem__(self, jid): + """Remove a contact from the roster view""" + jid = safeJID(jid).bare + contact = self[jid] + if not contact: + return + del self.contacts[contact.bare_jid] + + for group in list(self.groups.values()): + group.remove(contact) + if not group: + del self.groups[group.name] + self.modified() + def __iter__(self): """Iterate over the jids of the contacts""" return iter(self.contacts.values()) diff --git a/src/tabs.py b/src/tabs.py index eb5b2192..3890adaf 100644 --- a/src/tabs.py +++ b/src/tabs.py @@ -2613,8 +2613,8 @@ class RosterInfoTab(Tab): else: self.core.information('No roster item to remove') return + roster.remove(jid) del roster[jid] - roster.modified() def command_import(self, arg): """