plugin XEP-0071: fixed rich and xhtml sending + add simple text body if not present

This commit is contained in:
Goffi 2016-09-25 19:17:38 +02:00
commit 9bb6c74771

View file

@ -22,6 +22,7 @@ from sat.core.constants import Const as C
from sat.core import exceptions
from sat.core.log import getLogger
log = getLogger(__name__)
from sat.tools.common import data_format
from twisted.internet import defer
from wokkel import disco, iwokkel
@ -109,6 +110,20 @@ class XEP_0071(object):
d_list.addCallback(lambda dummy: data)
return d_list
def _fill_body_text(self, text, data, lang):
data['message'][lang or ''] = text
message_elt = data['xml']
body_elt = message_elt.addElement("body", content=text)
if lang:
body_elt[(C.NS_XML, 'lang')] = lang
def _check_body_text(self, data, lang, markup, syntax, defers):
"""check if simple text message exists, and fill if needed"""
if not (lang or '') in data['message']:
d = self._s.convert(markup, syntax, self._s.SYNTAX_TEXT)
d.addCallback(self._fill_body_text, data, lang)
defers.append(d)
def _messageSendAddRich(self, data, client):
""" Construct XHTML-IM node and add it XML element
@ -130,20 +145,22 @@ class XEP_0071(object):
syntax = self._s.getCurrentSyntax(client.profile)
defers = []
try:
rich = data['extra']['rich']
except KeyError:
if u'xhtml' in data['extra']:
# we have directly XHTML
for lang, xhtml in data['extra']['xhtml'].iteritems():
for lang, xhtml in data_format.getSubDict('xhtml', data['extra']):
self._check_body_text(data, lang, xhtml, self._s.SYNTAX_XHTML, defers)
d = self._s.convert(xhtml, self._s.SYNTAX_XHTML, self.SYNTAX_XHTML_IM)
d.addCallback(syntax_converted, lang)
defers.append(d)
else:
elif u'rich' in data['extra']:
# we have rich syntax to convert
for lang, rich_data in rich.iteritems():
for lang, rich_data in data_format.getSubDict('rich', data['extra']):
self._check_body_text(data, lang, rich_data, syntax, defers)
d = self._s.convert(rich_data, syntax, self.SYNTAX_XHTML_IM)
d.addCallback(syntax_converted, lang)
defers.append(d)
else:
exceptions.InternalError(u"xhtml or rich should be present at this point")
d_list = defer.DeferredList(defers)
d_list.addCallback(lambda dummy: data)
return d_list
@ -162,8 +179,7 @@ class XEP_0071(object):
return True
def messageSendTrigger(self, client, data, pre_xml_treatments, post_xml_treatments):
""" Check presence of rich text in extra
"""
""" Check presence of rich text in extra """
rich = {}
xhtml = {}
for key, value in data['extra'].iteritems():