From 9e0a984297500c9c53f848fd577ca18664e2c9b5 Mon Sep 17 00:00:00 2001 From: Audric Ackermann <audric@loki.network> Date: Wed, 20 Dec 2023 13:30:52 +1100 Subject: [PATCH] fix: make DataExtractionNotification msg stay in swarm for 14d --- ts/models/conversation.ts | 1 + ts/receiver/contentMessage.ts | 38 +++++++++++++++++------ ts/session/disappearing_messages/index.ts | 1 + 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 087d2c2d5..54f4faf93 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -1113,6 +1113,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> { } const toBeAddedAttributes: MessageAttributesOptionals = { + unread: READ_MESSAGE_STATE.unread, // an incoming is by default unread, unless messageAttributes or markAttributesAsReadIfNeeded marks it as read ...messageAttributes, conversationId: this.id, type: 'incoming', diff --git a/ts/receiver/contentMessage.ts b/ts/receiver/contentMessage.ts index 50d83658f..51e1406f1 100644 --- a/ts/receiver/contentMessage.ts +++ b/ts/receiver/contentMessage.ts @@ -15,6 +15,7 @@ import { } from '../interactions/conversations/unsendingInteractions'; import { CONVERSATION_PRIORITIES, ConversationTypeEnum } from '../models/conversationAttributes'; import { findCachedBlindedMatchOrLookupOnAllServers } from '../session/apis/open_group_api/sogsv3/knownBlindedkeys'; +import { GetNetworkTime } from '../session/apis/snode_api/getNetworkTime'; import { getConversationController } from '../session/conversations'; import { concatUInt8Array, getSodiumRenderer } from '../session/crypto'; import { removeMessagePadding } from '../session/crypto/BufferPadding'; @@ -556,11 +557,19 @@ export async function innerHandleSwarmContentMessage({ senderConversationModel.getExpirationMode() ); - await handleDataExtractionNotification( + await handleDataExtractionNotification({ envelope, - content.dataExtractionNotification as SignalService.DataExtractionNotification, - { expirationTimer, expirationType, messageExpirationFromRetrieve } - ); + dataExtractionNotification: content.dataExtractionNotification as SignalService.DataExtractionNotification, + expireUpdate: { + expirationTimer, + expirationType, + messageExpirationFromRetrieve: + expirationType === 'unknown' + ? null + : GetNetworkTime.getNowWithNetworkOffset() + expirationTimer * 1000, + }, + messageHash, + }); perfEnd( `handleDataExtractionNotification-${envelope.id}`, 'handleDataExtractionNotification' @@ -844,13 +853,20 @@ async function handleMessageRequestResponse( * * We drop them if the convo is not a 1o1 conversation. */ -export async function handleDataExtractionNotification( - envelope: EnvelopePlus, - dataNotificationMessage: SignalService.DataExtractionNotification, - expireUpdate: ReadyToDisappearMsgUpdate -): Promise<void> { + +export async function handleDataExtractionNotification({ + envelope, + expireUpdate, + messageHash, + dataExtractionNotification, +}: { + envelope: EnvelopePlus; + dataExtractionNotification: SignalService.DataExtractionNotification; + expireUpdate: ReadyToDisappearMsgUpdate; + messageHash: string; +}): Promise<void> { // we currently don't care about the timestamp included in the field itself, just the timestamp of the envelope - const { type, timestamp: referencedAttachment } = dataNotificationMessage; + const { type, timestamp: referencedAttachment } = dataExtractionNotification; const { source, timestamp } = envelope; await removeFromCache(envelope); @@ -873,6 +889,7 @@ export async function handleDataExtractionNotification( let created = await convo.addSingleIncomingMessage({ source, + messageHash, sent_at: envelopeTimestamp, dataExtractionNotification: { type, @@ -888,5 +905,6 @@ export async function handleDataExtractionNotification( expireUpdate || undefined ); await created.commit(); + await convo.commit(); convo.updateLastMessage(); } diff --git a/ts/session/disappearing_messages/index.ts b/ts/session/disappearing_messages/index.ts index 3ae068867..6fea2f4b9 100644 --- a/ts/session/disappearing_messages/index.ts +++ b/ts/session/disappearing_messages/index.ts @@ -509,6 +509,7 @@ function getMessageReadyToDisappear( messageExpirationFromRetrieve && messageExpirationFromRetrieve > 0 ) { + const expirationStartTimestamp = messageExpirationFromRetrieve - expireTimer * 1000; const expires_at = messageExpirationFromRetrieve; messageModel.set({