diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java index 4a3130f48..8bbd5c325 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java @@ -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); 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 063c8d947..41ebd823d 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 @@ -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. */ diff --git a/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java b/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java index 7cebf96b5..aeae27899 100644 --- a/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/client/ConversationClientImpl.java @@ -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)); - } } diff --git a/briar-core/src/main/java/org/briarproject/briar/conversation/ConversationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/conversation/ConversationManagerImpl.java index 7431b9bec..07afd24e7 100644 --- a/briar-core/src/main/java/org/briarproject/briar/conversation/ConversationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/conversation/ConversationManagerImpl.java @@ -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 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 { diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java index 85a701266..c0073cc8b 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java @@ -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 diff --git a/briar-core/src/test/java/org/briarproject/briar/autodelete/AbstractAutoDeleteTest.java b/briar-core/src/test/java/org/briarproject/briar/autodelete/AbstractAutoDeleteTest.java index be35939f3..c5e47a6f9 100644 --- a/briar-core/src/test/java/org/briarproject/briar/autodelete/AbstractAutoDeleteTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/autodelete/AbstractAutoDeleteTest.java @@ -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); } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index ff44f2dc0..041d304d6 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -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); diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt index c3bdb96ee..4e1aabdb6 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt @@ -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) } diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt index 3dde2510b..fe0120322 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt @@ -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)