plugin XEP-0428: Add missing "for" attribute:

The "for" attribute was missing from <fallback> element.

rel 461
This commit is contained in:
Goffi 2025-07-04 12:30:20 +02:00
commit 030be64c45
2 changed files with 19 additions and 6 deletions

View file

@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import time
from typing import Any, Dict
from typing import Any, Dict, cast
from sqlalchemy.orm.attributes import flag_modified
from twisted.internet import defer
@ -31,6 +31,7 @@ from libervia.backend.core.core_types import MessageDataLegacy, SatXMPPEntity
from libervia.backend.core.i18n import D_, _
from libervia.backend.core.log import getLogger
from libervia.backend.memory.sqla_mapping import History
from libervia.backend.plugins.plugin_xep_0428 import XEP_0428
from libervia.backend.tools.common import data_format
log = getLogger(__name__)
@ -111,8 +112,10 @@ class XEP_0424:
message_elt["type"] = history.type
retract_elt = message_elt.addElement((NS_MESSAGE_RETRACT, "retract"))
retract_elt["id"] = retract_id
self.host.plugins["XEP-0428"].add_fallback_elt(
fallback = cast(XEP_0428, self.host.plugins["XEP-0428"])
fallback.add_fallback_elt(
message_elt,
NS_MESSAGE_RETRACT,
"[A message retraction has been requested, but your client doesn't support "
"it]",
)

View file

@ -43,25 +43,35 @@ PLUGIN_INFO = {
NS_FALLBACK = "urn:xmpp:fallback:0"
class XEP_0428(object):
class XEP_0428:
def __init__(self, host):
log.info(_("XEP-0428 (Fallback Indication) plugin initialization"))
host.register_namespace("fallback", NS_FALLBACK)
def add_fallback_elt(
self, message_elt: domish.Element, msg: Optional[str] = None
self,
message_elt: domish.Element,
for_: str,
msg: str|None = None
) -> None:
"""Add the fallback indication element
@param message_elt: <message> element where the indication must be
set
@param for_: Specification namespace that the fallback is meant to replace.
see https://xmpp.org/extensions/xep-0428.html#sect-idm46381699903600
@param msg: message to show as fallback
Will be added as <body>
"""
message_elt.addElement((NS_FALLBACK, "fallback"))
fallback_elt = message_elt.addElement((NS_FALLBACK, "fallback"))
fallback_elt["for"] = for_
if msg is not None:
message_elt.addElement("body", content=msg)
body_elt = message_elt.body
if body_elt is None:
message_elt.addElement("body", content=msg)
else:
body_elt.addContent(msg)
def has_fallback(self, message_elt: domish.Element) -> bool:
"""Tell if a message has a fallback indication"""