From 42356b0d60db397213be502d39ab776a4995af5d Mon Sep 17 00:00:00 2001 From: William Grant Date: Mon, 3 Apr 2023 14:09:05 +0200 Subject: [PATCH] fix: duplicate timer update messages --- ts/components/conversation/TimerNotification.tsx | 9 ++++++--- .../message/message-item/ExpirableReadableMessage.tsx | 4 ++-- ts/models/conversation.ts | 1 + ts/models/message.ts | 7 ++----- ts/receiver/queuedJob.ts | 10 ++++++---- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/ts/components/conversation/TimerNotification.tsx b/ts/components/conversation/TimerNotification.tsx index a866306d0..c910b2031 100644 --- a/ts/components/conversation/TimerNotification.tsx +++ b/ts/components/conversation/TimerNotification.tsx @@ -12,10 +12,13 @@ export const TimerNotification = (props: PropsForExpirationTimer) => { const { messageId, receivedAt, + direction, isUnread, pubkey, profileName, expirationType, + expirationLength, + expirationTimestamp, timespan, type, disabled, @@ -52,11 +55,11 @@ export const TimerNotification = (props: PropsForExpirationTimer) => { diff --git a/ts/components/conversation/message/message-item/ExpirableReadableMessage.tsx b/ts/components/conversation/message/message-item/ExpirableReadableMessage.tsx index 510938923..1ced0c791 100644 --- a/ts/components/conversation/message/message-item/ExpirableReadableMessage.tsx +++ b/ts/components/conversation/message/message-item/ExpirableReadableMessage.tsx @@ -90,11 +90,11 @@ export const ExpirableReadableMessage = (props: ExpirableReadableMessageProps) = const expiringProps: PropsForExpiringMessage = { convoId, - messageId: messageId, + messageId, expirationLength, expirationTimestamp, isExpired: props.isExpired, - direction: props.direction, + direction, }; const { isExpired } = useIsExpired(expiringProps); const isIncoming = direction === 'incoming'; diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 2665e697f..c5039f1dc 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -1141,6 +1141,7 @@ export class ConversationModel extends Backbone.Model { // tell the UI this conversation was updated await this.commit(); } + // if change was made remotely, don't send it to the number/group if (receivedAt) { return; diff --git a/ts/models/message.ts b/ts/models/message.ts index b59a18957..45d5b5201 100644 --- a/ts/models/message.ts +++ b/ts/models/message.ts @@ -303,6 +303,7 @@ export class MessageModel extends Backbone.Model { if (!this.isExpirationTimerUpdate()) { return null; } + const timerUpdate = this.get('expirationTimerUpdate'); if (!timerUpdate || !timerUpdate.source) { return null; @@ -1198,11 +1199,7 @@ export class MessageModel extends Backbone.Model { public markReadNoCommit(readAt: number) { this.set({ unread: 0 }); - if ( - this.get('expirationType') === 'deleteAfterRead' && - this.get('expireTimer') && - Boolean(this.get('expirationStartTimestamp')) === false - ) { + if (this.get('expirationType') === 'deleteAfterRead' && this.get('expireTimer')) { this.set({ expirationStartTimestamp: setExpirationStartTimestamp('deleteAfterRead', readAt), }); diff --git a/ts/receiver/queuedJob.ts b/ts/receiver/queuedJob.ts index 9b83d37e8..79bf62912 100644 --- a/ts/receiver/queuedJob.ts +++ b/ts/receiver/queuedJob.ts @@ -165,6 +165,12 @@ function handleMentions( function updateReadStatus(message: MessageModel) { if (message.isExpirationTimerUpdate()) { message.set({ unread: 0 }); + + if (message.get('expirationType') === 'deleteAfterRead' && message.get('expireTimer')) { + message.set({ + expirationStartTimestamp: setExpirationStartTimestamp('deleteAfterRead'), + }); + } } } @@ -311,10 +317,6 @@ async function handleExpirationTimerUpdateNoCommit( expireTimer: number, lastDisappearingMessageChangeTimestamp: number ) { - message.set({ - unread: 0, // mark the message as read. - }); - await conversation.updateExpireTimer({ providedExpirationType: expirationType, providedExpireTimer: expireTimer,