changeset 7b587c0cfe0c in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=7b587c0cfe0c
description: use NEC to handle PEP / ATOM messages

diffstat:

 src/chat_control.py                      |  19 ++++++++++++
 src/common/connection_handlers_events.py |  49 ++++++++++++++++++++++++++++++-
 src/common/pep.py                        |  31 +++----------------
 src/gui_interface.py                     |  29 +----------------
 src/roster_window.py                     |  12 +++++++-
 5 files changed, 85 insertions(+), 55 deletions(-)

diffs (271 lines):

diff -r 89d7d4e1878c -r 7b587c0cfe0c src/chat_control.py
--- a/src/chat_control.py       Wed Nov 24 10:33:34 2010 +0100
+++ b/src/chat_control.py       Wed Nov 24 11:41:20 2010 +0100
@@ -1597,6 +1597,9 @@
             self._video_button.set_tooltip_text(
                 '%s\n%s' % (tooltip_text, _('Requires python-farsight.')))
 
+        gajim.ged.register_event_handler('pep-received', ged.GUI1,
+            self._nec_pep_received)
+
         # PluginSystem: adding GUI extension point for this ChatControl
         # instance object
         gajim.plugin_manager.gui_extension_point('chat_control', self)
@@ -1670,6 +1673,19 @@
         else:
             img.hide()
 
+    def _nec_pep_received(self, obj):
+        if obj.conn.name != self.account:
+            return
+        if obj.jid != self.contact.jid:
+            return
+
+        if obj.pep_type == 'nickname':
+            self.update_ui()
+            self.parent_win.redraw_tab(self)
+            self.parent_win.show_title()
+        else:
+            self.update_pep(obj.pep_type)
+
     def _update_jingle(self, jingle_type):
         if jingle_type not in ('audio', 'video'):
             return
@@ -2567,6 +2583,9 @@
         # instance object
         gajim.plugin_manager.remove_gui_extension_point('chat_control', self)  
      # Send 'gone' chatstate
 
+        gajim.ged.remove_event_handler('pep-received', ged.GUI1,
+            self._nec_pep_received)
+
         self.send_chatstate('gone', self.contact)
         self.contact.chatstate = None
         self.contact.our_chatstate = None
diff -r 89d7d4e1878c -r 7b587c0cfe0c src/common/connection_handlers_events.py
--- a/src/common/connection_handlers_events.py  Wed Nov 24 10:33:34 2010 +0100
+++ b/src/common/connection_handlers_events.py  Wed Nov 24 11:41:20 2010 +0100
@@ -24,6 +24,7 @@
 from calendar import timegm
 import hmac
 
+from common import atom
 from common import nec
 from common import helpers
 from common import gajim
@@ -31,6 +32,7 @@
 from common import dataforms
 from common import exceptions
 from common.logger import LOG_DB_PATH
+from common.pep import SUPPORTED_PERSONAL_USER_EVENTS
 
 import logging
 log = logging.getLogger('gajim.c.connection_handlers_events')
@@ -1358,11 +1360,11 @@
         self._extract_caps_from_presence()
         return True
 
-class CapsDiscoReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
+class CapsDiscoReceivedEvent(nec.NetworkIncomingEvent):
     name = 'caps-disco-received'
     base_network_events = []
 
-class CapsReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
+class CapsReceivedEvent(nec.NetworkIncomingEvent):
     name = 'caps-received'
     base_network_events = ['caps-presence-received', 'caps-disco-received']
 
@@ -1385,3 +1387,46 @@
     def generate(self):
         self.keyid = gajim.config.get_per('accounts', self.conn.name, 'keyid')
         return True
