core (memory/sqla), plugin XEP-0359: always add origin-id, and store:

`origin-id` is now always added to messages, and it is stored to database in the new
column instead of `extra` when present.
This commit is contained in:
Goffi 2022-06-17 14:15:23 +02:00
commit bb3e7ffa9b
3 changed files with 15 additions and 3 deletions

View file

@ -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],

View file

@ -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

View file

@ -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))