From 95c85010c40775876d247939488055b3edf875d8 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Thu, 28 Sep 2017 14:58:45 -0700 Subject: [PATCH] Only retry messages on startup, not every sockect reconnect (#1510) FREEBIE --- js/background.js | 8 +++++++- js/libtextsecure.js | 16 +++++++++++----- libtextsecure/message_receiver.js | 16 +++++++++++----- 3 files changed, 29 insertions(+), 11 deletions(-) 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);