feat: updated hasOutdatedClient to track last user to send a legacy message

this makes the banner work properlly in closed groups
pull/2660/head
William Grant 2 years ago
parent 84dec94450
commit 93cb972514

@ -255,15 +255,14 @@ export class SessionConversation extends React.Component<Props, State> {
<SessionTheme>
<div className="conversation-header">
<ConversationHeaderWithDetails />
{selectedConversation?.hasOutdatedClient && (
<NoticeBanner
text={window.i18n('disappearingMessagesModeOutdated', [
selectedConversation?.nickname ||
selectedConversation?.displayNameInProfile ||
selectedConversation.id,
])}
/>
)}
{selectedConversation?.hasOutdatedClient &&
selectedConversation.hasOutdatedClient.length > 0 && (
<NoticeBanner
text={window.i18n('disappearingMessagesModeOutdated', [
selectedConversation.hasOutdatedClient,
])}
/>
)}
</div>
{isSelectedConvoInitialLoadingInProgress ? (
<ConvoLoadingSpinner />

@ -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,

@ -134,7 +134,6 @@ export function formatRowOfConversation(row?: Record<string, any>): 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;

@ -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

@ -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,

@ -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(

@ -262,7 +262,7 @@ export interface ReduxConversationType {
expirationType?: DisappearingMessageConversationType;
expireTimer?: number;
lastDisappearingMessageChangeTimestamp?: number;
hasOutdatedClient?: boolean;
hasOutdatedClient?: string;
isTyping?: boolean;
isBlocked?: boolean;
isKickedFromGroup?: boolean;

Loading…
Cancel
Save