changeset 33412ebb9476 in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=33412ebb9476
description: re-organize whiteboard callbacks

diffstat:

 src/chat_control.py               |   2 +-
 src/common/connection_handlers.py |  13 ++----
 src/common/jingle.py              |  55 ++++++++++++++++++++++++---
 src/gajim.py                      |   1 +
 4 files changed, 56 insertions(+), 15 deletions(-)

diffs (176 lines):

diff -r 236a04e1fa69 -r 33412ebb9476 src/chat_control.py
--- a/src/chat_control.py       Tue Jul 21 16:23:34 2009 +0200
+++ b/src/chat_control.py       Tue Jul 21 18:11:50 2009 +0200
@@ -2750,7 +2750,7 @@
        
        def _on_whiteboard_button_clicked(self, widget):
                gajim.connections[self.account].startWhiteboard(
-                       self.contact.get_full_jid())
+                       self.contact.get_full_jid(), self)
 
        def draw_whiteboard(self, session):
                hbox = self.xml.get_widget('chat_child_hbox')
diff -r 236a04e1fa69 -r 33412ebb9476 src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Tue Jul 21 16:23:34 2009 +0200
+++ b/src/common/connection_handlers.py Tue Jul 21 18:11:50 2009 +0200
@@ -1788,6 +1788,11 @@
                        self._HttpAuthCB(con, msg)
                        return
 
+               # Whiteboard Handler
+               if msg.getTag('sxe', namespace='urn:xmpp:tmp:sxe'):
+                       self._whiteboardCB(con, msg)
+                       return
+
                try:
                        frm = helpers.get_full_jid_from_iq(msg)
                        jid = helpers.get_jid_from_iq(msg)
@@ -1933,10 +1938,6 @@
                self._on_message_decrypted((msgtxt, encrypted), mtype, msg, 
session, frm,
                        jid, invite, tim)
                
-               # Whiteboard Handler
-               if msg.getTag('sxe', namespace='urn:xmpp:tmp:sxe'):
-                       self._whiteboardCB(con, msg)
-               
        def _on_message_decrypted(self, output, mtype, msg, session, frm, jid,
        invite, tim):
                msgtxt, encrypted = output
@@ -2655,8 +2656,4 @@
                con.RegisterHandler('message', self._StanzaArrivedCB)
                con.RegisterHandler('unknown', self._StreamCB, 
'urn:ietf:params:xml:ns:xmpp-streams', xmlns='http://etherx.jabber.org/streams')
                                    
-       def _whiteboardCB(self, con, msg):
-               # Handles whiteboard messages
-               print 'got whiteboard message'
-               
 # vim: se ts=3:
diff -r 236a04e1fa69 -r 33412ebb9476 src/common/jingle.py
--- a/src/common/jingle.py      Tue Jul 21 16:23:34 2009 +0200
+++ b/src/common/jingle.py      Tue Jul 21 18:11:50 2009 +0200
@@ -20,6 +20,8 @@
 import xmpp
 import urllib
 
+from common import helpers
+
 import logging
 log = logging.getLogger('gajim.c.jingle')
 
@@ -327,10 +329,11 @@
 
 class JingleWhiteboard(JingleContent):
        ''' Jingle Whiteboard sessions consist of xhtml content'''
-       def __init__(self, session, node=None):
-               JingleContent.__init__(self, session, node)
+       def __init__(self, session, control=None):
+               JingleContent.__init__(self, session)
                self.negotiated = True # there is nothing to negotiate
                self.last_rid = 0
+               self.control = control
 
        def stanzaCB(self, stanza, content, error, action):
                ''' Called when something related to our content was sent by 
peer. '''
@@ -343,6 +346,7 @@
                        'transport-info': [],
                        'iq-result': [],
                        'iq-error': [],
+                       'edit': [self.__editCB],
                        # these are called when *we* sent these stanzas
                        'session-initiate-sent': [self.__sessionInitiateSentCB],
                        'session-accept-sent': [self.__sessionInitiateSentCB],
