From 86deab29afefeac7f16e7227323de831a2e1e09c Mon Sep 17 00:00:00 2001 From: LDA Date: Sat, 28 Dec 2024 20:17:03 +0100 Subject: [PATCH] [FIX] Properly handle new contents with Matrix No more ugly asterisks. It annoyed me enough. --- src/MatrixEventHandler.c | 8 +++++++- src/Parsee/Utils/Formatting.c | 31 +++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/MatrixEventHandler.c b/src/MatrixEventHandler.c index 3d6a69e..1202484 100644 --- a/src/MatrixEventHandler.c +++ b/src/MatrixEventHandler.c @@ -370,6 +370,7 @@ ParseeMessageHandler(ParseeData *data, HashMap *event) DbRef *ref = NULL; HashMap *json; + char *unedited_id = MatrixGetEdit(event); char *body = GrabString(event, 2, "content", "body"); char *id = GrabString(event, 1, "room_id"); char *ev_id = GrabString(event, 1, "event_id"); @@ -381,12 +382,17 @@ ParseeMessageHandler(ParseeData *data, HashMap *event) char *unauth = NULL; char *origin_id = NULL, *stanza = NULL; char *sender = NULL; - char *unedited_id = MatrixGetEdit(event); char *url = GrabString(event, 2, "content", "url"); char *encoded_from = NULL; bool direct = false; + if (unedited_id) + { + char *new_content = GrabString(event, 3, "content", "m.new_content", "body"); + if (new_content) body = new_content; + } + if (ParseeIsPuppet(data->config, m_sender) || ParseeManageBan(data, m_sender, id)) { diff --git a/src/Parsee/Utils/Formatting.c b/src/Parsee/Utils/Formatting.c index 5a2c6b8..2abf3b5 100644 --- a/src/Parsee/Utils/Formatting.c +++ b/src/Parsee/Utils/Formatting.c @@ -207,6 +207,32 @@ XMPPifyElement(HashMap *event, XMLElement *elem, XMPPFlags flags) } return xepd; } +static char * +GetRawBody(HashMap *event) +{ + if (MatrixGetEdit(event)) + { + char *new = GrabString(event, 3, "content", "m.new_content", "body"); + if (new) + { + return new; + } + } + return GrabString(event, 2, "content", "body"); +} +static char * +GetHTMLBody(HashMap *event) +{ + if (MatrixGetEdit(event)) + { + char *new = GrabString(event, 3, "content", "m.new_content", "formatted_body"); + if (new) + { + return new; + } + } + return GrabString(event, 2, "content", "formatted_body"); +} char * ParseeXMPPify(HashMap *event) { @@ -231,11 +257,12 @@ ParseeXMPPify(HashMap *event) if (!StrEquals(format, "org.matrix.custom.html")) { /* Settle for the raw body instead. */ - char *body = JsonValueAsString(JsonGet(event, 2, "content", "body")); + char *body = GetRawBody(event); return StrDuplicate(body); } - html = JsonValueAsString(JsonGet(event, 2, "content", "formatted_body")); + html = GetHTMLBody(event); + html = StrConcat(3, "", html, ""); elem = XMLCDecode(StrStreamReader(html), true, true);