Mercurial > libervia-backend
diff src/core/xmpp.py @ 1053:71d63750963e
core (XMPP): message received (onMessage) refactoring:
- better separation of actions
- use of failure.trap and generic exception (CancelError/SkipHistory)
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 07 Jun 2014 16:38:53 +0200 |
parents | 6e975c6b0faf |
children | aa15453ec54d |
line wrap: on
line diff
--- a/src/core/xmpp.py Sat Jun 07 16:35:29 2014 +0200 +++ b/src/core/xmpp.py Sat Jun 07 16:38:53 2014 +0200 @@ -17,7 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -from sat.core.i18n import _, D_ +from sat.core.i18n import _ from sat.core.constants import Const as C from twisted.internet import task, defer from twisted.words.protocols.jabber import jid, xmlstream @@ -130,7 +130,12 @@ data['type'] = message['type'] if message.hasAttribute('type') else 'normal' - def after_treatments(data): + def bridgeSignal(data): + if data is not None: + self.host.bridge.newMessage(data['from'], data['body'], data['type'], data['to'], data['extra'], profile=self.parent.profile) + return data + + def addToHistory(data): # set message body to empty string by default, and later # also forward message without body (chat state notification...) try: @@ -142,9 +147,20 @@ self.host.memory.addToHistory(jid.JID(data['from']), jid.JID(data['to']), data['body'], data['type'], data['extra'], timestamp, profile=self.parent.profile) except IndexError: self.host.memory.addToHistory(jid.JID(data['from']), jid.JID(data['to']), data['body'], data['type'], data['extra'], profile=self.parent.profile) - self.host.bridge.newMessage(data['from'], data['body'], data['type'], data['to'], data['extra'], profile=self.parent.profile) + return data + + def treatmentsEb(failure): + failure.trap(exceptions.SkipHistory) + return data - post_treat.addCallback(after_treatments) + def cancelErrorTrap(failure): + """A message sending can be cancelled by a plugin treatment""" + failure.trap(exceptions.CancelError) + + post_treat.addCallback(addToHistory) + post_treat.addErrback(treatmentsEb) + post_treat.addCallback(bridgeSignal) + post_treat.addErrback(cancelErrorTrap) post_treat.callback(data)