@@ -351,6 +355,10 @@
                for callback in callbacks:
                        callback(stanza, content, error, action)
 
+       def __editCB(self, stanza, content, error, action):
+               log.debug('got a whiteboard edit')
+               #TODO: extract data, draw it. We have self.control which point 
to the ChatControl
+
        def __sessionAcceptCB(self, stanza, content, error, action):
                log.debug('session accepted')
                self.session.connection.dispatch('WHITEBOARD_ACCEPTED',
@@ -655,7 +663,11 @@
                route it adequatelly.'''
 
                # get data
-               jid = stanza.getFrom()
+               try:
+                       jid = helpers.get_full_jid_from_iq(stanza)
+               except helpers.InvalidFormat:
+                       self.dispatch('ERROR', (_('Invalid Jabber ID'),
+                               _('A message from a non-valid JID arrived, it 
has been ignored.')))
                id = stanza.getID()
 
                if (jid, id) in self.__iq_responses.keys():
@@ -664,7 +676,8 @@
                        raise xmpp.NodeProcessed
 
                jingle = stanza.getTag('jingle')
-               if not jingle: return
+               if not jingle:
+                       return
                sid = jingle.getAttr('sid')
 
                # do we need to create a new jingle object
@@ -677,6 +690,36 @@
 
                raise xmpp.NodeProcessed
 
+       def _whiteboardCB(self, con, msg):
+               # Handles whiteboard messages
+               log.debug('_whiteboardCB')
+               try:
+                       jid = helpers.get_full_jid_from_iq(msg)
+               except helpers.InvalidFormat:
+                       self.dispatch('ERROR', (_('Invalid Jabber ID'),
+                               _('A message from a non-valid JID arrived, it 
has been ignored.')))
+
+               sxe = msg.getTag('sxe')
+               if not sxe:
+                       return
+               sid = sxe.getAttr('session')
+               if (jid, sid) not in self.__sessions:
+                       newjingle = JingleSession(con=self, weinitiate=False, 
jid=jid, sid=sid)
+                       self.addJingle(newjingle)
+
+               # we already have such session in dispatcher...
+               session = self.__sessions[(jid, sid)]
+               cn = session.contents[('initiator', 'xhtml')]
+               error = msg.getTag('error')
+               if error:
+                       action = 'iq-error'
+               else:
+                       action = 'edit'
+
+               cn.stanzaCB(msg, sxe, error, action)
+
+               raise xmpp.NodeProcessed
+
        def addJingleIqCallback(self, jid, id, jingle):
                self.__iq_responses[(jid, id)]=jingle
 
@@ -686,10 +729,10 @@
                jingle.addContent('voice', JingleVoiP(jingle))
                jingle.startSession()
 
-       def startWhiteboard(self, jid):
+       def startWhiteboard(self, jid, control):
                jingle = JingleSession(self, weinitiate=True, jid=jid)
                self.addJingle(jingle)
-               jingle.addContent('xhtml', JingleWhiteboard(jingle))
+               jingle.addContent('xhtml', JingleWhiteboard(jingle, control))
                jingle.startSession()
 
        def getJingleSession(self, jid, sid):
diff -r 236a04e1fa69 -r 33412ebb9476 src/gajim.py
--- a/src/gajim.py      Tue Jul 21 16:23:34 2009 +0200
+++ b/src/gajim.py      Tue Jul 21 18:11:50 2009 +0200
@@ -2265,6 +2265,7 @@
                                                self.new_chat_from_jid(account, 
jid)
                                                ctrl = 
self.msg_win_mgr.get_control(jid, account)
                                        session = 
session.contents[('initiator', 'xhtml')]
+                                       session.control = ctrl
                                        ctrl.draw_whiteboard(session)
 
                                def on_cancel():
_______________________________________________
Commits mailing list
Commits@gajim.org
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to