add transactional versions of some API calls

This commit is contained in:
ialokim
2021-12-06 21:08:05 +01:00
parent 8d5803098b
commit d29812f055
6 changed files with 55 additions and 15 deletions

View File

@@ -58,15 +58,16 @@ class ConversationManagerImpl implements ConversationManager {
@Override
public Collection<ConversationMessageHeader> getMessageHeaders(ContactId c)
throws DbException {
return db.transactionWithResult(true,
txn -> getMessageHeaders(txn, c));
}
@Override
public Collection<ConversationMessageHeader> getMessageHeaders(Transaction txn, ContactId c)
throws DbException {
List<ConversationMessageHeader> messages = new ArrayList<>();
Transaction txn = db.startTransaction(true);
try {
for (ConversationClient client : clients) {
messages.addAll(client.getMessageHeaders(txn, c));
}
db.commitTransaction(txn);
} finally {
db.endTransaction(txn);
for (ConversationClient client : clients) {
messages.addAll(client.getMessageHeaders(txn, c));
}
return messages;
}
@@ -125,10 +126,14 @@ class ConversationManagerImpl implements ConversationManager {
@Override
public void setReadFlag(GroupId g, MessageId m, boolean read)
throws DbException {
db.transaction(false, txn -> {
boolean wasRead = messageTracker.setReadFlag(txn, g, m, read);
if (read && !wasRead) db.startCleanupTimer(txn, m);
});
db.transaction(false, txn -> setReadFlag(txn, g, m, read));
}
@Override
public void setReadFlag(Transaction txn, GroupId g, MessageId m, boolean read)
throws DbException {
boolean wasRead = messageTracker.setReadFlag(txn, g, m, read);
if (read && !wasRead) db.startCleanupTimer(txn, m);
}
@Override

View File

@@ -466,8 +466,14 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
@Override
public String getMessageText(MessageId m) throws DbException {
return db.transactionWithNullableResult(true, txn ->
getMessageText(txn, m));
}
@Override
public String getMessageText(Transaction txn, MessageId m) throws DbException {
try {
BdfList body = clientHelper.getMessageAsList(m);
BdfList body = clientHelper.getMessageAsList(txn, m);
if (body.size() == 1) return body.getString(0); // Legacy format
else return body.getOptionalString(1);
} catch (FormatException e) {