changeset c4a51dc63ab4 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=c4a51dc63ab4 description: use NEC to handle metacontacts events
diffstat:
src/common/connection_handlers.py | 27 +------------------------ src/common/connection_handlers_events.py | 33 +++++++++++++++++++++++++++++++- src/gui_interface.py | 7 ++--- src/roster_window.py | 5 ++++ 4 files changed, 42 insertions(+), 30 deletions(-)
diffs (128 lines):
diff -r 72c469a59514 -r c4a51dc63ab4 src/common/connection_handlers.py --- a/src/common/connection_handlers.py Sun Nov 28 01:33:03 2010 +0300 +++ b/src/common/connection_handlers.py Sun Nov 28 10:37:05 2010 +0100 @@ -651,31 +651,8 @@ if not self.connection: return if iq_obj.getType() == 'result': - # Metacontact tags - # http://www.xmpp.org/extensions/xep-0209.html - meta_list = {} - query = iq_obj.getTag('query') - storage = query.getTag('storage') - metas = storage.getTags('meta') - for meta in metas: - try: - jid = helpers.parse_jid(meta.getAttr('jid')) - except common.helpers.InvalidFormat: - continue - tag = meta.getAttr('tag') - data = {'jid': jid} - order = meta.getAttr('order') - try: - order = int(order) - except Exception: - order = 0 - if order is not None: - data['order'] = order - if tag in meta_list: - meta_list[tag].append(data) - else: - meta_list[tag] = [data] - self.dispatch('METACONTACTS', meta_list) + gajim.nec.push_incoming_event(MetacontactsReceivedEvent(None, + conn=self, stanza=iq_obj)) else: if iq_obj.getErrorCode() not in ('403', '406', '404'): self.private_storage_supported = False diff -r 72c469a59514 -r c4a51dc63ab4 src/common/connection_handlers_events.py --- a/src/common/connection_handlers_events.py Sun Nov 28 01:33:03 2010 +0300 +++ b/src/common/connection_handlers_events.py Sun Nov 28 10:37:05 2010 +0100 @@ -1522,4 +1522,35 @@
class PEPConfigReceivedEvent(nec.NetworkIncomingEvent): name = 'pep-config-received' - base_network_events = [] \ No newline at end of file + base_network_events = [] + +class MetacontactsReceivedEvent(nec.NetworkIncomingEvent): + name = 'metacontacts-received' + base_network_events = [] + + def generate(self): + # Metacontact tags + # http://www.xmpp.org/extensions/xep-0209.html + self.meta_list = {} + query = self.stanza.getTag('query') + storage = self.stanza.getTag('storage') + metas = self.stanza.getTags('meta') + for meta in metas: + try: + jid = helpers.parse_jid(meta.getAttr('jid')) + except common.helpers.InvalidFormat: + continue + tag = meta.getAttr('tag') + data = {'jid': jid} + order = meta.getAttr('order') + try: + order = int(order) + except Exception: + order = 0 + if order is not None: + data['order'] = order + if tag in self.meta_list: + self.meta_list[tag].append(data) + else: + self.meta_list[tag] = [data] + return True diff -r 72c469a59514 -r c4a51dc63ab4 src/gui_interface.py --- a/src/gui_interface.py Sun Nov 28 01:33:03 2010 +0300 +++ b/src/gui_interface.py Sun Nov 28 10:37:05 2010 +0100 @@ -1056,9 +1056,8 @@ gajim.config.set_per('accounts', account, 'last_archiving_time', time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()))
- def handle_event_metacontacts(self, account, tags_list): - gajim.contacts.define_metacontacts(account, tags_list) - self.roster.redraw_metacontacts(account) + def handle_event_metacontacts(self, obj): + gajim.contacts.define_metacontacts(obj.conn.name, obj.meta_list)
def handle_atom_entry(self, obj): AtomWindow.newAtomEntry(obj.atom_entry) @@ -1420,7 +1419,6 @@ 'FILE_REQUEST_ERROR': [self.handle_event_file_request_error], 'FILE_SEND_ERROR': [self.handle_event_file_send_error], 'SIGNED_IN': [self.handle_event_signed_in], - 'METACONTACTS': [self.handle_event_metacontacts], 'FAILED_DECRYPT': [self.handle_event_failed_decrypt], 'ZC_NAME_CONFLICT': [self.handle_event_zc_name_conflict], 'PASSWORD_REQUIRED': [self.handle_event_password_required], @@ -1447,6 +1445,7 @@ 'last-result-received': [self.handle_event_last_status_time], 'message-not-sent': [self.handle_event_msgnotsent], 'message-sent': [self.handle_event_msgsent], + 'metacontacts-received': [self.handle_event_metacontacts], 'muc-admin-received': [self.handle_event_gc_affiliation], 'muc-owner-received': [self.handle_event_gc_config], 'our-show': [self.handle_event_status], diff -r 72c469a59514 -r c4a51dc63ab4 src/roster_window.py --- a/src/roster_window.py Sun Nov 28 01:33:03 2010 +0300 +++ b/src/roster_window.py Sun Nov 28 10:37:05 2010 +0100 @@ -2514,6 +2514,9 @@ contact.status = obj.subject self.draw_contact(obj.room_jid, obj.conn.name)
+ def _nec_metacontacts_received(self, obj): + self.redraw_metacontacts(obj.conn.name) + ################################################################################ ### Menu and GUI callbacks ### FIXME: order callbacks in itself... @@ -6266,3 +6269,5 @@ self._nec_vcard_received) gajim.ged.register_event_handler('gc-subject-received', ged.GUI1, self._nec_gc_subject_received) + gajim.ged.register_event_handler('metacontacts-received', ged.GUI2, + self._nec_metacontacts_received)