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