Mercurial > libervia-backend
changeset 2080:3626b2813158
plugin XEP-0071: fixed rich and xhtml sending + add simple text body if not present
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 25 Sep 2016 19:17:38 +0200 |
parents | c8e561a5b2b6 |
children | 2265d9df4cfb |
files | src/plugins/plugin_xep_0071.py |
diffstat | 1 files changed, 24 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0071.py Sun Sep 25 19:16:25 2016 +0200 +++ b/src/plugins/plugin_xep_0071.py Sun Sep 25 19:17:38 2016 +0200 @@ -22,6 +22,7 @@ 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 @@ 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 @@ 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 @@ 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():