From 5fc234ee16f14da1362df3d490a527d5ddb6490b Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Tue, 31 Oct 2023 14:37:52 +1100 Subject: [PATCH] fix: expiration update to off expire with previous expiration settings --- ts/components/conversation/ExpireTimer.tsx | 1 - .../message/message-content/MessageStatus.tsx | 2 +- ts/models/conversation.ts | 17 +++++++++++++++-- ts/session/disappearing_messages/index.ts | 18 +++++++++++++++--- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/ts/components/conversation/ExpireTimer.tsx b/ts/components/conversation/ExpireTimer.tsx index ff6a03ad9..3aa801286 100644 --- a/ts/components/conversation/ExpireTimer.tsx +++ b/ts/components/conversation/ExpireTimer.tsx @@ -8,7 +8,6 @@ import { SessionIcon } from '../icon/SessionIcon'; const ExpireTimerBucket = styled.div` font-size: var(--font-size-xs); - line-height: 16px; letter-spacing: 0.3px; text-transform: uppercase; user-select: none; diff --git a/ts/components/conversation/message/message-content/MessageStatus.tsx b/ts/components/conversation/message/message-content/MessageStatus.tsx index f36d336d2..f0e5ed122 100644 --- a/ts/components/conversation/message/message-content/MessageStatus.tsx +++ b/ts/components/conversation/message/message-content/MessageStatus.tsx @@ -72,7 +72,7 @@ const MessageStatusContainer = styled.div<{ isIncoming: boolean }>` margin-inline-start: 5px; cursor: pointer; display: flex; - align-items: baseline; + align-items: center; `; const StyledStatusText = styled.div` diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index a1007a3d1..39e26e055 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -856,9 +856,12 @@ export class ConversationModel extends Backbone.Model { return false; } + const previousExpirationMode = this.getExpirationMode(); + const previousExpirationTimer = this.getExpireTimer(); + if ( - isEqual(expirationMode, this.getExpirationMode()) && - isEqual(expireTimer, this.getExpireTimer()) + isEqual(expirationMode, previousExpirationMode) && + isEqual(expireTimer, previousExpirationTimer) ) { window.log.debug( `[updateExpireTimer] Ignoring ExpireTimerUpdate ${ @@ -898,6 +901,11 @@ export class ConversationModel extends Backbone.Model { expirationMode ); + // For some reasons, we want a timer update to "off" to disappear with the previous setting on that conversation... + const shouldUsePreviousExpiration = + expirationType === 'unknown' && + previousExpirationMode !== 'off' && + previousExpirationMode !== 'legacy'; const commonAttributes = { flags: SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE, expirationTimerUpdate: { @@ -927,6 +935,11 @@ export class ConversationModel extends Backbone.Model { received_at: timestamp, }); } + } else { + message.set({ + expirationType: shouldUsePreviousExpiration ? previousExpirationMode : expirationType, + expireTimer: shouldUsePreviousExpiration ? previousExpirationTimer : expireTimer, + }); } if (this.isActive()) { diff --git a/ts/session/disappearing_messages/index.ts b/ts/session/disappearing_messages/index.ts index fc3336600..9c4a1898b 100644 --- a/ts/session/disappearing_messages/index.ts +++ b/ts/session/disappearing_messages/index.ts @@ -459,9 +459,7 @@ function getMessageReadyToDisappear( if (conversationModel.isPublic()) { throw Error( - `getMessageReadyToDisappear() Disappearing messages aren't supported in communities. Message id: ${messageModel.get( - 'id' - )}` + `getMessageReadyToDisappear() Disappearing messages aren't supported in communities` ); } @@ -480,6 +478,20 @@ function getMessageReadyToDisappear( // This message is an ExpirationTimerUpdate if (lastDisappearingMessageChangeTimestamp || isLegacyConversationSettingMessage) { + const previousExpirationMode = conversationModel.getExpirationMode(); + const previousExpirationTimer = conversationModel.getExpireTimer(); + const shouldUsePreviousExpiration = + expirationType === 'unknown' && + previousExpirationMode !== 'off' && + previousExpirationMode !== 'legacy'; + + if (shouldUsePreviousExpiration) { + messageModel.set({ + expirationType: previousExpirationMode, + expireTimer: previousExpirationTimer, + }); + } + const expirationTimerUpdate = { expirationType, expireTimer,