fix: expiration update to off expire with previous expiration settings

pull/2940/head
Audric Ackermann 2 years ago
parent b2d22b2a73
commit 5fc234ee16

@ -8,7 +8,6 @@ import { SessionIcon } from '../icon/SessionIcon';
const ExpireTimerBucket = styled.div` const ExpireTimerBucket = styled.div`
font-size: var(--font-size-xs); font-size: var(--font-size-xs);
line-height: 16px;
letter-spacing: 0.3px; letter-spacing: 0.3px;
text-transform: uppercase; text-transform: uppercase;
user-select: none; user-select: none;

@ -72,7 +72,7 @@ const MessageStatusContainer = styled.div<{ isIncoming: boolean }>`
margin-inline-start: 5px; margin-inline-start: 5px;
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: baseline; align-items: center;
`; `;
const StyledStatusText = styled.div` const StyledStatusText = styled.div`

@ -856,9 +856,12 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
return false; return false;
} }
const previousExpirationMode = this.getExpirationMode();
const previousExpirationTimer = this.getExpireTimer();
if ( if (
isEqual(expirationMode, this.getExpirationMode()) && isEqual(expirationMode, previousExpirationMode) &&
isEqual(expireTimer, this.getExpireTimer()) isEqual(expireTimer, previousExpirationTimer)
) { ) {
window.log.debug( window.log.debug(
`[updateExpireTimer] Ignoring ExpireTimerUpdate ${ `[updateExpireTimer] Ignoring ExpireTimerUpdate ${
@ -898,6 +901,11 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
expirationMode 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 = { const commonAttributes = {
flags: SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE, flags: SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE,
expirationTimerUpdate: { expirationTimerUpdate: {
@ -927,6 +935,11 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
received_at: timestamp, received_at: timestamp,
}); });
} }
} else {
message.set({
expirationType: shouldUsePreviousExpiration ? previousExpirationMode : expirationType,
expireTimer: shouldUsePreviousExpiration ? previousExpirationTimer : expireTimer,
});
} }
if (this.isActive()) { if (this.isActive()) {

@ -459,9 +459,7 @@ function getMessageReadyToDisappear(
if (conversationModel.isPublic()) { if (conversationModel.isPublic()) {
throw Error( throw Error(
`getMessageReadyToDisappear() Disappearing messages aren't supported in communities. Message id: ${messageModel.get( `getMessageReadyToDisappear() Disappearing messages aren't supported in communities`
'id'
)}`
); );
} }
@ -480,6 +478,20 @@ function getMessageReadyToDisappear(
// This message is an ExpirationTimerUpdate // This message is an ExpirationTimerUpdate
if (lastDisappearingMessageChangeTimestamp || isLegacyConversationSettingMessage) { 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 = { const expirationTimerUpdate = {
expirationType, expirationType,
expireTimer, expireTimer,

Loading…
Cancel
Save