From dfa1f0797c243fc6763423cece99285a2fc79657 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Fri, 8 Jun 2018 15:51:00 -0700 Subject: [PATCH] Ensure timer updates show in convo before initiating message --- js/models/conversations.js | 10 ++++++++-- js/views/message_view.js | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index 0af70ccf0d..72721939d1 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -878,11 +878,17 @@ }); source = source || textsecure.storage.user.getNumber(); - const timestamp = receivedAt || Date.now(); + + // When we add a disappearing messages notification to the conversation, we want it + // to be above the message that initiated that change, hence the subtraction. + const timestamp = (receivedAt || Date.now()) - 1; const message = this.messageCollection.add({ + // Even though this isn't reflected to the user, we want to place the last seen + // indicator above it. We set it to 'unread' to trigger that placement. + unread: 1, conversationId: this.id, - type: receivedAt ? 'incoming' : 'outgoing', + // No type; 'incoming' messages are specially treated by conversation.markRead() sent_at: timestamp, received_at: timestamp, flags: textsecure.protobuf.DataMessage.Flags.EXPIRATION_TIMER_UPDATE, diff --git a/js/views/message_view.js b/js/views/message_view.js index e14667aac3..1209b1d268 100644 --- a/js/views/message_view.js +++ b/js/views/message_view.js @@ -94,6 +94,7 @@ this.conversation = this.model.getExpirationTimerUpdateSource(); this.listenTo(this.conversation, 'change', this.render); this.listenTo(this.model, 'unload', this.remove); + this.listenTo(this.model, 'change', this.onChange); }, render_attributes() { const seconds = this.model.get('expirationTimerUpdate').expireTimer; @@ -114,6 +115,13 @@ } return { content: timerMessage }; }, + onChange() { + this.addId(); + }, + addId() { + // This is important to enable the lastSeenIndicator when it's just been added. + this.$el.attr('id', this.id()); + }, }); Whisper.KeyChangeView = Whisper.View.extend({