fix: allow to delete msg locally only for groupv2

pull/3281/head
Audric Ackermann 3 months ago
parent 8005f6eed6
commit 9924381857
No known key found for this signature in database

@ -242,11 +242,7 @@ export async function deleteMessagesFromSwarmAndCompletelyLocally(
// LEGACY GROUPS -- we cannot delete on the swarm (just unsend which is done separately)
if (conversation.isClosedGroup() && PubKey.is05Pubkey(pubkey)) {
window.log.info('Cannot delete message from a closed group swarm, so we just complete delete.');
await Promise.all(
messages.map(async message => {
return deleteMessageLocallyOnly({ conversation, message, deletionType: 'complete' });
})
);
await deleteMessageLocallyOnly({ conversation, messages, deletionType: 'complete' });
return;
}
window.log.info(
@ -261,11 +257,7 @@ export async function deleteMessagesFromSwarmAndCompletelyLocally(
'deleteMessagesFromSwarmAndCompletelyLocally: some messages failed to be deleted. Maybe they were already deleted?'
);
}
await Promise.all(
messages.map(async message => {
return deleteMessageLocallyOnly({ conversation, message, deletionType: 'complete' });
})
);
await deleteMessageLocallyOnly({ conversation, messages, deletionType: 'complete' });
}
/**
@ -281,11 +273,8 @@ export async function deleteMessagesFromSwarmAndMarkAsDeletedLocally(
window.log.info(
'Cannot delete messages from a legacy closed group swarm, so we just markDeleted.'
);
await Promise.all(
messages.map(async message => {
return deleteMessageLocallyOnly({ conversation, message, deletionType: 'markDeleted' });
})
);
await deleteMessageLocallyOnly({ conversation, messages, deletionType: 'markDeleted' });
return;
}
@ -301,11 +290,7 @@ export async function deleteMessagesFromSwarmAndMarkAsDeletedLocally(
'deleteMessagesFromSwarmAndMarkAsDeletedLocally: some messages failed to be deleted but still removing the messages content... '
);
}
await Promise.all(
messages.map(async message => {
return deleteMessageLocallyOnly({ conversation, message, deletionType: 'markDeleted' });
})
);
await deleteMessageLocallyOnly({ conversation, messages, deletionType: 'markDeleted' });
}
/**
@ -315,19 +300,25 @@ export async function deleteMessagesFromSwarmAndMarkAsDeletedLocally(
*/
export async function deleteMessageLocallyOnly({
conversation,
message,
messages,
deletionType,
}: WithLocalMessageDeletionType & {
conversation: ConversationModel;
message: MessageModel;
messages: Array<MessageModel>;
}) {
for (let index = 0; index < messages.length; index++) {
const message = messages[index];
if (deletionType === 'complete') {
// remove the message from the database
// eslint-disable-next-line no-await-in-loop
await conversation.removeMessage(message.get('id'));
} else {
// just mark the message as deleted but still show in conversation
// eslint-disable-next-line no-await-in-loop
await message.markAsDeleted();
}
}
conversation.updateLastMessage();
}
@ -391,7 +382,7 @@ const doDeleteSelectedMessagesInSOGS = async (
if (msgToDeleteLocally) {
return deleteMessageLocallyOnly({
conversation,
message: msgToDeleteLocally,
messages: [msgToDeleteLocally],
deletionType: 'complete',
});
}
@ -430,11 +421,9 @@ const doDeleteSelectedMessages = async ({
return;
}
/**
* Note: groupv2 support deleteForEveryone only.
* For groupv2, a user can delete only his messages, but an admin can delete the messages of anyone.
* */
if (deleteForEveryone || conversation.isClosedGroupV2()) {
// Note: a groupv2 member can delete messages for everyone if they are the admin, or if that message is theirs.
if (deleteForEveryone) {
if (conversation.isClosedGroupV2()) {
const convoId = conversation.id;
if (!PubKey.is03Pubkey(convoId)) {
@ -466,6 +455,16 @@ const doDeleteSelectedMessages = async ({
return;
}
// delete just for me in a groupv2 only means delete locally (not even synced to our other devices)
if (conversation.isClosedGroupV2()) {
await deleteMessageLocallyOnly({
conversation,
messages: selectedMessages,
deletionType: 'markDeleted',
});
return;
}
// delete just for me in a legacy closed group only means delete locally
if (conversation.isClosedGroup()) {
await deleteMessagesFromSwarmAndMarkAsDeletedLocally(conversation, selectedMessages);

Loading…
Cancel
Save