From 8bd72806730ab6b2ddb59da7c71f60fee7b9d9b3 Mon Sep 17 00:00:00 2001 From: lilia Date: Tue, 9 May 2017 18:37:20 -0700 Subject: [PATCH] Early read receipts should start expiration timers Check for early read receipts for an incoming messages *after* processing the expireTimer on that message. Then we can set expirationStartTime appropriately if an early receipt is found. Closes #950 // FREEBIE --- js/models/messages.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/js/models/messages.js b/js/models/messages.js index a685a45b5..14dfe9f11 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -394,14 +394,6 @@ }); } attributes.active_at = now; - if (type === 'incoming') { - // experimental - if (Whisper.ReadReceipts.forMessage(message) || message.isExpirationTimerUpdate()) { - message.unset('unread'); - } else { - attributes.unreadCount = conversation.get('unreadCount') + 1; - } - } conversation.set(attributes); if (message.isExpirationTimerUpdate()) { @@ -428,6 +420,19 @@ message.get('received_at')); } } + if (type === 'incoming') { + var readReceipt = Whisper.ReadReceipts.forMessage(message); + if (readReceipt) { + if (message.get('expireTimer') && !message.get('expirationStartTimestamp')) { + message.set('expirationStartTimestamp', readReceipt.get('read_at')); + } + } + if (readReceipt || message.isExpirationTimerUpdate()) { + message.unset('unread'); + } else { + conversation.set('unreadCount', conversation.get('unreadCount') + 1); + } + } var conversation_timestamp = conversation.get('timestamp'); if (!conversation_timestamp || message.get('sent_at') > conversation_timestamp) {