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 96823d45b..e44adbd7d 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 @@ -43,6 +43,11 @@ public interface ConversationManager { */ GroupCount getGroupCount(ContactId c) throws DbException; + /** + * Returns the unified group count for all private conversation messages. + */ + GroupCount getGroupCount(Transaction txn, ContactId c) throws DbException; + /** * Deletes all messages exchanged with the given contact. */ 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 7b991f3de..8849599a7 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 @@ -57,20 +57,21 @@ class ConversationManagerImpl implements ConversationManager { @Override public GroupCount getGroupCount(ContactId contactId) throws DbException { + return db.transactionWithResult(true, txn -> + getGroupCount(txn, contactId)); + } + + @Override + public GroupCount getGroupCount(Transaction txn, ContactId contactId) + throws DbException { int msgCount = 0, unreadCount = 0; long latestTime = 0; - Transaction txn = db.startTransaction(true); - try { - for (ConversationClient client : clients) { - GroupCount count = client.getGroupCount(txn, contactId); - msgCount += count.getMsgCount(); - unreadCount += count.getUnreadCount(); - if (count.getLatestMsgTime() > latestTime) - latestTime = count.getLatestMsgTime(); - } - db.commitTransaction(txn); - } finally { - db.endTransaction(txn); + for (ConversationClient client : clients) { + GroupCount count = client.getGroupCount(txn, contactId); + msgCount += count.getMsgCount(); + unreadCount += count.getUnreadCount(); + if (count.getLatestMsgTime() > latestTime) + latestTime = count.getLatestMsgTime(); } return new GroupCount(msgCount, unreadCount, latestTime); } @@ -87,8 +88,8 @@ class ConversationManagerImpl implements ConversationManager { } @Override - public DeletionResult deleteMessages(ContactId c, Collection toDelete) - throws DbException { + public DeletionResult deleteMessages(ContactId c, + Collection toDelete) throws DbException { return db.transactionWithResult(false, txn -> { DeletionResult result = new DeletionResult(); for (ConversationClient client : clients) {