mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 22:59:54 +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(() -> {
|
runOnDbThread(() -> {
|
||||||
try {
|
try {
|
||||||
long start = now();
|
long start = now();
|
||||||
messagingManager.setReadFlag(g, m, true);
|
conversationManager.setReadFlag(g, m, true);
|
||||||
logDuration(LOG, "Marking read", start);
|
logDuration(LOG, "Marking read", start);
|
||||||
} catch (DbException e) {
|
} catch (DbException e) {
|
||||||
logException(LOG, WARNING, e);
|
logException(LOG, WARNING, e);
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ public interface ConversationManager {
|
|||||||
*/
|
*/
|
||||||
GroupCount getGroupCount(Transaction txn, ContactId c) throws DbException;
|
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
|
* Returns a timestamp for an outgoing message, which is later than the
|
||||||
* timestamp of any message in the conversation with the given contact.
|
* timestamp of any message in the conversation with the given contact.
|
||||||
@@ -83,9 +86,6 @@ public interface ConversationManager {
|
|||||||
GroupCount getGroupCount(Transaction txn, ContactId c)
|
GroupCount getGroupCount(Transaction txn, ContactId c)
|
||||||
throws DbException;
|
throws DbException;
|
||||||
|
|
||||||
void setReadFlag(GroupId g, MessageId m, boolean read)
|
|
||||||
throws DbException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes all messages associated with the given contact.
|
* 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.db.Transaction;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.sync.GroupId;
|
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;
|
||||||
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
|
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
|
||||||
import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient;
|
import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient;
|
||||||
@@ -39,10 +38,4 @@ public abstract class ConversationClientImpl extends BdfIncomingMessageHook
|
|||||||
return messageTracker.getGroupCount(txn, groupId);
|
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.DbException;
|
||||||
import org.briarproject.bramble.api.db.Transaction;
|
import org.briarproject.bramble.api.db.Transaction;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
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.sync.MessageId;
|
||||||
import org.briarproject.bramble.api.system.Clock;
|
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.client.MessageTracker.GroupCount;
|
||||||
import org.briarproject.briar.api.conversation.ConversationManager;
|
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||||
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
|
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
|
||||||
@@ -28,12 +30,15 @@ import static java.lang.Math.max;
|
|||||||
class ConversationManagerImpl implements ConversationManager {
|
class ConversationManagerImpl implements ConversationManager {
|
||||||
|
|
||||||
private final DatabaseComponent db;
|
private final DatabaseComponent db;
|
||||||
|
private final MessageTracker messageTracker;
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
private final Set<ConversationClient> clients;
|
private final Set<ConversationClient> clients;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ConversationManagerImpl(DatabaseComponent db, Clock clock) {
|
ConversationManagerImpl(DatabaseComponent db, MessageTracker messageTracker,
|
||||||
|
Clock clock) {
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
this.messageTracker = messageTracker;
|
||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
clients = new CopyOnWriteArraySet<>();
|
clients = new CopyOnWriteArraySet<>();
|
||||||
}
|
}
|
||||||
@@ -81,6 +86,15 @@ class ConversationManagerImpl implements ConversationManager {
|
|||||||
return new GroupCount(msgCount, unreadCount, latestTime);
|
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
|
@Override
|
||||||
public long getTimestampForOutgoingMessage(Transaction txn, ContactId c)
|
public long getTimestampForOutgoingMessage(Transaction txn, ContactId c)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
|
|||||||
@@ -126,15 +126,6 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
|
|||||||
return messageTracker.getGroupCount(txn, groupId);
|
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
|
@Override
|
||||||
public void onDatabaseOpened(Transaction txn) throws DbException {
|
public void onDatabaseOpened(Transaction txn) throws DbException {
|
||||||
// Create a local group to indicate that we've set this client up
|
// 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.bramble.test.TestDatabaseConfigModule;
|
||||||
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
|
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
|
||||||
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
|
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.ConversationManager.ConversationClient;
|
||||||
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
|
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.BriarIntegrationTest;
|
||||||
import org.briarproject.briar.test.BriarIntegrationTestComponent;
|
import org.briarproject.briar.test.BriarIntegrationTestComponent;
|
||||||
import org.briarproject.briar.test.DaggerBriarIntegrationTestComponent;
|
import org.briarproject.briar.test.DaggerBriarIntegrationTestComponent;
|
||||||
@@ -124,11 +124,12 @@ public abstract class AbstractAutoDeleteTest extends
|
|||||||
|
|
||||||
protected void markMessageRead(BriarIntegrationTestComponent component,
|
protected void markMessageRead(BriarIntegrationTestComponent component,
|
||||||
Contact contact, MessageId messageId) throws Exception {
|
Contact contact, MessageId messageId) throws Exception {
|
||||||
MessagingManager messagingManager = component.getMessagingManager();
|
ConversationManager conversationManager =
|
||||||
|
component.getConversationManager();
|
||||||
ConversationClient conversationClient =
|
ConversationClient conversationClient =
|
||||||
getConversationClient(component);
|
getConversationClient(component);
|
||||||
GroupId groupId = conversationClient.getContactGroup(contact).getId();
|
GroupId groupId = conversationClient.getContactGroup(contact).getId();
|
||||||
messagingManager.setReadFlag(groupId, messageId, true);
|
conversationManager.setReadFlag(groupId, messageId, true);
|
||||||
waitForEvents(component);
|
waitForEvents(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import org.briarproject.bramble.api.sync.Group;
|
|||||||
import org.briarproject.bramble.api.sync.MessageId;
|
import org.briarproject.bramble.api.sync.MessageId;
|
||||||
import org.briarproject.bramble.test.TestDatabaseConfigModule;
|
import org.briarproject.bramble.test.TestDatabaseConfigModule;
|
||||||
import org.briarproject.briar.api.client.ProtocolStateException;
|
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.ConversationMessageHeader;
|
||||||
import org.briarproject.briar.api.conversation.DeletionResult;
|
import org.briarproject.briar.api.conversation.DeletionResult;
|
||||||
import org.briarproject.briar.api.privategroup.GroupMessage;
|
import org.briarproject.briar.api.privategroup.GroupMessage;
|
||||||
@@ -41,6 +42,7 @@ public class GroupInvitationIntegrationTest
|
|||||||
private PrivateGroupManager groupManager0, groupManager1;
|
private PrivateGroupManager groupManager0, groupManager1;
|
||||||
private GroupInvitationManager groupInvitationManager0,
|
private GroupInvitationManager groupInvitationManager0,
|
||||||
groupInvitationManager1;
|
groupInvitationManager1;
|
||||||
|
private ConversationManager conversationManager1;
|
||||||
private Group g1From0, g0From1;
|
private Group g1From0, g0From1;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -52,6 +54,7 @@ public class GroupInvitationIntegrationTest
|
|||||||
groupManager1 = c1.getPrivateGroupManager();
|
groupManager1 = c1.getPrivateGroupManager();
|
||||||
groupInvitationManager0 = c0.getGroupInvitationManager();
|
groupInvitationManager0 = c0.getGroupInvitationManager();
|
||||||
groupInvitationManager1 = c1.getGroupInvitationManager();
|
groupInvitationManager1 = c1.getGroupInvitationManager();
|
||||||
|
conversationManager1 = c1.getConversationManager();
|
||||||
g1From0 = groupInvitationManager0.getContactGroup(contact1From0);
|
g1From0 = groupInvitationManager0.getContactGroup(contact1From0);
|
||||||
g0From1 = groupInvitationManager1.getContactGroup(contact0From1);
|
g0From1 = groupInvitationManager1.getContactGroup(contact0From1);
|
||||||
|
|
||||||
@@ -302,7 +305,7 @@ public class GroupInvitationIntegrationTest
|
|||||||
assertGroupCount(messageTracker1, g0.getId(), 2, 1);
|
assertGroupCount(messageTracker1, g0.getId(), 2, 1);
|
||||||
|
|
||||||
// now all messages should be read
|
// 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);
|
assertGroupCount(messageTracker1, g0.getId(), 2, 0);
|
||||||
|
|
||||||
sync1To0(1, true);
|
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.db.NoSuchContactException
|
||||||
import org.briarproject.bramble.api.event.Event
|
import org.briarproject.bramble.api.event.Event
|
||||||
import org.briarproject.bramble.api.event.EventListener
|
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.MessagesAckedEvent
|
||||||
import org.briarproject.bramble.api.sync.event.MessagesSentEvent
|
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.api.system.Clock
|
||||||
import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
|
import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
|
||||||
import org.briarproject.briar.api.blog.BlogInvitationRequest
|
import org.briarproject.briar.api.blog.BlogInvitationRequest
|
||||||
@@ -92,7 +92,7 @@ constructor(
|
|||||||
|
|
||||||
val messageIdString = ctx.getFromJson(objectMapper, "messageId")
|
val messageIdString = ctx.getFromJson(objectMapper, "messageId")
|
||||||
val messageId = deserializeMessageId(messageIdString)
|
val messageId = deserializeMessageId(messageIdString)
|
||||||
messagingManager.setReadFlag(groupId, messageId, true)
|
conversationManager.setReadFlag(groupId, messageId, true)
|
||||||
return ctx.json(messageIdString)
|
return ctx.json(messageIdString)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ internal class MessagingControllerImplTest : ControllerTest() {
|
|||||||
every { messagingManager.getContactGroup(contact).id } returns group.id
|
every { messagingManager.getContactGroup(contact).id } returns group.id
|
||||||
every { ctx.getFromJson(objectMapper, "messageId") } returns messageIdString
|
every { ctx.getFromJson(objectMapper, "messageId") } returns messageIdString
|
||||||
every { Base64.decode(messageIdString) } returns message.id.bytes
|
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
|
every { ctx.json(messageIdString) } returns ctx
|
||||||
|
|
||||||
controller.markMessageRead(ctx)
|
controller.markMessageRead(ctx)
|
||||||
|
|||||||
Reference in New Issue
Block a user