changeset 594e4e36ea10 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=594e4e36ea10
description: use NEC to handle roster set events
diffstat:
src/common/connection_handlers.py | 76 +++++++++++++++++++++++++-------------
src/gui_interface.py | 49 +++++++++++-------------
src/remote_control.py | 6 +++
3 files changed, 78 insertions(+), 53 deletions(-)
diffs (215 lines):
diff -r 35502dcd3554 -r 594e4e36ea10 src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Mon Aug 23 10:40:04 2010 +0200
+++ b/src/common/connection_handlers.py Mon Aug 23 14:35:03 2010 +0200
@@ -1088,6 +1088,8 @@
self._nec_time_request_received)
gajim.ged.register_event_handler('time-revised-request-received',
ged.CORE, self._nec_time_revised_request_received)
+ gajim.ged.register_event_handler('roster-set-received',
+ ged.CORE, self._nec_roster_set_received)
def build_http_auth_answer(self, iq_obj, answer):
if not self.connection or self.connected < 2:
@@ -1235,32 +1237,22 @@
def _rosterSetCB(self, con, iq_obj):
log.debug('rosterSetCB')
- version = iq_obj.getTagAttr('query', 'ver')
- for item in iq_obj.getTag('query').getChildren():
- try:
- jid = helpers.parse_jid(item.getAttr('jid'))
- except common.helpers.InvalidFormat:
- log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
- continue
- name = item.getAttr('name')
- sub = item.getAttr('subscription')
- ask = item.getAttr('ask')
- groups = []
- for group in item.getTags('group'):
- groups.append(group.getData())
- self.dispatch('ROSTER_INFO', (jid, name, sub, ask, groups))
+ gajim.nec.push_incoming_event(RosterSetReceivedEvent(None, conn=self,
+ iq_obj=iq_obj))
+ raise common.xmpp.NodeProcessed
+
+ def _nec_roster_set_received(self, obj):
+ for jid in obj.items:
+ item = obj.items[jid]
+ gajim.nec.push_incoming_event(RosterInfoEvent(None, conn=self,
+ jid=jid, nickname=item['name'], sub=item['sub'],
ask=item['ask'],
+ groups=item['groups']))
account_jid = gajim.get_jid_from_account(self.name)
- gajim.logger.add_or_update_contact(account_jid, jid, name, sub,
ask,
- groups)
- if version:
- gajim.config.set_per('accounts', self.name, 'roster_version',
- version)
- if not self.connection or self.connected < 2:
- raise common.xmpp.NodeProcessed
- reply = common.xmpp.Iq(typ='result', attrs={'id': iq_obj.getID()},
- to=iq_obj.getFrom(), frm=iq_obj.getTo(), xmlns=None)
- self.connection.send(reply)
- raise common.xmpp.NodeProcessed
+ gajim.logger.add_or_update_contact(account_jid, jid, item['name'],
+ item['sub'], item['ask'], item['groups'])
+ if obj.version:
+ gajim.config.set_per('accounts', self.name, 'roster_version',
+ obj.version)
def _VersionCB(self, con, iq_obj):
log.debug('VersionCB')
@@ -2681,4 +2673,36 @@
class TimeRevisedRequestEvent(nec.NetworkIncomingEvent):
name = 'time-revised-request-received'
- base_network_events = []
\ No newline at end of file
+ base_network_events = []
+
+class RosterSetReceivedEvent(nec.NetworkIncomingEvent):
+ name = 'roster-set-received'
+ base_network_events = []
+
+ def generate(self):
+ self.version = self.iq_obj.getTagAttr('query', 'ver')
+ self.items = {}
+ for item in self.iq_obj.getTag('query').getChildren():
+ try:
+ jid = helpers.parse_jid(item.getAttr('jid'))
+ except common.helpers.InvalidFormat:
+ log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
+ continue
+ name = item.getAttr('name')
+ sub = item.getAttr('subscription')
+ ask = item.getAttr('ask')
+ groups = []
+ for group in item.getTags('group'):
+ groups.append(group.getData())
+ self.items[jid] = {'name': name, 'sub': sub, 'ask': ask,
+ 'groups': groups}
+ if self.conn.connection and self.conn.connected > 1:
+ reply = common.xmpp.Iq(typ='result',
+ attrs={'id': self.iq_obj.getID()}, to=self.iq_obj.getFrom(),
+ frm=self.iq_obj.getTo(), xmlns=None)
+ self.conn.connection.send(reply)
+ return True
+
+class RosterInfoEvent(nec.NetworkIncomingEvent):
+ name = 'roster-info'
+ base_network_events = []
diff -r 35502dcd3554 -r 594e4e36ea10 src/gui_interface.py
--- a/src/gui_interface.py Mon Aug 23 10:40:04 2010 +0200
+++ b/src/gui_interface.py Mon Aug 23 14:35:03 2010 +0200
@@ -1211,52 +1211,47 @@
_('Password Required'), text, _('Save password'), ok_handler=on_ok,
cancel_handler=on_cancel)
- def handle_event_roster_info(self, account, array):
+ def handle_event_roster_info(self, obj):
#('ROSTER_INFO', account, (jid, name, sub, ask, groups))
- jid = array[0]
- name = array[1]
- sub = array[2]
- ask = array[3]
- groups = array[4]
- contacts = gajim.contacts.get_contacts(account, jid)
- if (not sub or sub == 'none') and (not ask or ask == 'none') and \
- not name and not groups:
+ account = obj.conn.name
+ contacts = gajim.contacts.get_contacts(account, obj.jid)
+ if (not obj.sub or obj.sub == 'none') and \
+ (not obj.ask or obj.ask == 'none') and not obj.nickname and \
+ not obj.groups:
# contact removed us.
if contacts:
- self.roster.remove_contact(jid, account, backend=True)
+ self.roster.remove_contact(obj.jid, account, backend=True)
return
elif not contacts:
- if sub == 'remove':
+ if obj.sub == 'remove':
return
# Add new contact to roster
- contact = gajim.contacts.create_contact(jid=jid, account=account,
- name=name, groups=groups, show='offline', sub=sub, ask=ask)
+ contact = gajim.contacts.create_contact(jid=obj.jid,
+ account=account, name=obj.nickname, groups=obj.groups,
+ show='offline', sub=obj.sub, ask=obj.ask)
gajim.contacts.add_contact(account, contact)
- self.roster.add_contact(jid, account)
+ self.roster.add_contact(obj.jid, account)
else:
# If contact has changed (sub, ask or group) update roster
# Mind about observer status changes:
# According to xep 0162, a contact is not an observer anymore
when
# we asked for auth, so also remove him if ask changed
old_groups = contacts[0].groups
- if contacts[0].sub != sub or contacts[0].ask != ask\
- or old_groups != groups:
+ if contacts[0].sub != obj.sub or contacts[0].ask != obj.ask\
+ or old_groups != obj.groups:
# c.get_shown_groups() has changed. Reflect that in
# roster_winodow
- self.roster.remove_contact(jid, account, force=True)
+ self.roster.remove_contact(obj.jid, account, force=True)
for contact in contacts:
- contact.name = name or ''
- contact.sub = sub
- contact.ask = ask
- contact.groups = groups or []
- self.roster.add_contact(jid, account)
+ contact.name = obj.nickname or ''
+ contact.sub = obj.sub
+ contact.ask = obj.ask
+ contact.groups = obj.groups or []
+ self.roster.add_contact(obj.jid, account)
# Refilter and update old groups
for group in old_groups:
self.roster.draw_group(group, account)
- self.roster.draw_contact(jid, account)
-
- if self.remote_ctrl:
- self.remote_ctrl.raise_signal('RosterInfo', (account, array))
+ self.roster.draw_contact(obj.jid, account)
def handle_event_bookmarks(self, account, bms):
# ('BOOKMARKS', account, [{name,jid,autojoin,password,nick}, {}])
@@ -2116,7 +2111,6 @@
'GC_PASSWORD_REQUIRED': [self.handle_event_gc_password_required],
'GC_ERROR': [self.handle_event_gc_error],
'BAD_PASSPHRASE': [self.handle_event_bad_passphrase],
- 'ROSTER_INFO': [self.handle_event_roster_info],
'BOOKMARKS': [self.handle_event_bookmarks],
'CON_TYPE': [self.handle_event_con_type],
'CONNECTION_LOST': [self.handle_event_connection_lost],
@@ -2172,6 +2166,7 @@
'last-result-received': [self.handle_event_last_status_time],
'roster-item-exchange-received': \
[self.handle_event_roster_item_exchange],
+ 'roster-info': [self.handle_event_roster_info],
}
def register_core_handlers(self):
diff -r 35502dcd3554 -r 594e4e36ea10 src/remote_control.py
--- a/src/remote_control.py Mon Aug 23 10:40:04 2010 +0200
+++ b/src/remote_control.py Mon Aug 23 14:35:03 2010 +0200
@@ -113,6 +113,8 @@
self.on_time)
gajim.ged.register_event_handler('gmail-nofify', ged.POSTGUI,
self.on_gmail_notify)
+ gajim.ged.register_event_handler('roster-info', ged.POSTGUI,
+ self.on_roster_info)
def on_last_status_time(self, obj):
self.raise_signal('LastStatusTime', (obj.conn.name, [
@@ -130,6 +132,10 @@
self.raise_signal('NewGmail', (obj.conn.name, [obj.jid, obj.newmsgs,
obj.gmail_messages_list]))
+ def on_roster_info(self, obj):
+ self.raise_signal('RosterInfo', (obj.conn.name, [obj.jid, obj.name,
+ obj.sub, obj.ask, obj.groups]))
+
def raise_signal(self, signal, arg):
if self.signal_object:
try:
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits