git » sdk » commit 9c0da79

Allow presenceless operation

author Stephen Paul Weber
2024-04-16 13:54:52 UTC
committer Stephen Paul Weber
2024-04-16 13:54:52 UTC
parent 1488433d9f5780bf7d0caecfdc00558f758bdf27

Allow presenceless operation

Not common for a full client, but useful for some niche clients

snikket/Client.hx +11 -2

diff --git a/snikket/Client.hx b/snikket/Client.hx
index 7c80e80..a449382 100644
--- a/snikket/Client.hx
+++ b/snikket/Client.hx
@@ -38,6 +38,10 @@ import HaxeCBridge;
 @:build(HaxeSwiftBridge.expose())
 #end
 class Client extends EventEmitter {
+	/**
+		Set to false to suppress sending available presence
+	**/
+	public var sendAvailable(null, default): Bool = true;
 	private var stream:GenericStream;
 	private var chatMessageHandlers: Array<(ChatMessage)->Void> = [];
 	@:allow(snikket)
@@ -508,8 +512,10 @@ class Client extends EventEmitter {
 					chats.sort((a, b) -> -Reflect.compare(a.lastMessageTimestamp() ?? "0", b.lastMessageTimestamp() ?? "0"));
 					this.trigger("chats/update", chats);
 					// Set self to online
-					sendPresence();
-					pingAllChannels();
+					if (sendAvailable) {
+						sendPresence();
+						pingAllChannels();
+					}
 					this.trigger("status/online", {});
 				});
 			});
@@ -608,6 +614,9 @@ class Client extends EventEmitter {
 				for (resource in Caps.withFeature(chat.getCaps(), "jabber:iq:gateway")) {
 					resources[resource] = true;
 				}
+				if (!sendAvailable && JID.parse(chat.chatId).isDomain()) {
+					resources[null] = true;
+				}
 				for (resource in resources.keys()) {
 					final bareJid = JID.parse(chat.chatId);
 					final fullJid = new JID(bareJid.node, bareJid.domain, resource);