mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2025-12-20 02:08:57 +00:00
Avoid persisting DOE message in first pass
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
})
|
||||
);
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user