From 93cb972514a10c6d280e5974ed7e047ce43b3933 Mon Sep 17 00:00:00 2001 From: William Grant Date: Mon, 3 Apr 2023 14:09:06 +0200 Subject: [PATCH] feat: updated hasOutdatedClient to track last user to send a legacy message this makes the banner work properlly in closed groups --- .../conversation/SessionConversation.tsx | 17 +++++++-------- ts/models/conversationAttributes.ts | 3 +-- ts/node/database_utility.ts | 1 - ts/node/migration/sessionMigrations.ts | 9 +++----- ts/node/sql.ts | 3 +-- ts/receiver/contentMessage.ts | 21 ++++++++++++------- ts/state/ducks/conversations.ts | 2 +- 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/ts/components/conversation/SessionConversation.tsx b/ts/components/conversation/SessionConversation.tsx index 71ea0bee7..f43540a01 100644 --- a/ts/components/conversation/SessionConversation.tsx +++ b/ts/components/conversation/SessionConversation.tsx @@ -255,15 +255,14 @@ export class SessionConversation extends React.Component {
- {selectedConversation?.hasOutdatedClient && ( - - )} + {selectedConversation?.hasOutdatedClient && + selectedConversation.hasOutdatedClient.length > 0 && ( + + )}
{isSelectedConvoInitialLoadingInProgress ? ( diff --git a/ts/models/conversationAttributes.ts b/ts/models/conversationAttributes.ts index 70db848bd..b9537708e 100644 --- a/ts/models/conversationAttributes.ts +++ b/ts/models/conversationAttributes.ts @@ -35,7 +35,7 @@ export interface ConversationAttributes { expireTimer: number; lastDisappearingMessageChangeTimestamp: number; - hasOutdatedClient: boolean; + hasOutdatedClient?: string; mentionedUs: boolean; unreadCount: number; @@ -96,7 +96,6 @@ export const fillConvoAttributesWithDefaults = ( expireTimer: 0, lastDisappearingMessageChangeTimestamp: 0, - hasOutdatedClient: false, active_at: 0, lastMessageStatus: undefined, diff --git a/ts/node/database_utility.ts b/ts/node/database_utility.ts index e1ecd7784..4f0c00f84 100644 --- a/ts/node/database_utility.ts +++ b/ts/node/database_utility.ts @@ -134,7 +134,6 @@ export function formatRowOfConversation(row?: Record): Conversation convo.readCapability = Boolean(convo.readCapability); convo.writeCapability = Boolean(convo.writeCapability); convo.uploadCapability = Boolean(convo.uploadCapability); - convo.hasOutdatedClient = Boolean(convo.hasOutdatedClient); if (!convo.conversationIdOrigin) { convo.conversationIdOrigin = undefined; diff --git a/ts/node/migration/sessionMigrations.ts b/ts/node/migration/sessionMigrations.ts index 3b377bda4..56ae41747 100644 --- a/ts/node/migration/sessionMigrations.ts +++ b/ts/node/migration/sessionMigrations.ts @@ -1223,16 +1223,13 @@ function updateToSessionSchemaVersion30(currentVersion: number, db: BetterSqlite `ALTER TABLE ${CONVERSATIONS_TABLE} ADD COLUMN lastDisappearingMessageChangeTimestamp INTEGER DEFAULT 0;` ).run(); - db.prepare( - `ALTER TABLE ${CONVERSATIONS_TABLE} ADD COLUMN hasOutdatedClient BOOLEAN DEFAULT false;` - ).run(); + db.prepare(`ALTER TABLE ${CONVERSATIONS_TABLE} ADD COLUMN hasOutdatedClient TEXT;`).run(); - // same value in ts/util/releaseFeature.ts but we cannot import since window doesn't exist yet. // TODO update to agreed value between platforms - const featureReleaseTimestamp = 1677574800000; // unix 28/02/2023 09:00 + const disappearingMessagesV2ReleaseTimestamp = 1677488400000; // unix 27/02/2023 09:00 // support disppearing messages legacy mode until after the platform agreed timestamp - if (Date.now() < featureReleaseTimestamp) { + if (Date.now() < disappearingMessagesV2ReleaseTimestamp) { db.prepare( `UPDATE ${CONVERSATIONS_TABLE} SET expirationType = $expirationType diff --git a/ts/node/sql.ts b/ts/node/sql.ts index f0456555a..5e92171d1 100644 --- a/ts/node/sql.ts +++ b/ts/node/sql.ts @@ -561,7 +561,7 @@ function saveConversation(data: ConversationAttributes, instance?: BetterSqlite3 expirationType, expireTimer, lastDisappearingMessageChangeTimestamp, - hasOutdatedClient: toSqliteBoolean(hasOutdatedClient), + hasOutdatedClient, mentionedUs: toSqliteBoolean(mentionedUs), unreadCount, lastMessageStatus, @@ -2356,7 +2356,6 @@ function fillWithTestData(numConvosToAdd: number, numMsgsToAdd: number) { expirationType: 'off', expireTimer: 0, lastDisappearingMessageChangeTimestamp: 0, - hasOutdatedClient: false, groupAdmins: [], groupModerators: [], isApproved: false, diff --git a/ts/receiver/contentMessage.ts b/ts/receiver/contentMessage.ts index 1f047c2cf..f677295ca 100644 --- a/ts/receiver/contentMessage.ts +++ b/ts/receiver/contentMessage.ts @@ -446,15 +446,22 @@ export async function innerHandleSwarmContentMessage( if (isLegacyMessage) { // trigger notice banner - if (!conversationModelForUIUpdate.get('hasOutdatedClient')) { - conversationModelForUIUpdate.set({ hasOutdatedClient: true }); - conversationModelForUIUpdate.commit(); - } - } else { + const outdatedSender = + senderConversationModel.get('nickname') || + senderConversationModel.get('displayNameInProfile') || + senderConversationModel.get('id'); + if (conversationModelForUIUpdate.get('hasOutdatedClient')) { - conversationModelForUIUpdate.set({ hasOutdatedClient: false }); - conversationModelForUIUpdate.commit(); + conversationModelForUIUpdate.set({ + hasOutdatedClient: + conversationModelForUIUpdate.get('hasOutdatedClient') === outdatedSender + ? outdatedSender + : undefined, + }); + } else { + conversationModelForUIUpdate.set({ hasOutdatedClient: outdatedSender }); } + conversationModelForUIUpdate.commit(); } await handleSwarmDataMessage( diff --git a/ts/state/ducks/conversations.ts b/ts/state/ducks/conversations.ts index 73a38cf96..8205fc521 100644 --- a/ts/state/ducks/conversations.ts +++ b/ts/state/ducks/conversations.ts @@ -262,7 +262,7 @@ export interface ReduxConversationType { expirationType?: DisappearingMessageConversationType; expireTimer?: number; lastDisappearingMessageChangeTimestamp?: number; - hasOutdatedClient?: boolean; + hasOutdatedClient?: string; isTyping?: boolean; isBlocked?: boolean; isKickedFromGroup?: boolean;