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