From 2f4c0114aabb210d18b3b97ca0a4c77c3f18ef62 Mon Sep 17 00:00:00 2001 From: William Grant Date: Mon, 3 Apr 2023 14:09:06 +0200 Subject: [PATCH] feat: tested new expiration modes with legacy and new clients fixed banner logic --- ts/node/migration/sessionMigrations.ts | 3 +- ts/receiver/contentMessage.ts | 45 +++++++++++++++++--------- ts/receiver/dataMessage.ts | 11 +++---- ts/util/expiringMessages.ts | 1 + 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/ts/node/migration/sessionMigrations.ts b/ts/node/migration/sessionMigrations.ts index 56ae41747..e43ec06c2 100644 --- a/ts/node/migration/sessionMigrations.ts +++ b/ts/node/migration/sessionMigrations.ts @@ -1227,6 +1227,7 @@ function updateToSessionSchemaVersion30(currentVersion: number, db: BetterSqlite // TODO update to agreed value between platforms const disappearingMessagesV2ReleaseTimestamp = 1677488400000; // unix 27/02/2023 09:00 + // const disappearingMessagesV2ReleaseTimestamp = 1677661200000; // unix 01/03/2023 09:00 // support disppearing messages legacy mode until after the platform agreed timestamp if (Date.now() < disappearingMessagesV2ReleaseTimestamp) { @@ -1245,7 +1246,7 @@ function updateToSessionSchemaVersion30(currentVersion: number, db: BetterSqlite db.prepare( `UPDATE ${CONVERSATIONS_TABLE} SET expirationType = $expirationType - WHERE (type = 'group' AND is_medium_group = true) AND expireTimer > 0;` + WHERE type = 'group' AND is_medium_group = 1 AND expireTimer > 0;` ).run({ expirationType: 'deleteAfterSend' }); } diff --git a/ts/receiver/contentMessage.ts b/ts/receiver/contentMessage.ts index f677295ca..0a08de29f 100644 --- a/ts/receiver/contentMessage.ts +++ b/ts/receiver/contentMessage.ts @@ -416,10 +416,14 @@ export async function innerHandleSwarmContentMessage( const isDisappearingMessagesV2Released = await checkIsFeatureReleased( 'Disappearing Messages V2' ); + + const isLegacyConversationSettingMessage = Boolean( + !content.expirationTimer && + dataMessage.flags === SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE + ); const isLegacyMessage = Boolean( - (dataMessage.expireTimer && dataMessage.expireTimer > -1) || - (!content.expirationTimer && - dataMessage.flags === SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE) + (!content.expirationTimer && dataMessage.expireTimer && dataMessage.expireTimer > -1) || + isLegacyConversationSettingMessage ); const expireTimer = isDisappearingMessagesV2Released @@ -440,28 +444,37 @@ export async function innerHandleSwarmContentMessage( expirationType, expireTimer, lastDisappearingMessageChangeTimestamp, + isLegacyConversationSettingMessage, isLegacyMessage, isDisappearingMessagesV2Released, }; - if (isLegacyMessage) { - // trigger notice banner - const outdatedSender = - senderConversationModel.get('nickname') || - senderConversationModel.get('displayNameInProfile') || - senderConversationModel.get('id'); + const outdatedSender = + senderConversationModel.get('nickname') || + senderConversationModel.get('displayNameInProfile') || + senderConversationModel.get('id'); - if (conversationModelForUIUpdate.get('hasOutdatedClient')) { + if (conversationModelForUIUpdate.get('hasOutdatedClient')) { + // trigger notice banner + if (isLegacyMessage) { + if (conversationModelForUIUpdate.get('hasOutdatedClient') !== outdatedSender) { + conversationModelForUIUpdate.set({ + hasOutdatedClient: outdatedSender, + }); + } + } else { conversationModelForUIUpdate.set({ - hasOutdatedClient: - conversationModelForUIUpdate.get('hasOutdatedClient') === outdatedSender - ? outdatedSender - : undefined, + hasOutdatedClient: undefined, }); - } else { - conversationModelForUIUpdate.set({ hasOutdatedClient: outdatedSender }); } conversationModelForUIUpdate.commit(); + } else { + if (isLegacyMessage) { + conversationModelForUIUpdate.set({ + hasOutdatedClient: outdatedSender, + }); + conversationModelForUIUpdate.commit(); + } } await handleSwarmDataMessage( diff --git a/ts/receiver/dataMessage.ts b/ts/receiver/dataMessage.ts index 7d6cf3b89..8fb051fd7 100644 --- a/ts/receiver/dataMessage.ts +++ b/ts/receiver/dataMessage.ts @@ -251,6 +251,7 @@ export async function handleSwarmDataMessage( expirationType, expireTimer, lastDisappearingMessageChangeTimestamp, + isLegacyConversationSettingMessage, isLegacyMessage, isDisappearingMessagesV2Released, } = expireUpdate; @@ -270,12 +271,8 @@ export async function handleSwarmDataMessage( // TODO legacy messages support will be removed in a future release // This message is conversation setting change message - if ( - lastDisappearingMessageChangeTimestamp || - (isLegacyMessage && - rawDataMessage.flags === SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE) - ) { - if (isDisappearingMessagesV2Released) { + if (lastDisappearingMessageChangeTimestamp || isLegacyConversationSettingMessage) { + if (isDisappearingMessagesV2Released && isLegacyConversationSettingMessage) { window.log.info(`WIP: The legacy message is an expiration timer update. Ignoring it.`); return; } @@ -283,7 +280,7 @@ export async function handleSwarmDataMessage( const expirationTimerUpdate = { expirationType, expireTimer, - lastDisappearingMessageChangeTimestamp: isLegacyMessage + lastDisappearingMessageChangeTimestamp: isLegacyConversationSettingMessage ? isDisappearingMessagesV2Released ? convoToAddMessageTo.get('lastDisappearingMessageChangeTimestamp') : Date.now() diff --git a/ts/util/expiringMessages.ts b/ts/util/expiringMessages.ts index 8987c8c6e..cf56b3835 100644 --- a/ts/util/expiringMessages.ts +++ b/ts/util/expiringMessages.ts @@ -26,6 +26,7 @@ export type DisappearingMessageUpdate = { expireTimer: number; // This is used for the expirationTimerUpdate lastDisappearingMessageChangeTimestamp?: number; + isLegacyConversationSettingMessage?: boolean; isLegacyMessage?: boolean; isDisappearingMessagesV2Released?: boolean; };