git » sdk » commit 7d6cf8f

Only send displayed markers for incoming messages

author Stephen Paul Weber
2024-07-02 19:05:34 UTC
committer Stephen Paul Weber
2024-07-02 19:05:34 UTC
parent 38c3208b76a3ffbe42d8eb0a107f4ddec297d6eb

Only send displayed markers for incoming messages

It's clear in a 1:1 that we've read out own send messages, so kind of
redundant, but also the guard to prevent sending repeatedly for one
we've already read doesn't work well on sent messages where we don't
know the server ID anyway.

snikket/Chat.hx +12 -7

diff --git a/snikket/Chat.hx b/snikket/Chat.hx
index 80706d8..c3f403a 100644
--- a/snikket/Chat.hx
+++ b/snikket/Chat.hx
@@ -591,14 +591,19 @@ class DirectChat extends Chat {
 		if (readUpTo() == message.localId || readUpTo() == message.serverId) return;
 		final upTo = message.localId ?? message.serverId;
 		if (upTo == null) return; // Can't mark as read with no id
-		for (recipient in getParticipants()) {
-			// TODO: extended addressing when relevant
-			final stanza = new Stanza("message", { to: recipient, id: ID.long() })
-				.tag("displayed", { xmlns: "urn:xmpp:chat-markers:0", id: upTo }).up();
-			if (message.threadId != null) {
-				stanza.textTag("thread", message.threadId);
+
+		// Only send markers for others messages,
+		// it's obvious we've read our own
+		if (message.isIncoming()) {
+			for (recipient in getParticipants()) {
+				// TODO: extended addressing when relevant
+				final stanza = new Stanza("message", { to: recipient, id: ID.long() })
+					.tag("displayed", { xmlns: "urn:xmpp:chat-markers:0", id: upTo }).up();
+				if (message.threadId != null) {
+					stanza.textTag("thread", message.threadId);
+				}
+				client.sendStanza(stanza);
 			}
-			client.sendStanza(stanza);
 		}
 
 		markReadUpToId(message.serverId, message.serverIdBy, () -> {