| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-02-11 19:15:34 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2026-02-11 19:15:34 UTC |
| parent | bfd9ebb77fa9637d70567a4e1705ec864fe9f32a |
| borogove/streams/XmppJsStream.hx | +14 | -5 |
diff --git a/borogove/streams/XmppJsStream.hx b/borogove/streams/XmppJsStream.hx index 2485056..0d182f0 100644 --- a/borogove/streams/XmppJsStream.hx +++ b/borogove/streams/XmppJsStream.hx @@ -151,6 +151,7 @@ class XmppJsStream extends GenericStream { private var state:FSM; private var pending:Array<XmppJsXml> = []; private var pendingOnIq:Array<{type:IqRequestType,tag:String,xmlns:String,handler:(Stanza)->IqResult}> = []; + private var lastSMState: Null<{ id: String, outbound: Int, inbound: Int, outbound_q: Array<{ stanza: String, stamp: String }> }> = null; private var initialSM: Null<BytesData> = null; private var resumed = false; private var everConnected = false; @@ -440,15 +441,23 @@ class XmppJsStream extends GenericStream { } private function triggerSMupdate() { - if (client == null || !client.streamManagement?.enabled || !emitSMupdates) return; + if ((lastSMState == null || pending.length < 1) && (client == null || !client.streamManagement?.enabled || !emitSMupdates)) return; + if (client?.streamManagement?.enabled) { + lastSMState = { + id: client.streamManagement.id, + outbound: client.streamManagement.outbound, + inbound: client.streamManagement.inbound, + outbound_q: (client.streamManagement.outbound_q ?? []).map((item) -> { stanza: item.stanza.toString(), stamp: item.stamp }) + }; + } this.trigger( "sm/update", { sm: bytesOfString(Json.stringify({ - id: client.streamManagement.id, - outbound: client.streamManagement.outbound, - inbound: client.streamManagement.inbound, - outbound_q: (client.streamManagement.outbound_q ?? []).map((item) -> { stanza: item.stanza.toString(), stamp: item.stamp }), + id: lastSMState.id, + outbound: lastSMState.outbound, + inbound: lastSMState.inbound, + outbound_q: lastSMState.outbound_q, pending: pending.map((stanza) -> stanza.toString()) })).getData() }