diff --git a/js/background.js b/js/background.js index 82d9cc9bd..b785a1450 100644 --- a/js/background.js +++ b/js/background.js @@ -157,6 +157,7 @@ } }); + var connectCount = 0; function connect(firstRun) { window.removeEventListener('online', connect); window.addEventListener('offline', disconnect); @@ -173,9 +174,14 @@ var PASSWORD = storage.get('password'); var mySignalingKey = storage.get('signaling_key'); + connectCount += 1; + var options = { + retryCached: connectCount === 1, + }; + // initialize the socket and start listening for messages messageReceiver = new textsecure.MessageReceiver( - SERVER_URL, USERNAME, PASSWORD, mySignalingKey + SERVER_URL, USERNAME, PASSWORD, mySignalingKey, options ); messageReceiver.addEventListener('message', onMessageReceived); messageReceiver.addEventListener('receipt', onDeliveryReceipt); diff --git a/js/libtextsecure.js b/js/libtextsecure.js index 23c71a6eb..b7bc609a3 100644 --- a/js/libtextsecure.js +++ b/js/libtextsecure.js @@ -38356,7 +38356,9 @@ var TextSecureServer = (function() { * vim: ts=4:sw=4:expandtab */ -function MessageReceiver(url, username, password, signalingKey) { +function MessageReceiver(url, username, password, signalingKey, options) { + options = options || {}; + this.count = 0; this.url = url; @@ -38368,6 +38370,12 @@ function MessageReceiver(url, username, password, signalingKey) { var address = libsignal.SignalProtocolAddress.fromString(username); this.number = address.getName(); this.deviceId = address.getDeviceId(); + + this.pending = Promise.resolve(); + + if (options.retryCached) { + this.pending = this.queueAllCached(); + } } MessageReceiver.prototype = new textsecure.EventTarget(); @@ -38387,8 +38395,6 @@ MessageReceiver.prototype.extend({ keepalive: { path: '/v1/keepalive', disconnect: true } }); - this.pending = this.queueAllCached(); - // Ensures that an immediate 'empty' event from the websocket will fire only after // all cached envelopes are processed. this.incoming = [this.pending]; @@ -39211,8 +39217,8 @@ MessageReceiver.prototype.extend({ window.textsecure = window.textsecure || {}; -textsecure.MessageReceiver = function(url, username, password, signalingKey) { - var messageReceiver = new MessageReceiver(url, username, password, signalingKey); +textsecure.MessageReceiver = function(url, username, password, signalingKey, options) { + var messageReceiver = new MessageReceiver(url, username, password, signalingKey, options); this.addEventListener = messageReceiver.addEventListener.bind(messageReceiver); this.removeEventListener = messageReceiver.removeEventListener.bind(messageReceiver); this.getStatus = messageReceiver.getStatus.bind(messageReceiver); diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 09fcbf931..2f96cc5e2 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -2,7 +2,9 @@ * vim: ts=4:sw=4:expandtab */ -function MessageReceiver(url, username, password, signalingKey) { +function MessageReceiver(url, username, password, signalingKey, options) { + options = options || {}; + this.count = 0; this.url = url; @@ -14,6 +16,12 @@ function MessageReceiver(url, username, password, signalingKey) { var address = libsignal.SignalProtocolAddress.fromString(username); this.number = address.getName(); this.deviceId = address.getDeviceId(); + + this.pending = Promise.resolve(); + + if (options.retryCached) { + this.pending = this.queueAllCached(); + } } MessageReceiver.prototype = new textsecure.EventTarget(); @@ -33,8 +41,6 @@ MessageReceiver.prototype.extend({ keepalive: { path: '/v1/keepalive', disconnect: true } }); - this.pending = this.queueAllCached(); - // Ensures that an immediate 'empty' event from the websocket will fire only after // all cached envelopes are processed. this.incoming = [this.pending]; @@ -857,8 +863,8 @@ MessageReceiver.prototype.extend({ window.textsecure = window.textsecure || {}; -textsecure.MessageReceiver = function(url, username, password, signalingKey) { - var messageReceiver = new MessageReceiver(url, username, password, signalingKey); +textsecure.MessageReceiver = function(url, username, password, signalingKey, options) { + var messageReceiver = new MessageReceiver(url, username, password, signalingKey, options); this.addEventListener = messageReceiver.addEventListener.bind(messageReceiver); this.removeEventListener = messageReceiver.removeEventListener.bind(messageReceiver); this.getStatus = messageReceiver.getStatus.bind(messageReceiver);