diff --git a/ts/util/deleteForEveryone.preload.ts b/ts/util/deleteForEveryone.preload.ts index 3ca58236a4..4278331a24 100644 --- a/ts/util/deleteForEveryone.preload.ts +++ b/ts/util/deleteForEveryone.preload.ts @@ -19,7 +19,8 @@ export async function deleteForEveryone( doe: Pick< DeleteAttributesType, 'fromId' | 'targetSentTimestamp' | 'serverTimestamp' - > + >, + { shouldPersist = true }: { shouldPersist?: boolean } = {} ): Promise { if (isDeletionByMe(message, doe)) { const conversation = window.ConversationController.get( @@ -35,7 +36,7 @@ export async function deleteForEveryone( return; } - await handleDeleteForEveryone(message, doe); + await handleDeleteForEveryone(message, doe, { shouldPersist }); return; } @@ -50,7 +51,7 @@ export async function deleteForEveryone( return; } - await handleDeleteForEveryone(message, doe); + await handleDeleteForEveryone(message, doe, { shouldPersist }); } function isDeletionByMe( @@ -70,7 +71,8 @@ export async function handleDeleteForEveryone( del: Pick< DeleteAttributesType, 'fromId' | 'targetSentTimestamp' | 'serverTimestamp' - > + >, + { shouldPersist = true }: { shouldPersist?: boolean } ): Promise { if (message.deletingForEveryone || message.get('deletedForEveryone')) { return; @@ -97,16 +99,18 @@ export async function handleDeleteForEveryone( reactions: [], }); - // We delete the message first, before re-saving it -- this causes any foreign key ON - // DELETE CASCADE and messages_on_delete triggers to run, which is important - await DataWriter.removeMessage(message.attributes.id, { - cleanupMessages: async () => { - // We don't actually want to remove this message up from in-memory caches - }, - }); - await window.MessageCache.saveMessage(message.attributes, { - forceSave: true, - }); + if (shouldPersist) { + // We delete the message first, before re-saving it -- this causes any foreign key + // ON DELETE CASCADE and messages_on_delete triggers to run, which is important + await DataWriter.removeMessage(message.attributes.id, { + cleanupMessages: async () => { + // We don't actually want to remove this message up from in-memory caches + }, + }); + await window.MessageCache.saveMessage(message.attributes, { + forceSave: true, + }); + } } finally { // eslint-disable-next-line no-param-reassign message.deletingForEveryone = undefined; diff --git a/ts/util/modifyTargetMessage.preload.ts b/ts/util/modifyTargetMessage.preload.ts index dab511bde6..2ed8e63071 100644 --- a/ts/util/modifyTargetMessage.preload.ts +++ b/ts/util/modifyTargetMessage.preload.ts @@ -355,7 +355,7 @@ export async function modifyTargetMessage( const deletes = Deletes.forMessage(message.attributes); await Promise.all( deletes.map(async del => { - await deleteForEveryone(message, del); + await deleteForEveryone(message, del, { shouldPersist: !isFirstRun }); changed = true; }) ); diff --git a/ts/util/onStoryRecipientUpdate.preload.ts b/ts/util/onStoryRecipientUpdate.preload.ts index dcec3f9d07..837badaf4c 100644 --- a/ts/util/onStoryRecipientUpdate.preload.ts +++ b/ts/util/onStoryRecipientUpdate.preload.ts @@ -199,11 +199,15 @@ export async function onStoryRecipientUpdate( // sent timestamp doesn't happen (it would return all copies of the // story, not just the one we want to delete). drop( - handleDeleteForEveryone(message, { - fromId: ourConversationId, - serverTimestamp: Number(item.serverTimestamp), - targetSentTimestamp: item.timestamp, - }) + handleDeleteForEveryone( + message, + { + fromId: ourConversationId, + serverTimestamp: Number(item.serverTimestamp), + targetSentTimestamp: item.timestamp, + }, + { shouldPersist: true } + ) ); } else { message.set({