| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-11-30 00:41:54 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-12-11 15:59:52 UTC |
| parent | 21b1d3f43be2881febc581a50a7e575490586ab4 |
| 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) {