Move setReadFlag() from ConversationClient to ConversationManager

This commit is contained in:
Sebastian Kürten
2021-03-23 06:41:37 +01:00
committed by Torsten Grote
parent 0bf10a827f
commit a923c1151c
9 changed files with 30 additions and 28 deletions

View File

@@ -246,7 +246,7 @@ public class ConversationViewModel extends DbViewModel
runOnDbThread(() -> {
try {
long start = now();
messagingManager.setReadFlag(g, m, true);
conversationManager.setReadFlag(g, m, true);
logDuration(LOG, "Marking read", start);
} catch (DbException e) {
logException(LOG, WARNING, e);

View File

@@ -47,6 +47,9 @@ public interface ConversationManager {
*/
GroupCount getGroupCount(Transaction txn, ContactId c) throws DbException;
void setReadFlag(GroupId g, MessageId m, boolean read)
throws DbException;
/**
* Returns a timestamp for an outgoing message, which is later than the
* timestamp of any message in the conversation with the given contact.
@@ -83,9 +86,6 @@ public interface ConversationManager {
GroupCount getGroupCount(Transaction txn, ContactId c)
throws DbException;
void setReadFlag(GroupId g, MessageId m, boolean read)
throws DbException;
/**
* Deletes all messages associated with the given contact.
*/

View File

@@ -10,7 +10,6 @@ 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.GroupId;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.api.client.MessageTracker;
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient;
@@ -39,10 +38,4 @@ public abstract class ConversationClientImpl extends BdfIncomingMessageHook
return messageTracker.getGroupCount(txn, groupId);
}
@Override
public void setReadFlag(GroupId g, MessageId m, boolean read)
throws DbException {
db.transaction(false, txn ->
messageTracker.setReadFlag(txn, g, m, read));
}
}

View File

@@ -5,8 +5,10 @@ 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.GroupId;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.briar.api.client.MessageTracker;
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.conversation.ConversationManager;
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
@@ -28,12 +30,15 @@ import static java.lang.Math.max;
class ConversationManagerImpl implements ConversationManager {
private final DatabaseComponent db;
private final MessageTracker messageTracker;
private final Clock clock;
private final Set<ConversationClient> clients;
@Inject
ConversationManagerImpl(DatabaseComponent db, Clock clock) {
ConversationManagerImpl(DatabaseComponent db, MessageTracker messageTracker,
Clock clock) {
this.db = db;
this.messageTracker = messageTracker;
this.clock = clock;
clients = new CopyOnWriteArraySet<>();
}
@@ -81,6 +86,15 @@ class ConversationManagerImpl implements ConversationManager {
return new GroupCount(msgCount, unreadCount, latestTime);
}
@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);
});
}
@Override
public long getTimestampForOutgoingMessage(Transaction txn, ContactId c)
throws DbException {

View File

@@ -126,15 +126,6 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
return messageTracker.getGroupCount(txn, groupId);
}
@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);
});
}
@Override
public void onDatabaseOpened(Transaction txn) throws DbException {
// Create a local group to indicate that we've set this client up

View File

@@ -10,9 +10,9 @@ import org.briarproject.bramble.system.TimeTravelModule;
import org.briarproject.bramble.test.TestDatabaseConfigModule;
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.conversation.ConversationManager;
import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient;
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
import org.briarproject.briar.api.messaging.MessagingManager;
import org.briarproject.briar.test.BriarIntegrationTest;
import org.briarproject.briar.test.BriarIntegrationTestComponent;
import org.briarproject.briar.test.DaggerBriarIntegrationTestComponent;
@@ -124,11 +124,12 @@ public abstract class AbstractAutoDeleteTest extends
protected void markMessageRead(BriarIntegrationTestComponent component,
Contact contact, MessageId messageId) throws Exception {
MessagingManager messagingManager = component.getMessagingManager();
ConversationManager conversationManager =
component.getConversationManager();
ConversationClient conversationClient =
getConversationClient(component);
GroupId groupId = conversationClient.getContactGroup(contact).getId();
messagingManager.setReadFlag(groupId, messageId, true);
conversationManager.setReadFlag(groupId, messageId, true);
waitForEvents(component);
}

View File

@@ -5,6 +5,7 @@ import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.test.TestDatabaseConfigModule;
import org.briarproject.briar.api.client.ProtocolStateException;
import org.briarproject.briar.api.conversation.ConversationManager;
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
import org.briarproject.briar.api.conversation.DeletionResult;
import org.briarproject.briar.api.privategroup.GroupMessage;
@@ -41,6 +42,7 @@ public class GroupInvitationIntegrationTest
private PrivateGroupManager groupManager0, groupManager1;
private GroupInvitationManager groupInvitationManager0,
groupInvitationManager1;
private ConversationManager conversationManager1;
private Group g1From0, g0From1;
@Before
@@ -52,6 +54,7 @@ public class GroupInvitationIntegrationTest
groupManager1 = c1.getPrivateGroupManager();
groupInvitationManager0 = c0.getGroupInvitationManager();
groupInvitationManager1 = c1.getGroupInvitationManager();
conversationManager1 = c1.getConversationManager();
g1From0 = groupInvitationManager0.getContactGroup(contact1From0);
g0From1 = groupInvitationManager1.getContactGroup(contact0From1);
@@ -302,7 +305,7 @@ public class GroupInvitationIntegrationTest
assertGroupCount(messageTracker1, g0.getId(), 2, 1);
// now all messages should be read
groupInvitationManager1.setReadFlag(g0.getId(), m.getId(), true);
conversationManager1.setReadFlag(g0.getId(), m.getId(), true);
assertGroupCount(messageTracker1, g0.getId(), 2, 0);
sync1To0(1, true);

View File

@@ -11,9 +11,9 @@ import org.briarproject.bramble.api.db.DatabaseExecutor
import org.briarproject.bramble.api.db.NoSuchContactException
import org.briarproject.bramble.api.event.Event
import org.briarproject.bramble.api.event.EventListener
import org.briarproject.bramble.api.sync.MessageId
import org.briarproject.bramble.api.sync.event.MessagesAckedEvent
import org.briarproject.bramble.api.sync.event.MessagesSentEvent
import org.briarproject.bramble.api.sync.MessageId
import org.briarproject.bramble.api.system.Clock
import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
import org.briarproject.briar.api.blog.BlogInvitationRequest
@@ -92,7 +92,7 @@ constructor(
val messageIdString = ctx.getFromJson(objectMapper, "messageId")
val messageId = deserializeMessageId(messageIdString)
messagingManager.setReadFlag(groupId, messageId, true)
conversationManager.setReadFlag(groupId, messageId, true)
return ctx.json(messageIdString)
}

View File

@@ -220,7 +220,7 @@ internal class MessagingControllerImplTest : ControllerTest() {
every { messagingManager.getContactGroup(contact).id } returns group.id
every { ctx.getFromJson(objectMapper, "messageId") } returns messageIdString
every { Base64.decode(messageIdString) } returns message.id.bytes
every { messagingManager.setReadFlag(group.id, message.id, true) } just Runs
every { conversationManager.setReadFlag(group.id, message.id, true) } just Runs
every { ctx.json(messageIdString) } returns ctx
controller.markMessageRead(ctx)