fix: allow to delete msg locally only for groupv2

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

Loading…
Cancel
Save