changeset 090d64323f65 in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=090d64323f65
description: use NEC to handle roster receipt

diffstat:

 src/common/connection_handlers.py        |  64 ++++++++++++++------------------
 src/common/connection_handlers_events.py |  28 ++++++++++++++
 2 files changed, 56 insertions(+), 36 deletions(-)

diffs (134 lines):

diff -r 07225a721fda -r 090d64323f65 src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Sat Aug 28 13:58:35 2010 +0200
+++ b/src/common/connection_handlers.py Sun Aug 29 20:22:20 2010 +0200
@@ -1100,6 +1100,8 @@
         
gajim.ged.register_event_handler('private-storage-rosternotes-received',
             ged.CORE, self._nec_private_storate_rosternotes_received)
         gajim.nec.register_incoming_event(RosternotesReceivedEvent)
+        gajim.ged.register_event_handler('roster-received', ged.CORE,
+            self._nec_roster_received)
 
     def build_http_auth_answer(self, iq_obj, answer):
         if not self.connection or self.connected < 2:
@@ -2120,19 +2122,21 @@
     def discover_ft_proxies(self):
         cfg_proxies = gajim.config.get_per('accounts', self.name,
                 'file_transfer_proxies')
-        our_jid = helpers.parse_jid(gajim.get_jid_from_account(self.name) + 
'/' +\
-                self.server_resource)
+        our_jid = helpers.parse_jid(gajim.get_jid_from_account(self.name) + \
+            '/' + self.server_resource)
         if cfg_proxies:
             proxies = [e.strip() for e in cfg_proxies.split(',')]
             for proxy in proxies:
                 gajim.proxy65_manager.resolve(proxy, self.connection, our_jid)
 
     def _on_roster_set(self, roster):
-        roster_version = roster.version
-        received_from_server = roster.received_from_server
-        raw_roster = roster.getRaw()
-        roster = {}
-        our_jid = helpers.parse_jid(gajim.get_jid_from_account(self.name))
+        gajim.nec.push_incoming_event(RosterReceivedEvent(None, conn=self,
+            xmpp_roster=roster))
+
+    def _nec_roster_received(self, obj):
+        if obj.conn.name != self.name:
+            return
+        our_jid = gajim.get_jid_from_account(self.name)
         if self.connected > 1 and self.continue_connect_info:
             msg = self.continue_connect_info[1]
             sign_msg = self.continue_connect_info[2]
@@ -2148,37 +2152,25 @@
             if send_first_presence:
                 self._send_first_presence(signed)
 
-        for jid in raw_roster:
-            try:
-                j = helpers.parse_jid(jid)
-            except Exception:
-                print >> sys.stderr, _('JID %s is not RFC compliant. It will 
not be added to your roster. Use roster management tools such as 
http://jru.jabberstudio.org/ to remove it') % jid
-            else:
-                infos = raw_roster[jid]
-                if jid != our_jid and (not infos['subscription'] or \
-                infos['subscription'] == 'none') and (not infos['ask'] or \
-                infos['ask'] == 'none') and not infos['name'] and \
-                not infos['groups']:
-                    # remove this useless item, it won't be shown in roster 
anyway
-                    self.connection.getRoster().delItem(jid)
-                elif jid != our_jid: # don't add our jid
-                    roster[j] = raw_roster[jid]
-                    if gajim.jid_is_transport(jid) and \
-                    not gajim.get_transport_name_from_jid(jid):
-                        # we can't determine which iconset to use
-                        self.discoverInfo(jid)
+        for jid in obj.roster:
+            if jid != our_jid and gajim.jid_is_transport(jid) and \
+            not gajim.get_transport_name_from_jid(jid):
+                # we can't determine which iconset to use
+                self.discoverInfo(jid)
 
-        gajim.logger.replace_roster(self.name, roster_version, roster)
-        if received_from_server:
+        gajim.logger.replace_roster(self.name, obj.version, obj.roster)
+        if obj.received_from_server:
             for contact in gajim.contacts.iter_contacts(self.name):
-                if not contact.is_groupchat() and contact.jid not in roster 
and \
-                contact.jid != gajim.get_jid_from_account(self.name):
-                    self.dispatch('ROSTER_INFO', (contact.jid, None, None, 
None,
-                            ()))
-            for jid in roster:
-                self.dispatch('ROSTER_INFO', (jid, roster[jid]['name'],
-                        roster[jid]['subscription'], roster[jid]['ask'],
-                        roster[jid]['groups']))
+                if not contact.is_groupchat() and contact.jid not in 
obj.roster\
+                and contact.jid != our_jid:
+                    gajim.nec.push_incoming_event(RosterInfoEvent(None,
+                        conn=self, jid=contact.jid, nickname=None, sub=None,
+                        ask=None, groups=()))
+            for jid, info in obj.roster.items():
+                gajim.nec.push_incoming_event(RosterInfoEvent(None,
+                    conn=self, jid=jid, nickname=info['name'],
+                    sub=info['subscription'], ask=info['ask'],
+                    groups=info['groups']))
 
     def _send_first_presence(self, signed = ''):
         show = self.continue_connect_info[0]
diff -r 07225a721fda -r 090d64323f65 src/common/connection_handlers_events.py
--- a/src/common/connection_handlers_events.py  Sat Aug 28 13:58:35 2010 +0200
+++ b/src/common/connection_handlers_events.py  Sun Aug 29 20:22:20 2010 +0200
@@ -275,6 +275,34 @@
     name = 'time-revised-request-received'
     base_network_events = []
 
+class RosterReceivedEvent(nec.NetworkIncomingEvent):
+    name = 'roster-received'
+    base_network_events = []
+
+    def generate(self):
+        self.version = self.xmpp_roster.version
+        self.received_from_server = self.xmpp_roster.received_from_server
+        self.roster = {}
+        raw_roster = self.xmpp_roster.getRaw()
+        our_jid = gajim.get_jid_from_account(self.name)
+
+        for jid in raw_roster:
+            try:
+                j = helpers.parse_jid(jid)
+            except Exception:
+                print >> sys.stderr, _('JID %s is not RFC compliant. It will 
not be added to your roster. Use roster management tools such as 
http://jru.jabberstudio.org/ to remove it') % jid
+            else:
+                infos = raw_roster[jid]
+                if jid != our_jid and (not infos['subscription'] or \
+                infos['subscription'] == 'none') and (not infos['ask'] or \
+                infos['ask'] == 'none') and not infos['name'] and \
+                not infos['groups']:
+                    # remove this useless item, it won't be shown in roster 
anyway
+                    self.conn.connection.getRoster().delItem(jid)
+                elif jid != our_jid: # don't add our jid
+                    self.roster[j] = raw_roster[jid]
+        return True
+
 class RosterSetReceivedEvent(nec.NetworkIncomingEvent):
     name = 'roster-set-received'
     base_network_events = []
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to