diff --git a/ts/models/message.ts b/ts/models/message.ts index f9c11f393..9456fc1db 100644 --- a/ts/models/message.ts +++ b/ts/models/message.ts @@ -521,7 +521,7 @@ export class MessageModel extends Backbone.Model { const expirationLength = this.get('expireTimer') * DURATION.SECONDS; const expireTimerStart = this.get('expirationStartTimestamp'); const expirationTimestamp = - expirationType && expirationLength && expireTimerStart + expirationType && expireTimerStart && expirationLength ? expireTimerStart + expirationLength : null; @@ -1170,13 +1170,14 @@ export class MessageModel extends Backbone.Model { await this.commit(); } - window?.log?.debug('Set message expiration', { + window?.log?.debug('WIP: Set message expiration', { expiresAt, sentAt: this.get('sent_at'), }); const messageHash = this.get('messageHash'); if (messageHash) { + // TODO Consolidate the snode /expire logic across all the different functions that call it. await expireMessageOnSnode({ messageHash, expireTimer: this.get('expireTimer'), diff --git a/ts/models/messageFactory.ts b/ts/models/messageFactory.ts index 09c214c72..12ad0f2ca 100644 --- a/ts/models/messageFactory.ts +++ b/ts/models/messageFactory.ts @@ -80,7 +80,7 @@ function getSharedAttributesForPublicMessage({ isPublic: true, conversationId, messageHash: '', // we do not care of a messageHash for an opengroup message. we have serverId for that - // TODO do we need to worry about this? + // Note Community messages do not have an expiration expirationStartTimestamp: undefined, }; } diff --git a/ts/receiver/queuedJob.ts b/ts/receiver/queuedJob.ts index f455f2b2c..4b9e6d82b 100644 --- a/ts/receiver/queuedJob.ts +++ b/ts/receiver/queuedJob.ts @@ -359,12 +359,42 @@ async function handleRegularMessage( }); } -function markConvoAsReadIfOutgoingMessage(conversation: ConversationModel, message: MessageModel) { +async function markConvoAsReadIfOutgoingMessage( + conversation: ConversationModel, + message: MessageModel +) { const isOutgoingMessage = message.get('type') === 'outgoing' || message.get('direction') === 'outgoing'; if (isOutgoingMessage) { const sentAt = message.get('sent_at') || message.get('serverTimestamp'); if (sentAt) { + const expirationType = message.get('expirationType'); + const expireTimer = message.get('expireTimer'); + // NOTE starting disappearing messages timer for all outbound messages + if ( + expirationType && + expireTimer > 0 && + Boolean(message.get('expirationStartTimestamp')) === false + ) { + const expirationMode = changeToDisappearingMessageConversationType( + conversation, + expirationType, + expireTimer + ); + + if (expirationMode !== 'off') { + window.log.debug( + `WIP: markConvoAsReadIfOutgoingMessage setExpirationStartTimestamp is starting` + ); + message.set({ + expirationStartTimestamp: setExpirationStartTimestamp( + expirationMode, + message.get('sent_at') + ), + }); + await message.commit(); + } + } conversation.markConversationRead(sentAt); } } @@ -522,7 +552,7 @@ export async function handleMessageJob( ); } - markConvoAsReadIfOutgoingMessage(conversation, messageModel); + await markConvoAsReadIfOutgoingMessage(conversation, messageModel); if (messageModel.get('unread')) { conversation.throttledNotify(messageModel); }