Avoid persisting DOE message in first pass

This commit is contained in:
trevor-signal
2025-12-10 14:58:25 -05:00
committed by GitHub
parent ee50edaf6c
commit 4b2f6af4ad
3 changed files with 28 additions and 20 deletions

View File

@@ -19,7 +19,8 @@ export async function deleteForEveryone(
doe: Pick<
DeleteAttributesType,
'fromId' | 'targetSentTimestamp' | 'serverTimestamp'
>
>,
{ shouldPersist = true }: { shouldPersist?: boolean } = {}
): Promise<void> {
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<void> {
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;

View File

@@ -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;
})
);

View File

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