Mercurial > libervia-backend
comparison 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 |
comparison
equal
deleted
inserted
replaced
2098:e0066920a661 | 2099:ad88808591ef |
---|---|
147 | 147 |
148 def __init__(self, host): | 148 def __init__(self, host): |
149 xmppim.MessageProtocol.__init__(self) | 149 xmppim.MessageProtocol.__init__(self) |
150 self.host = host | 150 self.host = host |
151 | 151 |
152 def onMessage(self, message_elt): | 152 @staticmethod |
153 # TODO: handle threads | 153 def parseMessage(message_elt, client=None): |
154 client = self.parent | 154 """parse a message XML and return message_data |
155 if not 'from' in message_elt.attributes: | 155 |
156 message_elt['from'] = client.jid.host | 156 @param message_elt(domish.Element): raw <message> xml |
157 log.debug(_(u"got message from: {from_}").format(from_=message_elt['from'])) | 157 @param client(SatXMPPClient, None): client to map message id to uid |
158 post_treat = defer.Deferred() # XXX: plugin can add their treatments to this deferred | 158 if None, mapping will not be done |
159 | 159 @return(dict): message data |
160 if not self.host.trigger.point("MessageReceived", client, message_elt, post_treat): | 160 """ |
161 return | |
162 | |
163 message = {} | 161 message = {} |
164 subject = {} | 162 subject = {} |
165 extra = {} | 163 extra = {} |
166 data = {"from": jid.JID(message_elt['from']), | 164 data = {"from": jid.JID(message_elt['from']), |
167 "to": jid.JID(message_elt['to']), | 165 "to": jid.JID(message_elt['to']), |
169 "message": message, | 167 "message": message, |
170 "subject": subject, | 168 "subject": subject, |
171 "type": message_elt.getAttribute('type', 'normal'), | 169 "type": message_elt.getAttribute('type', 'normal'), |
172 "extra": extra} | 170 "extra": extra} |
173 | 171 |
174 try: | 172 if client is not None: |
175 data['stanza_id'] = message_elt['id'] | 173 try: |
176 except KeyError: | 174 data['stanza_id'] = message_elt['id'] |
177 pass | 175 except KeyError: |
178 else: | 176 pass |
179 client._mess_id_uid[(data['from'], data['stanza_id'])] = data['uid'] | 177 else: |
178 client._mess_id_uid[(data['from'], data['stanza_id'])] = data['uid'] | |
180 | 179 |
181 # message | 180 # message |
182 for e in message_elt.elements(C.NS_CLIENT, 'body'): | 181 for e in message_elt.elements(C.NS_CLIENT, 'body'): |
183 message[e.getAttribute((C.NS_XML,'lang'),'')] = unicode(e) | 182 message[e.getAttribute((C.NS_XML,'lang'),'')] = unicode(e) |
184 | 183 |
195 parsed_delay = delay.Delay.fromElement(delay_elt) | 194 parsed_delay = delay.Delay.fromElement(delay_elt) |
196 data['timestamp'] = calendar.timegm(parsed_delay.stamp.utctimetuple()) | 195 data['timestamp'] = calendar.timegm(parsed_delay.stamp.utctimetuple()) |
197 data['received_timestamp'] = unicode(time.time()) | 196 data['received_timestamp'] = unicode(time.time()) |
198 if parsed_delay.sender: | 197 if parsed_delay.sender: |
199 data['delay_sender'] = parsed_delay.sender.full() | 198 data['delay_sender'] = parsed_delay.sender.full() |
200 | 199 return data |
200 | |
201 def onMessage(self, message_elt): | |
202 # TODO: handle threads | |
203 client = self.parent | |
204 if not 'from' in message_elt.attributes: | |
205 message_elt['from'] = client.jid.host | |
206 log.debug(_(u"got message from: {from_}").format(from_=message_elt['from'])) | |
207 post_treat = defer.Deferred() # XXX: plugin can add their treatments to this deferred | |
208 | |
209 if not self.host.trigger.point("MessageReceived", client, message_elt, post_treat): | |
210 return | |
211 | |
212 data = self.parseMessage(message_elt, client) | |
201 | 213 |
202 post_treat.addCallback(self.skipEmptyMessage) | 214 post_treat.addCallback(self.skipEmptyMessage) |
203 post_treat.addCallback(self.addToHistory, client) | 215 post_treat.addCallback(self.addToHistory, client) |
204 post_treat.addErrback(self.treatmentsEb) | 216 post_treat.addErrback(self.treatmentsEb) |
205 post_treat.addCallback(self.bridgeSignal, client, data) | 217 post_treat.addCallback(self.bridgeSignal, client, data) |