| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-09-12 20:39:41 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-09-12 20:39:41 UTC |
| parent | 794ec7e6b045da357bdf3859c49f0a523e6d91d3 |
| xmpp/ChatMessage.hx | +11 | -1 |
| xmpp/Client.hx | +9 | -1 |
diff --git a/xmpp/ChatMessage.hx b/xmpp/ChatMessage.hx index 05e165c..9b149f5 100644 --- a/xmpp/ChatMessage.hx +++ b/xmpp/ChatMessage.hx @@ -43,13 +43,23 @@ class ChatMessage { final localJid = JID.parse(localJidStr); final localJidBare = localJid.asBare(); final domain = localJid.domain; + + if (msg.from != null && JID.parse(msg.from).asString() == localJidBare.asString()) { + var carbon = stanza.getChild("received", "urn:xmpp:carbons:2"); + if (carbon == null) carbon = stanza.getChild("sent", "urn:xmpp:carbons:2"); + if (carbon != null) { + var fwd = carbon.getChild("forwarded", "urn:xmpp:forward:0"); + if(fwd != null) return fromStanza(fwd.getFirstChild(), localJidStr); + } + } + for (stanzaId in stanza.allTags("stanza-id", "urn:xmpp:sid:0")) { if (stanzaId.attr.get("by") == domain || stanzaId.attr.get("by") == localJidBare.asString()) { msg.serverId = stanzaId.attr.get("id"); break; } } - msg.direction = (JID.parse(msg.to).asBare().asString() == localJidBare.asString()) ? MessageReceived : MessageSent; + msg.direction = (msg.to == null || JID.parse(msg.to).asBare().asString() == localJidBare.asString()) ? MessageReceived : MessageSent; if (msg.text == null) return null; diff --git a/xmpp/Client.hx b/xmpp/Client.hx index 7ea1947..f941cbd 100644 --- a/xmpp/Client.hx +++ b/xmpp/Client.hx @@ -46,7 +46,15 @@ class Client extends xmpp.EventEmitter { return EventUnhandled; // Allow others to get this event as well }); - stream.sendStanza(new Stanza("presence")); // Set self to online + // Set self to online + stream.sendStanza(new Stanza("presence")); + + // Enable carbons + stream.sendStanza( + new Stanza("iq", { type: "set", id: ID.short() }) + .tag("enable", { xmlns: "urn:xmpp:carbons:2" }) + .up() + ); rosterGet(); return this.trigger("status/online", {}); }