+
+class PEPReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
+    name = 'pep-received'
+    base_network_events = []
+
+    def generate(self):
+        if not self.stanza.getTag('event'):
+            return
+        if self.stanza.getTag('error'):
+            log.debug('PEPReceivedEvent received error stanza. Ignoring')
+            return
+
+        try:
+            self.get_jid_resource()
+        except Exception:
+            return
+
+        self.event_tag = self.stanza.getTag('event')
+
+        for pep_class in SUPPORTED_PERSONAL_USER_EVENTS:
+            pep = pep_class.get_tag_as_PEP(self.fjid, self.conn.name,
+                self.event_tag)
+            if pep:
+                self.pep_type = pep.type
+                return True
+
+        items = self.event_tag.getTag('items')
+        if items:
+            # for each entry in feed (there shouldn't be more than one, but to
+            # be sure...
+            for item in items.getTags('item'):
+                entry = item.getTag('entry', namespace=xmpp.NS_ATOM)
+                if entry:
+                    gajim.nec.push_incoming_event(AtomEntryReceived(None,
+                        conn=self.conn, node=entry))
+
+class AtomEntryReceived(nec.NetworkIncomingEvent):
+    name = 'atom-entry-received'
+    base_network_events = []
+
+    def generate(self):
+        self.atom_entry = atom.OldEntry(node=entry)
+        return True
diff -r 89d7d4e1878c -r 7b587c0cfe0c src/common/pep.py
--- a/src/common/pep.py Wed Nov 24 10:33:34 2010 +0100
+++ b/src/common/pep.py Wed Nov 24 11:41:20 2010 +0100
@@ -203,7 +203,6 @@
 log = logging.getLogger('gajim.c.pep')
 
 from common import helpers
-from common import atom
 from common import xmpp
 from common import gajim
 
@@ -492,7 +491,9 @@
 
 
 SUPPORTED_PERSONAL_USER_EVENTS = [UserMoodPEP, UserTunePEP, UserActivityPEP,
-                                                                               
          UserNicknamePEP, UserLocationPEP]
+    UserNicknamePEP, UserLocationPEP]
+
+from common.connection_handlers_events import PEPReceivedEvent
 
 class ConnectionPEP(object):
 
@@ -530,30 +531,8 @@
 
     def _pubsubEventCB(self, xmpp_dispatcher, msg):
         ''' Called when we receive <message /> with pubsub event. '''
-        if not msg.getTag('event'):
-            return
-        if msg.getTag('error'):
-            log.debug('PubsubEventCB received error stanza. Ignoring')
-            raise xmpp.NodeProcessed
-
-        jid = helpers.get_full_jid_from_iq(msg)
-        event_tag = msg.getTag('event')
-
-        for pep_class in SUPPORTED_PERSONAL_USER_EVENTS:
-            pep = pep_class.get_tag_as_PEP(jid, self._account, event_tag)
-            if pep:
-                self._dispatcher.dispatch('PEP_RECEIVED', (jid, pep.type))
-
-        items = event_tag.getTag('items')
-        if items:
-            for item in items.getTags('item'):
-                entry = item.getTag('entry', namespace=xmpp.NS_ATOM)
-                if entry:
-                    # for each entry in feed (there shouldn't be more than one,
-                    # but to be sure...
-                    self._dispatcher.dispatch('ATOM_ENTRY',
-                            (atom.OldEntry(node=entry),))
-
+        gajim.nec.push_incoming_event(PEPReceivedEvent(None, conn=self,
+            stanza=msg))
         raise xmpp.NodeProcessed
 
     def send_activity(self, activity, subactivity=None, message=None):
diff -r 89d7d4e1878c -r 7b587c0cfe0c src/gui_interface.py
--- a/src/gui_interface.py      Wed Nov 24 10:33:34 2010 +0100
+++ b/src/gui_interface.py      Wed Nov 24 11:41:20 2010 +0100
@@ -1186,9 +1186,8 @@
         gajim.contacts.define_metacontacts(account, tags_list)
         self.roster.redraw_metacontacts(account)
 
