| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-07-27 18:25:51 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-07-27 18:25:51 UTC |
| parent | 47fcf6c1625c203be508ca2c7ac7701bb3a797df |
| borogove/ChatMessageBuilder.hx | +2 | -0 |
| borogove/persistence/IDB.js | +8 | -3 |
diff --git a/borogove/ChatMessageBuilder.hx b/borogove/ChatMessageBuilder.hx index b912d44..be9d41d 100644 --- a/borogove/ChatMessageBuilder.hx +++ b/borogove/ChatMessageBuilder.hx @@ -312,6 +312,7 @@ class ChatMessageBuilder { @param html rich text body to attach to the message **/ public function setBody(html: Null<Html>) { + stanza = null; final htmlIdx = payloads.findIndex((p) -> p.attr.get("xmlns") == "http://jabber.org/protocol/xhtml-im" && p.name == "html"); if (htmlIdx >= 0) payloads.splice(htmlIdx, 1); @@ -338,6 +339,7 @@ class ChatMessageBuilder { Set subject of this message **/ public function setSubject(subject: Null<String>) { + stanza = null; final subjectIdx = payloads.findIndex((p) -> p.name == "subject"); if (subjectIdx >= 0) payloads.splice(subjectIdx, 1); diff --git a/borogove/persistence/IDB.js b/borogove/persistence/IDB.js index df90994..47f4169 100644 --- a/borogove/persistence/IDB.js +++ b/borogove/persistence/IDB.js @@ -343,9 +343,14 @@ export default async (dbname, media, tokenize, stemmer) => { message.text = value.text; message.lang = value.lang; message.type = value.type || (value.isGroupchat || value.groupchat ? enums.borogove_MessageType.Channel : enums.borogove_MessageType.Chat); - message.payloads = (value.payloads || []).map(borogove_Stanza.parse); - message.encryption = value.encryption; message.stanza = value.stanza && borogove_Stanza.parse(value.stanza); + if (message.stanza) { + // Just use children from stanza instead of parsing again + message.payloads = message.stanza.allTags(); + } else { + message.payloads = (value.payloads || []).map(borogove_Stanza.parse); + } + message.encryption = value.encryption; if (!message.localId && !message.serverId) message.localId = "NO_ID"; // bad data return message.build(); } @@ -392,7 +397,7 @@ export default async (dbname, media, tokenize, stemmer) => { timestamp: new Date(message.timestamp), replyToMessage: message.replyToMessage && [account, message.replyToMessage.serverId || "", message.replyToMessage.serverIdBy || "", message.replyToMessage.localId || ""], versions: message.versions.map((m) => serializeMessage(account, m)), - payloads: message.payloads.map((p) => p.toString()), + payloads: message.stanza ? undefined : message.payloads.map((p) => p.toString()), stanza: message.stanza?.toString(), terms: [...new Set(tokenize((message.text || "").replace(/^>.*/mg, "")).map(stemmer))].sort() }