mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Move setReadFlag() from ConversationClient to ConversationManager
This commit is contained in:
committed by
Torsten Grote
parent
0bf10a827f
commit
a923c1151c
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user