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;
/**
* 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.
*/

View File

@@ -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<MessageId> toDelete)
throws DbException {
public DeletionResult deleteMessages(ContactId c,
Collection<MessageId> toDelete) throws DbException {
return db.transactionWithResult(false, txn -> {
DeletionResult result = new DeletionResult();
for (ConversationClient client : clients) {