diff --git a/sat/memory/sqla.py b/sat/memory/sqla.py index d11eaba5..9fbb9cc1 100644 --- a/sat/memory/sqla.py +++ b/sat/memory/sqla.py @@ -564,6 +564,8 @@ class Storage: or limit != 1): raise ValueError("Unexpected values for last_stanza_id filter") stmt = stmt.where(History.stanza_id.is_not(None)) + if 'origin_id' in filters: + stmt = stmt.where(History.origin_id == filters["origin_id"]) if limit is not None: stmt = stmt.limit(limit) @@ -596,6 +598,7 @@ class Storage: async with session.begin(): session.add(History( uid=data["uid"], + origin_id=data["extra"].get("origin_id"), stanza_id=data["extra"].get("stanza_id"), update_uid=data["extra"].get("update_uid"), profile_id=self.profiles[profile], diff --git a/sat/plugins/plugin_xep_0359.py b/sat/plugins/plugin_xep_0359.py index b4b35f1e..db976750 100644 --- a/sat/plugins/plugin_xep_0359.py +++ b/sat/plugins/plugin_xep_0359.py @@ -50,14 +50,26 @@ class XEP_0359(object): self.host = host host.registerNamespace("stanza_id", NS_SID) host.trigger.add("message_parse", self._message_parseTrigger) + host.trigger.add("sendMessageData", self._sendMessageDataTrigger) def _message_parseTrigger(self, client, message_elt, mess_data): """Check if message has a stanza-id""" stanza_id = self.getStanzaId(message_elt, client.jid.userhostJID()) if stanza_id is not None: mess_data['extra']['stanza_id'] = stanza_id + origin_id = self.getOriginId(message_elt) + if origin_id is not None: + mess_data['extra']['origin_id'] = origin_id return True + def _sendMessageDataTrigger(self, client, mess_data): + origin_id = mess_data["extra"].get("origin_id") + if not origin_id: + origin_id = str(uuid.uuid4()) + mess_data["extra"]["origin_id"] = origin_id + message_elt = mess_data["xml"] + self.addOriginId(message_elt, origin_id) + def getStanzaId(self, element, by): """Return stanza-id if found in element diff --git a/sat/plugins/plugin_xep_0384.py b/sat/plugins/plugin_xep_0384.py index e1477900..be03d1f0 100644 --- a/sat/plugins/plugin_xep_0384.py +++ b/sat/plugins/plugin_xep_0384.py @@ -1417,9 +1417,6 @@ class OMEMO: MUC_CACHE_TTL, self._expireMUCCache, client) else: timer.reset(MUC_CACHE_TTL) - # we use origin-id when possible, to identifiy the message in a stable way - if self._sid is not None: - self._sid.addOriginId(message_elt, mess_data['uid']) encryption_data = yield defer.ensureDeferred(self.encryptMessage( client, to_jids, body, feedback_jid=feedback_jid))