| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-11-15 03:58:47 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-11-15 17:48:29 UTC |
| parent | 0dad51e7cdd36ae56ae5060897614c5b4705cc8c |
| xmpp/Client.hx | +3 | -3 |
| xmpp/GenericStream.hx | +1 | -1 |
| xmpp/Persistence.hx | +2 | -2 |
| xmpp/persistence/browser.js | +3 | -3 |
| xmpp/streams/XmppJsStream.hx | +5 | -3 |
diff --git a/xmpp/Client.hx b/xmpp/Client.hx index 1a7b510..2464947 100644 --- a/xmpp/Client.hx +++ b/xmpp/Client.hx @@ -53,7 +53,7 @@ class Client extends xmpp.EventEmitter { stream = new Stream(); stream.on("status/online", this.onConnected); stream.on("sm/update", (data) -> { - persistence.storeStreamManagement(accountId(), data.id, data.outbound, data.inbound); + persistence.storeStreamManagement(accountId(), data.id, data.outbound, data.inbound, data.outbound_q); return EventHandled; }); @@ -373,7 +373,7 @@ class Client extends xmpp.EventEmitter { chats.sort((a, b) -> -Reflect.compare(a.lastMessageTimestamp() ?? "0", b.lastMessageTimestamp() ?? "0")); this.trigger("chats/update", chats); - persistence.getStreamManagement(accountId(), (smId, smOut, smIn) -> { + persistence.getStreamManagement(accountId(), (smId, smOut, smIn, smOutQ) -> { persistence.getLogin(jid, (login) -> { var ajid = jid; if (login.clientId != null) ajid = JID.parse(jid).asBare().asString() + "/" + login.clientId; @@ -382,7 +382,7 @@ class Client extends xmpp.EventEmitter { } else { stream.on("auth/password-needed", (data)->this.stream.trigger("auth/password", { password: login.token })); } - stream.connect(ajid, smId == null || smId == "" ? null : { id: smId, outbound: smOut, inbound: smIn }); + stream.connect(ajid, smId == null || smId == "" ? null : { id: smId, outbound: smOut, inbound: smIn, outbound_q: smOutQ }); }); }); }); diff --git a/xmpp/GenericStream.hx b/xmpp/GenericStream.hx index c7e1f9d..edfa3e3 100644 --- a/xmpp/GenericStream.hx +++ b/xmpp/GenericStream.hx @@ -17,7 +17,7 @@ abstract class GenericStream extends EventEmitter { /* Connections and streams */ - abstract public function connect(jid:String, sm:Null<{id:String,outbound:Int,inbound:Int}>):Void; + abstract public function connect(jid:String, sm:Null<{id:String,outbound:Int,inbound:Int,outbound_q:Array<String>}>):Void; abstract public function sendStanza(stanza:Stanza):Void; abstract public function newId():String; abstract public function onIq(type:IqRequestType, tag:String, xmlns:String, handler:(Stanza)->IqResult):Void; diff --git a/xmpp/Persistence.hx b/xmpp/Persistence.hx index 609061d..50c5fb8 100644 --- a/xmpp/Persistence.hx +++ b/xmpp/Persistence.hx @@ -19,6 +19,6 @@ abstract class Persistence { abstract public function getCaps(ver:String, callback: (Caps)->Void):Void; abstract public function storeLogin(login:String, clientId:String, token:Null<String>):Void; abstract public function getLogin(login:String, callback:({ ?clientId: String, ?token: String })->Void):Void; - abstract public function storeStreamManagement(accountId:String, smId:String, outboundCount:Int, inboundCount:Int):Void; - abstract public function getStreamManagement(accountId:String, callback: (smId:String, outboundCount:Int, inboundCount:Int)->Void):Void; + abstract public function storeStreamManagement(accountId:String, smId:String, outboundCount:Int, inboundCount:Int, outboundQueue:Array<String>):Void; + abstract public function getStreamManagement(accountId:String, callback: (smId:String, outboundCount:Int, inboundCount:Int, outboundQueue:Array<String>)->Void):Void; } diff --git a/xmpp/persistence/browser.js b/xmpp/persistence/browser.js index fb6ab76..0130cda 100644 --- a/xmpp/persistence/browser.js +++ b/xmpp/persistence/browser.js @@ -367,10 +367,10 @@ exports.xmpp.persistence = { if (token != null) store.put(token, "login:token:" + login).onerror = console.error; }, - storeStreamManagement: function(account, id, outbound, inbound) { + storeStreamManagement: function(account, id, outbound, inbound, outbound_q) { const tx = db.transaction(["keyvaluepairs"], "readwrite"); const store = tx.objectStore("keyvaluepairs"); - store.put({ id: id, outbound: outbound, inbound: inbound }, "sm:" + account).onerror = console.error; + store.put({ id: id, outbound: outbound, inbound: inbound, outbound_q }, "sm:" + account).onerror = console.error; }, getStreamManagement: function(account, callback) { @@ -378,7 +378,7 @@ exports.xmpp.persistence = { const store = tx.objectStore("keyvaluepairs"); promisifyRequest(store.get("sm:" + account)).then( (v) => { - callback(v?.id, v?.outbound, v?.inbound); + callback(v?.id, v?.outbound, v?.inbound, v?.outbound_q || []); }, (e) => { console.error(e); diff --git a/xmpp/streams/XmppJsStream.hx b/xmpp/streams/XmppJsStream.hx index 5638cbc..b0810e1 100644 --- a/xmpp/streams/XmppJsStream.hx +++ b/xmpp/streams/XmppJsStream.hx @@ -20,7 +20,7 @@ extern class XmppJsClient { get: (String, String, ({stanza: XmppJsXml})->Any)->Void, set: (String, String, ({stanza: XmppJsXml})->Any)->Void, }; - var streamManagement: { id:String, outbound: Int, inbound: Int, enabled: Bool, allowResume: Bool }; + var streamManagement: { id:String, outbound: Int, inbound: Int, outbound_q: Array<XmppJsXml>, enabled: Bool, allowResume: Bool }; } @:jsRequire("@xmpp/jid", "jid") @@ -46,6 +46,7 @@ extern class XmppJsXml { function new(); @:overload(function(textContent:String):Void { }) function append(el:XmppJsXml):Void; + function toString():String; var name:String; var attrs:Dynamic; @@ -82,7 +83,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 initialSM: Null<{id:String,outbound:Int,inbound:Int}> = null; + private var initialSM: Null<{id:String,outbound:Int,inbound:Int,outbound_q:Array<String>}> = null; private var resumed = false; override public function new() { @@ -149,6 +150,7 @@ class XmppJsStream extends GenericStream { xmpp.streamManagement.id = initialSM.id; xmpp.streamManagement.outbound = initialSM.outbound; xmpp.streamManagement.inbound = initialSM.inbound; + xmpp.streamManagement.outbound_q = (initialSM.outbound_q ?? []).map(XmppJsLtx.parse); initialSM = null; } @@ -198,7 +200,7 @@ class XmppJsStream extends GenericStream { this.trigger("auth/password-needed", {}); } - public function connect(jid:String, sm:Null<{id:String,outbound:Int,inbound:Int}>) { + public function connect(jid:String, sm:Null<{id:String,outbound:Int,inbound:Int,outbound_q:Array<String>}>) { this.state.event("connect-requested"); this.jid = new XmppJsJID(jid); this.initialSM = sm;