Mercurial > libervia-backend
diff src/core/xmpp.py @ 2099:ad88808591ef
plugin XEP-0280: Message Carbons first draft
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 18 Dec 2016 20:21:31 +0100 |
parents | 0931b5a6213c |
children | 85f3e12e984d |
line wrap: on
line diff
--- a/src/core/xmpp.py Sun Dec 18 16:28:51 2016 +0100 +++ b/src/core/xmpp.py Sun Dec 18 20:21:31 2016 +0100 @@ -149,17 +149,15 @@ xmppim.MessageProtocol.__init__(self) self.host = host - def onMessage(self, message_elt): - # TODO: handle threads - client = self.parent - if not 'from' in message_elt.attributes: - message_elt['from'] = client.jid.host - log.debug(_(u"got message from: {from_}").format(from_=message_elt['from'])) - post_treat = defer.Deferred() # XXX: plugin can add their treatments to this deferred + @staticmethod + def parseMessage(message_elt, client=None): + """parse a message XML and return message_data - if not self.host.trigger.point("MessageReceived", client, message_elt, post_treat): - return - + @param message_elt(domish.Element): raw <message> xml + @param client(SatXMPPClient, None): client to map message id to uid + if None, mapping will not be done + @return(dict): message data + """ message = {} subject = {} extra = {} @@ -171,12 +169,13 @@ "type": message_elt.getAttribute('type', 'normal'), "extra": extra} - try: - data['stanza_id'] = message_elt['id'] - except KeyError: - pass - else: - client._mess_id_uid[(data['from'], data['stanza_id'])] = data['uid'] + if client is not None: + try: + data['stanza_id'] = message_elt['id'] + except KeyError: + pass + else: + client._mess_id_uid[(data['from'], data['stanza_id'])] = data['uid'] # message for e in message_elt.elements(C.NS_CLIENT, 'body'): @@ -197,7 +196,20 @@ data['received_timestamp'] = unicode(time.time()) if parsed_delay.sender: data['delay_sender'] = parsed_delay.sender.full() + return data + def onMessage(self, message_elt): + # TODO: handle threads + client = self.parent + if not 'from' in message_elt.attributes: + message_elt['from'] = client.jid.host + log.debug(_(u"got message from: {from_}").format(from_=message_elt['from'])) + post_treat = defer.Deferred() # XXX: plugin can add their treatments to this deferred + + if not self.host.trigger.point("MessageReceived", client, message_elt, post_treat): + return + + data = self.parseMessage(message_elt, client) post_treat.addCallback(self.skipEmptyMessage) post_treat.addCallback(self.addToHistory, client)