diff --git a/briar-api/src/main/java/org/briarproject/briar/api/conversation/ConversationManager.java b/briar-api/src/main/java/org/briarproject/briar/api/conversation/ConversationManager.java index e33faca9a..fee34cd6b 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/conversation/ConversationManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/conversation/ConversationManager.java @@ -44,6 +44,14 @@ public interface ConversationManager { */ boolean deleteAllMessages(ContactId c) throws DbException; + /** + * Deletes the given set of messages associated with the given contact. + * + * @return true if all given messages could be deleted, false otherwise + */ + boolean deleteMessages(ContactId c, Collection messageIds) + throws DbException; + @NotNullByDefault interface ConversationClient { diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java index 957f7e2ad..7163e4c80 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/ConversationManagerImpl.java @@ -5,6 +5,7 @@ import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.MessageTracker.GroupCount; import org.briarproject.briar.api.conversation.ConversationManager; import org.briarproject.briar.api.conversation.ConversationMessageHeader; @@ -84,4 +85,18 @@ class ConversationManagerImpl implements ConversationManager { }); } + @Override + public boolean deleteMessages(ContactId c, Collection toDelete) + throws DbException { + return db.transactionWithResult(false, txn -> { + boolean allDeleted = true; + for (ConversationClient client : clients) { + Set idSet = client.getMessageIds(txn, c); + idSet.retainAll(toDelete); + allDeleted = client.deleteMessages(txn, c, idSet) && allDeleted; + } + return allDeleted; + }); + } + }