From 5470bbf7b90bf6aefaf93438d4f26a1af1176be6 Mon Sep 17 00:00:00 2001 From: Goffi Date: Wed, 13 Dec 2023 22:00:25 +0100 Subject: [PATCH] plugin XEP-0359: if no origin ID is found, use ID instead: This way, we always have the right ID to check for non groupchat message in `History.origin_id`. --- libervia/backend/plugins/plugin_xep_0359.py | 29 ++++++++++++++------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/libervia/backend/plugins/plugin_xep_0359.py b/libervia/backend/plugins/plugin_xep_0359.py index 1dec5c48..7fcd37d3 100644 --- a/libervia/backend/plugins/plugin_xep_0359.py +++ b/libervia/backend/plugins/plugin_xep_0359.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 - -# SAT plugin for Message Archive Management (XEP-0359) -# Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) +# Libervia plugin for Message Archive Management (XEP-0359) +# Copyright (C) 2009-2023 Jérôme Poisson (goffi@goffi.org) # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) # This program is free software: you can redistribute it and/or modify @@ -20,14 +19,18 @@ from typing import Optional import uuid -from zope.interface import implementer + from twisted.words.protocols.jabber import xmlstream +from twisted.words.xish import domish from wokkel import disco -from libervia.backend.core.constants import Const as C +from zope.interface import implementer + from libervia.backend.core import exceptions +from libervia.backend.core.constants import Const as C +from libervia.backend.core.core_types import SatXMPPEntity from libervia.backend.core.i18n import _ from libervia.backend.core.log import getLogger -from twisted.words.xish import domish +from libervia.backend.models.core import MessageData log = getLogger(__name__) @@ -55,13 +58,21 @@ class XEP_0359(object): host.trigger.add("message_parse", self._message_parse_trigger) host.trigger.add("send_message_data", self._send_message_data_trigger) - def _message_parse_trigger(self, client, message_elt, mess_data): + def _message_parse_trigger( + self, + client: SatXMPPEntity, + message_elt: domish.Element, + mess_data: MessageData + ) -> bool: """Check if message has a stanza-id""" stanza_id = self.get_stanza_id(message_elt, client.jid.userhostJID()) if stanza_id is not None: mess_data['extra']['stanza_id'] = stanza_id - origin_id = self.get_origin_id(message_elt) - if origin_id is not None: + try: + origin_id = self.get_origin_id(message_elt) or message_elt["id"] + except KeyError: + pass + else: mess_data['extra']['origin_id'] = origin_id return True