diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 3a88bff3b..186dafac9 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -2022,8 +2022,16 @@ export class ConversationModel extends Backbone.Model { return; } const messages = await Data.getLastMessagesByConversation(this.id, 1, true); - + const existingLastMessageAttribute = this.get('lastMessage'); + const existingLastMessageStatus = this.get('lastMessageStatus'); if (!messages || !messages.length) { + if (existingLastMessageAttribute || existingLastMessageStatus) { + this.set({ + lastMessageStatus: undefined, + lastMessage: undefined, + }); + await this.commit(); + } return; } const lastMessageModel = messages.at(0); @@ -2037,8 +2045,6 @@ export class ConversationModel extends Backbone.Model { lastMessageStatus, } : { lastMessage: '', lastMessageStatus: undefined }; - const existingLastMessageAttribute = this.get('lastMessage'); - const existingLastMessageStatus = this.get('lastMessageStatus'); // TODO when the last message get removed from a conversation, the lastUpdate is ignored and we keep the last message. diff --git a/ts/session/disappearing_messages/index.ts b/ts/session/disappearing_messages/index.ts index 7cb546a13..a20d2eb0b 100644 --- a/ts/session/disappearing_messages/index.ts +++ b/ts/session/disappearing_messages/index.ts @@ -67,6 +67,7 @@ async function destroyExpiredMessages() { try { window.log.info('destroyExpiredMessages: Loading messages...'); const messages = await Data.getExpiredMessages(); + window.log.debug('destroyExpiredMessages: count:', messages.length); const messagesExpiredDetails: Array<{ conversationKey: string; @@ -85,6 +86,7 @@ async function destroyExpiredMessages() { await destroyMessagesAndUpdateRedux(messagesExpiredDetails); const convosToRefresh = uniq(messagesExpiredDetails.map(m => m.conversationKey)); + window.log.info('destroyExpiredMessages: convosToRefresh:', convosToRefresh); await Promise.all( convosToRefresh.map(async c => { getConversationController() @@ -480,6 +482,18 @@ function getMessageReadyToDisappear( expirationStartTimestamp, expires_at, }); + } else if ( + expirationType === 'deleteAfterSend' && + expireTimer > 0 && + messageExpirationFromRetrieve && + messageExpirationFromRetrieve > 0 + ) { + const expirationStartTimestamp = messageExpirationFromRetrieve - expireTimer * 1000; + const expires_at = messageExpirationFromRetrieve; + messageModel.set({ + expirationStartTimestamp, + expires_at, + }); } // This message is an ExpirationTimerUpdate diff --git a/ts/state/ducks/conversations.ts b/ts/state/ducks/conversations.ts index f6aca5605..c6a9b9ddc 100644 --- a/ts/state/ducks/conversations.ts +++ b/ts/state/ducks/conversations.ts @@ -16,6 +16,7 @@ import { PropsForMessageRequestResponse, } from '../../models/messageType'; import { getConversationController } from '../../session/conversations'; +import { DisappearingMessages } from '../../session/disappearing_messages'; import { DisappearingMessageConversationModeType, DisappearingMessageType, @@ -1140,6 +1141,7 @@ export async function openConversationWithMessages(args: { }) { const { conversationKey, messageId } = args; + await DisappearingMessages.destroyExpiredMessages(); await unmarkAsForcedUnread(conversationKey); const firstUnreadIdOnOpen = await Data.getFirstUnreadMessageIdInConversation(conversationKey);