core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation

This commit is contained in:
Goffi 2014-03-22 15:34:05 +01:00
commit 93826f1ce8

View file

@ -489,7 +489,8 @@ class SAT(service.Service):
"type": mess_type,
"extra": extra,
}
treatments = defer.Deferred() # XXX: plugin can add their treatments to this deferred
pre_xml_treatments = defer.Deferred() # XXX: plugin can add their pre XML treatments to this deferred
post_xml_treatments = defer.Deferred() # XXX: plugin can add their post XML treatments to this deferred
if mess_data["type"] == "auto":
# we try to guess the type
@ -512,19 +513,22 @@ class SAT(service.Service):
mess_data["type"] == "chat" if mess_data["subject"] else "normal"
if not no_trigger:
if not self.trigger.point("sendMessage", mess_data, treatments, profile):
if not self.trigger.point("sendMessage", mess_data, pre_xml_treatments, post_xml_treatments, profile):
return defer.succeed(None)
debug(_("Sending jabber message of type [%(type)s] to %(to)s...") % {"type": mess_data["type"], "to": to_jid.full()})
mess_data['xml'] = domish.Element((None, 'message'))
mess_data['xml']["to"] = mess_data["to"].full()
mess_data['xml']["from"] = current_jid.full()
mess_data['xml']["type"] = mess_data["type"]
if mess_data["subject"]:
mess_data['xml'].addElement("subject", None, subject)
# message without body are used to send chat states
if mess_data["message"]:
mess_data['xml'].addElement("body", None, mess_data["message"])
def generateXML(mess_data):
mess_data['xml'] = domish.Element((None, 'message'))
mess_data['xml']["to"] = mess_data["to"].full()
mess_data['xml']["from"] = current_jid.full()
mess_data['xml']["type"] = mess_data["type"]
if mess_data["subject"]:
mess_data['xml'].addElement("subject", None, subject)
# message without body are used to send chat states
if mess_data["message"]:
mess_data['xml'].addElement("body", None, mess_data["message"])
return mess_data
def sendErrback(e):
text = '%s: %s' % (e.value.__class__.__name__, e.getErrorMessage())
@ -536,10 +540,12 @@ class SAT(service.Service):
else:
error("Unmanaged exception: %s" % text)
return e
treatments.addCallbacks(self.sendAndStoreMessage, sendErrback, [False, profile])
treatments.callback(mess_data)
return treatments
pre_xml_treatments.addCallback(generateXML)
pre_xml_treatments.chainDeferred(post_xml_treatments)
post_xml_treatments.addCallback(self.sendAndStoreMessage, False, profile)
post_xml_treatments.addErrback(sendErrback)
pre_xml_treatments.callback(mess_data)
return pre_xml_treatments
def sendAndStoreMessage(self, mess_data, skip_send=False, profile=None):
"""Actually send and store the message to history, after all the treatments have been done.