From cedc9dd175afba02e7beba21dc9eb4de1e63623d Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Sat, 29 Jun 2013 22:33:00 -0700 Subject: Adjust get_roster to always return, even with invalid JIDs Issue #245 --- sleekxmpp/clientxmpp.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'sleekxmpp/clientxmpp.py') diff --git a/sleekxmpp/clientxmpp.py b/sleekxmpp/clientxmpp.py index 905e1944..c8c389f6 100644 --- a/sleekxmpp/clientxmpp.py +++ b/sleekxmpp/clientxmpp.py @@ -96,6 +96,7 @@ class ClientXMPP(BaseXMPP): self.add_event_handler('connected', self._reset_connection_state) self.add_event_handler('session_bind', self._handle_session_bind) + self.add_event_handler('roster_update', self._handle_roster) self.register_stanza(StreamFeatures) @@ -106,7 +107,7 @@ class ClientXMPP(BaseXMPP): self.register_handler( Callback('Roster Update', StanzaPath('iq@type=set/roster'), - self._handle_roster)) + lambda iq: self.event('roster_update', iq))) # Setup default stream features self.register_plugin('feature_starttls') @@ -244,13 +245,22 @@ class ClientXMPP(BaseXMPP): if 'rosterver' in self.features: iq['roster']['ver'] = self.client_roster.version - if not block and callback is None: - callback = lambda resp: self._handle_roster(resp) + + if not block or callback is not None: + block = False + if callback is None: + callback = lambda resp: self.event('roster_update', resp) + else: + orig_cb = callback + def wrapped(resp): + self.event('roster_update', resp) + orig_cb(resp) + callback = wrapped response = iq.send(block, timeout, callback) if block: - self._handle_roster(response) + self.event('roster_update', response) return response def _reset_connection_state(self, event=None): @@ -301,7 +311,6 @@ class ClientXMPP(BaseXMPP): roster[jid].save(remove=(item['subscription'] == 'remove')) - self.event("roster_update", iq) if iq['type'] == 'set': resp = self.Iq(stype='result', sto=iq['from'], -- cgit v1.2.3