Add transactional variant of getGroupCount().

This commit is contained in:
akwizgran
2020-11-30 09:48:37 +00:00
parent d829c25717
commit d559e821ca
2 changed files with 20 additions and 14 deletions

View File

@@ -43,6 +43,11 @@ public interface ConversationManager {
*/ */
GroupCount getGroupCount(ContactId c) throws DbException; 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. * Deletes all messages exchanged with the given contact.
*/ */

View File

@@ -57,10 +57,15 @@ class ConversationManagerImpl implements ConversationManager {
@Override @Override
public GroupCount getGroupCount(ContactId contactId) throws DbException { 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; int msgCount = 0, unreadCount = 0;
long latestTime = 0; long latestTime = 0;
Transaction txn = db.startTransaction(true);
try {
for (ConversationClient client : clients) { for (ConversationClient client : clients) {
GroupCount count = client.getGroupCount(txn, contactId); GroupCount count = client.getGroupCount(txn, contactId);
msgCount += count.getMsgCount(); msgCount += count.getMsgCount();
@@ -68,10 +73,6 @@ class ConversationManagerImpl implements ConversationManager {
if (count.getLatestMsgTime() > latestTime) if (count.getLatestMsgTime() > latestTime)
latestTime = count.getLatestMsgTime(); latestTime = count.getLatestMsgTime();
} }
db.commitTransaction(txn);
} finally {
db.endTransaction(txn);
}
return new GroupCount(msgCount, unreadCount, latestTime); return new GroupCount(msgCount, unreadCount, latestTime);
} }
@@ -87,8 +88,8 @@ class ConversationManagerImpl implements ConversationManager {
} }
@Override @Override
public DeletionResult deleteMessages(ContactId c, Collection<MessageId> toDelete) public DeletionResult deleteMessages(ContactId c,
throws DbException { Collection<MessageId> toDelete) throws DbException {
return db.transactionWithResult(false, txn -> { return db.transactionWithResult(false, txn -> {
DeletionResult result = new DeletionResult(); DeletionResult result = new DeletionResult();
for (ConversationClient client : clients) { for (ConversationClient client : clients) {