git » sdk » commit d49ff62

Check for wrong name after ping and change nick if needed

author Stephen Paul Weber
2023-11-30 00:41:54 UTC
committer Stephen Paul Weber
2023-12-11 15:59:52 UTC
parent 21b1d3f43be2881febc581a50a7e575490586ab4

Check for wrong name after ping and change nick if needed

xmpp/Chat.hx +12 -3

diff --git a/xmpp/Chat.hx b/xmpp/Chat.hx
index 93bfef4..5751e47 100644
--- a/xmpp/Chat.hx
+++ b/xmpp/Chat.hx
@@ -374,9 +374,9 @@ class Channel extends Chat {
 			(response) -> {
 				if (response.attr.get("type") == "error") {
 					final err = response.getChild("error")?.getChild(null, "urn:ietf:params:xml:ns:xmpp-stanzas");
-					if (err.name == "service-unavailable" || err.name == "feature-not-implemented") return; // Error, success!
-					if (err.name == "remote-server-not-found" || err.name == "remote-server-timeout") return; // Timeout, retry later
-					//if (err.name == "item-not-found") return; // Nick was changed so change it back!
+					if (err.name == "service-unavailable" || err.name == "feature-not-implemented") return checkRename(); // Error, success!
+					if (err.name == "remote-server-not-found" || err.name == "remote-server-timeout") return checkRename(); // Timeout, retry later
+					if (err.name == "item-not-found") return checkRename(); // Nick was changed?
 					(shouldRefreshDisco ? refreshDisco : (cb)->cb())(() -> {
 						presence = {}; // About to ask for a fresh set
 						inSync = false;
@@ -391,11 +391,20 @@ class Channel extends Chat {
 							}
 						);
 					});
+				} else {
+					checkRename();
 				}
 			}
 		);
 	}
 
+	private function checkRename() {
+		if (nickInUse() != client.displayName()) {
+			final desiredFullJid = JID.parse(chatId).withResource(client.displayName());
+			client.sendPresence(desiredFullJid.asString());
+		}
+	}
+
 	override public function setPresence(resource:String, presence:Presence) {
 		super.setPresence(resource, presence);
 		if (!inSync && presence?.mucUser?.allTags("status").find((status) -> status.attr.get("code") == "110") != null) {