| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-02-04 19:01:11 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-02-04 19:01:11 UTC |
| parent | d40f2ee674b99478596d28eb0f1bb1afe47361e7 |
| borogove/Client.hx | +21 | -3 |
diff --git a/borogove/Client.hx b/borogove/Client.hx index 8df29d8..2d086f0 100644 --- a/borogove/Client.hx +++ b/borogove/Client.hx @@ -400,7 +400,7 @@ class Client extends EventEmitter { this.trigger("chats/update", [chat]); }); }); - sendQuery(vcardGet); + sendQueryLazy(vcardGet); } }); } @@ -602,7 +602,7 @@ class Client extends EventEmitter { this.trigger("chats/update", [chat]); }); }); - sendQuery(pubsubGet); + sendQueryLazy(pubsubGet); } }); } @@ -1476,7 +1476,7 @@ class Client extends EventEmitter { persistence.storeMedia(r.type, r.bytes.getData()).then(_ -> resolve(null)); } }); - sendQuery(q); + sendQueryLazy(q); }).then(x -> x, (_) -> fetchMediaByHashOneCounterpart(hashes.slice(1), counterpart)); }); } @@ -1520,6 +1520,24 @@ class Client extends EventEmitter { this.stream.sendIq(query.getQueryStanza(), query.handleResponse); } + private var lazyQueryTimer = null; + private final queriesToSend = []; + private function sendNextLazyQuery() { + if (lazyQueryTimer != null) return; + lazyQueryTimer = haxe.Timer.delay(() -> { + final query = queriesToSend.shift(); + if (query != null) sendQuery(query); + + lazyQueryTimer = null; + if (queriesToSend.length > 0) sendNextLazyQuery(); + }, 2000); + } + + private function sendQueryLazy(query:GenericQuery) { + queriesToSend.push(query); + sendNextLazyQuery(); + } + @:allow(borogove) private function publishWithOptions(stanza:Stanza, options:Stanza) { final clone = stanza.clone();