From 620b71a649f020e54d876b40537f45fa264839ec Mon Sep 17 00:00:00 2001
From: Scott Nonnenberg <scott@nonnenberg.com>
Date: Fri, 11 Aug 2017 17:06:48 -0700
Subject: [PATCH] Maintain original received time when processing queued/error
 msgs

FREEBIE
---
 js/background.js                  | 4 +---
 js/libtextsecure.js               | 6 ++++++
 libtextsecure/message_receiver.js | 6 ++++++
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/js/background.js b/js/background.js
index e4c3a7cd3..b933c8374 100644
--- a/js/background.js
+++ b/js/background.js
@@ -288,13 +288,11 @@
     }
 
     function initIncomingMessage(data) {
-        var now = new Date().getTime();
-
         var message = new Whisper.Message({
             source         : data.source,
             sourceDevice   : data.sourceDevice,
             sent_at        : data.timestamp,
-            received_at    : now,
+            received_at    : data.receivedAt || Date.now(),
             conversationId : data.source,
             type           : 'incoming',
             unread         : 1
diff --git a/js/libtextsecure.js b/js/libtextsecure.js
index 98d20df5c..58b788ab1 100644
--- a/js/libtextsecure.js
+++ b/js/libtextsecure.js
@@ -38332,6 +38332,7 @@ MessageReceiver.prototype.extend({
             }
             return;
         }
+        var receivedAt = Date.now();
 
         this.incoming.push(textsecure.crypto.decryptWebsocketMessage(request.body, this.signalingKey).then(function(plaintext) {
             var envelope = textsecure.protobuf.Envelope.decode(plaintext);
@@ -38343,6 +38344,8 @@ MessageReceiver.prototype.extend({
                 return request.respond(200, 'OK');
             }
 
+            envelope.receivedAt = receivedAt;
+
             return this.addToCache(envelope, plaintext).then(function() {
                 request.respond(200, 'OK');
                 this.queueEnvelope(envelope);
@@ -38687,6 +38690,7 @@ MessageReceiver.prototype.extend({
                     source       : envelope.source,
                     sourceDevice : envelope.sourceDevice,
                     timestamp    : envelope.timestamp.toNumber(),
+                    receivedAt   : envelope.receivedAt,
                     message      : message
                 };
                 return this.dispatchAndWait(ev);
@@ -38923,6 +38927,7 @@ MessageReceiver.prototype.extend({
     tryMessageAgain: function(from, ciphertext, message) {
         var address = libsignal.SignalProtocolAddress.fromString(from);
         var sentAt = message.sent_at || Date.now();
+        var receivedAt = message.received_at || Date.now();
 
         var ourNumber = textsecure.storage.user.getNumber();
         var number = address.getName();
@@ -38940,6 +38945,7 @@ MessageReceiver.prototype.extend({
             var envelope = {
                 source: number,
                 sourceDevice: device,
+                receivedAt: receivedAt,
                 timestamp: {
                     toNumber: function() {
                         return sentAt;
diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js
index 2b3d8ce9b..180e007e6 100644
--- a/libtextsecure/message_receiver.js
+++ b/libtextsecure/message_receiver.js
@@ -81,6 +81,7 @@ MessageReceiver.prototype.extend({
             }
             return;
         }
+        var receivedAt = Date.now();
 
         this.incoming.push(textsecure.crypto.decryptWebsocketMessage(request.body, this.signalingKey).then(function(plaintext) {
             var envelope = textsecure.protobuf.Envelope.decode(plaintext);
@@ -92,6 +93,8 @@ MessageReceiver.prototype.extend({
                 return request.respond(200, 'OK');
             }
 
+            envelope.receivedAt = receivedAt;
+
             return this.addToCache(envelope, plaintext).then(function() {
                 request.respond(200, 'OK');
                 this.queueEnvelope(envelope);
@@ -436,6 +439,7 @@ MessageReceiver.prototype.extend({
                     source       : envelope.source,
                     sourceDevice : envelope.sourceDevice,
                     timestamp    : envelope.timestamp.toNumber(),
+                    receivedAt   : envelope.receivedAt,
                     message      : message
                 };
                 return this.dispatchAndWait(ev);
@@ -672,6 +676,7 @@ MessageReceiver.prototype.extend({
     tryMessageAgain: function(from, ciphertext, message) {
         var address = libsignal.SignalProtocolAddress.fromString(from);
         var sentAt = message.sent_at || Date.now();
+        var receivedAt = message.received_at || Date.now();
 
         var ourNumber = textsecure.storage.user.getNumber();
         var number = address.getName();
@@ -689,6 +694,7 @@ MessageReceiver.prototype.extend({
             var envelope = {
                 source: number,
                 sourceDevice: device,
+                receivedAt: receivedAt,
                 timestamp: {
                     toNumber: function() {
                         return sentAt;