-    def handle_atom_entry(self, account, data):
-        atom_entry, = data
-        AtomWindow.newAtomEntry(atom_entry)
+    def handle_atom_entry(self, obj):
+        AtomWindow.newAtomEntry(obj.atom_entry)
 
     def handle_event_failed_decrypt(self, account, data):
         jid, tim, session = data
@@ -1597,27 +1596,6 @@
             checktext2, on_response_ok=on_ok, on_response_cancel=on_cancel,
             is_modal=False)
 
-    def handle_event_pep_received(self, account, data):
-        # ('PEP_RECEIVED', account, (jid, pep_type))
-        jid = data[0]
-        pep_type = data[1]
-        ctrl = common.gajim.interface.msg_win_mgr.get_control(jid, account)
-
-        if jid == common.gajim.get_jid_from_account(account):
-            self.roster.draw_account(account)
-
-        if pep_type == 'nickname':
-            self.roster.draw_contact(jid, account)
-            if ctrl:
-                ctrl.update_ui()
-                win = ctrl.parent_win
-                win.redraw_tab(ctrl)
-                win.show_title()
-        else:
-            self.roster.draw_pep(jid, account, pep_type)
-            if ctrl:
-                ctrl.update_pep(pep_type)
-
     def create_core_handlers_list(self):
         self.handlers = {
             'WARNING': [self.handle_event_warning],
@@ -1636,7 +1614,6 @@
             'FILE_SEND_ERROR': [self.handle_event_file_send_error],
             'SIGNED_IN': [self.handle_event_signed_in],
             'METACONTACTS': [self.handle_event_metacontacts],
-            'ATOM_ENTRY': [self.handle_atom_entry],
             'FAILED_DECRYPT': [self.handle_event_failed_decrypt],
             'PRIVACY_LISTS_RECEIVED': \
                 [self.handle_event_privacy_lists_received],
@@ -1657,7 +1634,7 @@
             'INSECURE_SSL_CONNECTION': \
                 [self.handle_event_insecure_ssl_connection],
             'INSECURE_PASSWORD': [self.handle_event_insecure_password],
-            'PEP_RECEIVED': [self.handle_event_pep_received],
+            'atom-entry-received': [self.handle_atom_entry],
             'bad-gpg-passphrase': [self.handle_event_bad_gpg_passphrase],
             'bookmarks-received': [self.handle_event_bookmarks],
             'connection-lost': [self.handle_event_connection_lost],
diff -r 89d7d4e1878c -r 7b587c0cfe0c src/roster_window.py
--- a/src/roster_window.py      Wed Nov 24 10:33:34 2010 +0100
+++ b/src/roster_window.py      Wed Nov 24 11:41:20 2010 +0100
@@ -1287,7 +1287,6 @@
         iters = self._get_contact_iter(jid, account, model=self.model)
         if not iters:
             return
-        jid = self.model[iters[0]][C_JID].decode('utf-8')
         contact = gajim.contacts.get_contact(account, jid)
         if pep_type in contact.pep:
             pixbuf = contact.pep[pep_type].asPixbufIcon()
@@ -2493,6 +2492,15 @@
         for jid in obj.jid_list:
             self.remove_contact(jid, obj.conn.name, backend=True)
 
+    def _nec_pep_received(self, obj):
+        if obj.jid == common.gajim.get_jid_from_account(obj.conn.name):
+            self.draw_account(obj.conn.name)
+
+        if obj.pep_type == 'nickname':
+            self.draw_contact(obj.jid, obj.conn.name)
+        else:
+            self.draw_pep(obj.jid, obj.conn.name, obj.pep_type)
+
 
################################################################################
 ### Menu and GUI callbacks
 ### FIXME: order callbacks in itself...
@@ -6245,3 +6253,5 @@
             self._nec_connection_type)
         gajim.ged.register_event_handler('agent-removed', ged.GUI1,
             self._nec_agent_removed)
+        gajim.ged.register_event_handler('pep-received', ged.GUI1,
+            self._nec_pep_received)
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to