diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java index c04454d30..aed6d37f8 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java @@ -128,7 +128,7 @@ public interface ClientHelper { * group. */ ContactId getContactId(Transaction txn, GroupId contactGroupId) - throws DbException, FormatException; + throws DbException; /** * Stores the given contact ID in the group metadata of the given contact diff --git a/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java b/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java index d0e624934..717e9b31d 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/client/MessageTracker.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.MessageId; +import org.briarproject.briar.api.conversation.ConversationManager; import javax.annotation.Nullable; @@ -32,16 +33,28 @@ public interface MessageTracker { /** * Updates the group count for the given incoming message. + *
+ * For messages that are part of a conversation (private chat), + * use the corresponding function inside + * {@link ConversationManager} instead. */ void trackIncomingMessage(Transaction txn, Message m) throws DbException; /** * Updates the group count for the given outgoing message. + *
+ * For messages that are part of a conversation (private chat), + * use the corresponding function inside + * {@link ConversationManager} instead. */ void trackOutgoingMessage(Transaction txn, Message m) throws DbException; /** * Updates the group count for the given message. + *
+ * For messages that are part of a conversation (private chat),
+ * use the corresponding function inside
+ * {@link ConversationManager} instead.
*/
void trackMessage(Transaction txn, GroupId g, long timestamp, boolean read)
throws DbException;
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 41ebd823d..a867f37cc 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
@@ -7,6 +7,7 @@ import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.messaging.MessagingManager;
@@ -47,6 +48,27 @@ public interface ConversationManager {
*/
GroupCount getGroupCount(Transaction txn, ContactId c) throws DbException;
+ /**
+ * Updates the group count for the given incoming private conversation message
+ * and broadcasts a corresponding event.
+ */
+ void trackIncomingMessage(Transaction txn, Message m)
+ throws DbException;
+
+ /**
+ * Updates the group count for the given outgoing private conversation message
+ * and broadcasts a corresponding event.
+ */
+ void trackOutgoingMessage(Transaction txn, Message m)
+ throws DbException;
+
+ /**
+ * Updates the group count for the given private conversation message
+ * and broadcasts a corresponding event.
+ */
+ void trackMessage(Transaction txn, GroupId g, long timestamp, boolean read)
+ throws DbException;
+
void setReadFlag(GroupId g, MessageId m, boolean read)
throws DbException;
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/conversation/event/ConversationMessageTrackedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/conversation/event/ConversationMessageTrackedEvent.java
new file mode 100644
index 000000000..6a6889a0f
--- /dev/null
+++ b/briar-api/src/main/java/org/briarproject/briar/api/conversation/event/ConversationMessageTrackedEvent.java
@@ -0,0 +1,41 @@
+package org.briarproject.briar.api.conversation.event;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.Message;
+import org.briarproject.briar.api.conversation.ConversationMessageHeader;
+
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * An event that is broadcast when a new conversation message is tracked.
+ * Allows the UI to update the conversation's group count.
+ */
+@Immutable
+@NotNullByDefault
+public class ConversationMessageTrackedEvent extends Event {
+
+ private final long timestamp;
+ private final boolean read;
+ private final ContactId contactId;
+
+ public ConversationMessageTrackedEvent(long timestamp,
+ boolean read, ContactId contactId) {
+ this.timestamp = timestamp;
+ this.read = read;
+ this.contactId = contactId;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public boolean getRead() {
+ return read;
+ }
+
+ public ContactId getContactId() {
+ return contactId;
+ }
+}
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 07afd24e7..46f0639d9 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
@@ -1,11 +1,14 @@
package org.briarproject.briar.conversation;
+import org.briarproject.bramble.api.client.ClientHelper;
import org.briarproject.bramble.api.contact.ContactId;
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.event.Event;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.briar.api.client.MessageTracker;
@@ -13,6 +16,7 @@ import org.briarproject.briar.api.client.MessageTracker.GroupCount;
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.conversation.event.ConversationMessageTrackedEvent;
import java.util.ArrayList;
import java.util.Collection;
@@ -32,14 +36,16 @@ class ConversationManagerImpl implements ConversationManager {
private final DatabaseComponent db;
private final MessageTracker messageTracker;
private final Clock clock;
+ private final ClientHelper clientHelper;
private final Set>
long timestamp, Author author, @Nullable String text)
throws DbException {
Message m;
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
long timer = autoDeleteManager.getAutoDeleteTimer(txn, c,
timestamp);
@@ -125,7 +125,7 @@ abstract class AbstractProtocolEngine>
Map>
boolean visible, boolean isAutoDecline) throws DbException {
if (!visible && isAutoDecline) throw new IllegalArgumentException();
Message m;
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
long timer = autoDeleteManager.getAutoDeleteTimer(txn, c,
timestamp);
@@ -276,26 +276,17 @@ abstract class AbstractProtocolEngine>
long getTimestampForOutgoingMessage(Transaction txn, GroupId contactGroupId)
throws DbException {
- ContactId c = getContactId(txn, contactGroupId);
+ ContactId c = clientHelper.getContactId(txn, contactGroupId);
return conversationManager.getTimestampForOutgoingMessage(txn, c);
}
void receiveAutoDeleteTimer(Transaction txn, AbstractIntroductionMessage m)
throws DbException {
- ContactId c = getContactId(txn, m.getGroupId());
+ ContactId c = clientHelper.getContactId(txn, m.getGroupId());
autoDeleteManager.receiveAutoDeleteTimer(txn, c, m.getAutoDeleteTimer(),
m.getTimestamp());
}
- private ContactId getContactId(Transaction txn, GroupId contactGroupId)
- throws DbException {
- try {
- return clientHelper.getContactId(txn, contactGroupId);
- } catch (FormatException e) {
- throw new DbException(e);
- }
- }
-
private boolean contactSupportsAutoDeletion(Transaction txn, ContactId c)
throws DbException {
int minorVersion = clientVersioningManager.getClientMinorVersion(txn, c,
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java
index 03372d6c8..700317da9 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java
@@ -266,7 +266,7 @@ class IntroduceeProtocolEngine
addSessionId(txn, m.getMessageId(), s.getSessionId());
// Track the incoming message
- messageTracker
+ conversationManager
.trackMessage(txn, m.getGroupId(), m.getTimestamp(), false);
// Receive the auto-delete timer
@@ -307,7 +307,7 @@ class IntroduceeProtocolEngine
Message sent = sendAcceptMessage(txn, s, localTimestamp, publicKey,
localTimestamp, transportProperties, true);
// Track the message
- messageTracker.trackOutgoingMessage(txn, sent);
+ conversationManager.trackOutgoingMessage(txn, sent);
// Determine the next state
switch (s.getState()) {
@@ -338,7 +338,7 @@ class IntroduceeProtocolEngine
sendDeclineMessage(txn, s, localTimestamp, true, isAutoDecline);
// Track the message
- messageTracker.trackOutgoingMessage(txn, sent);
+ conversationManager.trackOutgoingMessage(txn, sent);
// Move to the START or LOCAL_DECLINED state, if still awaiting response
IntroduceeState state =
@@ -382,7 +382,7 @@ class IntroduceeProtocolEngine
markMessageVisibleInUi(txn, m.getMessageId());
// Track the incoming message
- messageTracker
+ conversationManager
.trackMessage(txn, m.getGroupId(), m.getTimestamp(), false);
// Receive the auto-delete timer
diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java
index e2f511675..1fdc76c73 100644
--- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java
@@ -40,6 +40,7 @@ import static org.briarproject.briar.introduction.IntroducerState.A_DECLINED;
import static org.briarproject.briar.introduction.IntroducerState.B_DECLINED;
import static org.briarproject.briar.introduction.IntroducerState.START;
+
@Immutable
@NotNullByDefault
class IntroducerProtocolEngine
@@ -231,8 +232,8 @@ class IntroducerProtocolEngine
Message sentB = sendRequestMessage(txn, s.getIntroduceeB(),
localTimestamp, s.getIntroduceeA().author, text);
// Track the messages
- messageTracker.trackOutgoingMessage(txn, sentA);
- messageTracker.trackOutgoingMessage(txn, sentB);
+ conversationManager.trackOutgoingMessage(txn, sentA);
+ conversationManager.trackOutgoingMessage(txn, sentB);
// Move to the AWAIT_RESPONSES state
Introducee introduceeA = new Introducee(s.getIntroduceeA(), sentA);
Introducee introduceeB = new Introducee(s.getIntroduceeB(), sentB);
@@ -260,7 +261,7 @@ class IntroducerProtocolEngine
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getMessageId());
// Track the incoming message
- messageTracker
+ conversationManager
.trackMessage(txn, m.getGroupId(), m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
@@ -323,7 +324,7 @@ class IntroducerProtocolEngine
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getMessageId());
// Track the incoming message
- messageTracker
+ conversationManager
.trackMessage(txn, m.getGroupId(), m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
@@ -378,7 +379,7 @@ class IntroducerProtocolEngine
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getMessageId());
// Track the incoming message
- messageTracker
+ conversationManager
.trackMessage(txn, m.getGroupId(), m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
@@ -433,7 +434,7 @@ class IntroducerProtocolEngine
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getMessageId());
// Track the incoming message
- messageTracker
+ conversationManager
.trackMessage(txn, m.getGroupId(), m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
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 950adaf5c..e27aba0c0 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
@@ -34,6 +34,7 @@ import org.briarproject.briar.api.autodelete.AutoDeleteManager;
import org.briarproject.briar.api.autodelete.event.ConversationMessagesDeletedEvent;
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.ConversationManager.ConversationClient;
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
import org.briarproject.briar.api.conversation.DeletionResult;
@@ -96,6 +97,7 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
private final DatabaseComponent db;
private final ClientHelper clientHelper;
private final MetadataParser metadataParser;
+ private final ConversationManager conversationManager;
private final MessageTracker messageTracker;
private final ClientVersioningManager clientVersioningManager;
private final ContactGroupFactory contactGroupFactory;
@@ -107,12 +109,14 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
ClientHelper clientHelper,
ClientVersioningManager clientVersioningManager,
MetadataParser metadataParser,
+ ConversationManager conversationManager,
MessageTracker messageTracker,
ContactGroupFactory contactGroupFactory,
AutoDeleteManager autoDeleteManager) {
this.db = db;
this.clientHelper = clientHelper;
this.metadataParser = metadataParser;
+ this.conversationManager = conversationManager;
this.messageTracker = messageTracker;
this.clientVersioningManager = clientVersioningManager;
this.contactGroupFactory = contactGroupFactory;
@@ -214,7 +218,7 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
PrivateMessageReceivedEvent event =
new PrivateMessageReceivedEvent(header, contactId);
txn.attach(event);
- messageTracker.trackIncomingMessage(txn, m);
+ conversationManager.trackIncomingMessage(txn, m);
if (timer != NO_AUTO_DELETE_TIMER) {
db.setCleanupTimerDuration(txn, m.getId(), timer);
}
@@ -324,7 +328,7 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
if (timer != NO_AUTO_DELETE_TIMER) {
db.setCleanupTimerDuration(txn, m.getMessage().getId(), timer);
}
- messageTracker.trackOutgoingMessage(txn, m.getMessage());
+ conversationManager.trackOutgoingMessage(txn, m.getMessage());
} catch (FormatException e) {
throw new AssertionError(e);
}
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java
index 906f4abc8..779d008cf 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java
@@ -19,7 +19,6 @@ import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
-import org.briarproject.briar.api.client.MessageTracker;
import org.briarproject.briar.api.client.SessionId;
import org.briarproject.briar.api.conversation.ConversationManager;
import org.briarproject.briar.api.privategroup.GroupMessage;
@@ -52,7 +51,7 @@ abstract class AbstractProtocolEngine>
protected final ClientHelper clientHelper;
protected final PrivateGroupManager privateGroupManager;
protected final PrivateGroupFactory privateGroupFactory;
- protected final MessageTracker messageTracker;
+ protected final ConversationManager conversationManager;
private final ClientVersioningManager clientVersioningManager;
private final GroupMessageFactory groupMessageFactory;
@@ -60,7 +59,6 @@ abstract class AbstractProtocolEngine>
private final MessageParser messageParser;
private final MessageEncoder messageEncoder;
private final AutoDeleteManager autoDeleteManager;
- private final ConversationManager conversationManager;
private final Clock clock;
AbstractProtocolEngine(
@@ -73,7 +71,6 @@ abstract class AbstractProtocolEngine>
IdentityManager identityManager,
MessageParser messageParser,
MessageEncoder messageEncoder,
- MessageTracker messageTracker,
AutoDeleteManager autoDeleteManager,
ConversationManager conversationManager,
Clock clock) {
@@ -86,7 +83,6 @@ abstract class AbstractProtocolEngine>
this.identityManager = identityManager;
this.messageParser = messageParser;
this.messageEncoder = messageEncoder;
- this.messageTracker = messageTracker;
this.autoDeleteManager = autoDeleteManager;
this.conversationManager = conversationManager;
this.clock = clock;
@@ -129,7 +125,7 @@ abstract class AbstractProtocolEngine>
throw new DbException(e); // Invalid group descriptor
}
Message m;
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
m = messageEncoder.encodeInviteMessage(s.getContactGroupId(),
privateGroup.getId(), timestamp, privateGroup.getName(),
@@ -157,7 +153,7 @@ abstract class AbstractProtocolEngine>
long localTimestamp = visibleInUi
? getTimestampForVisibleMessage(txn, s)
: getTimestampForInvisibleMessage(s);
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
// Set auto-delete timer if manually accepting an invitation
long timer = NO_AUTO_DELETE_TIMER;
@@ -195,7 +191,7 @@ abstract class AbstractProtocolEngine>
long localTimestamp = visibleInUi
? getTimestampForVisibleMessage(txn, s)
: getTimestampForInvisibleMessage(s);
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
// Set auto-delete timer if declining an invitation
long timer = NO_AUTO_DELETE_TIMER;
@@ -309,7 +305,7 @@ abstract class AbstractProtocolEngine>
*/
long getTimestampForVisibleMessage(Transaction txn, S s)
throws DbException {
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
long conversationTimestamp =
conversationManager.getTimestampForOutgoingMessage(txn, c);
return max(conversationTimestamp, getSessionTimestamp(s) + 1);
@@ -333,7 +329,7 @@ abstract class AbstractProtocolEngine>
void receiveAutoDeleteTimer(Transaction txn,
DeletableGroupInvitationMessage m) throws DbException {
- ContactId c = getContactId(txn, m.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, m.getContactGroupId());
autoDeleteManager.receiveAutoDeleteTimer(txn, c, m.getAutoDeleteTimer(),
m.getTimestamp());
}
@@ -359,15 +355,6 @@ abstract class AbstractProtocolEngine>
}
}
- private ContactId getContactId(Transaction txn, GroupId contactGroupId)
- throws DbException {
- try {
- return clientHelper.getContactId(txn, contactGroupId);
- } catch (FormatException e) {
- throw new DbException(e);
- }
- }
-
private boolean contactSupportsAutoDeletion(Transaction txn, ContactId c)
throws DbException {
int minorVersion = clientVersioningManager.getClientMinorVersion(txn, c,
diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java
index e8d85fc34..c56601496 100644
--- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java
@@ -12,7 +12,6 @@ import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
-import org.briarproject.briar.api.client.MessageTracker;
import org.briarproject.briar.api.client.ProtocolStateException;
import org.briarproject.briar.api.client.SessionId;
import org.briarproject.briar.api.conversation.ConversationManager;
@@ -49,13 +48,12 @@ class CreatorProtocolEngine extends AbstractProtocolEngine
private final ClientVersioningManager clientVersioningManager;
private final MessageEncoder messageEncoder;
- private final MessageTracker messageTracker;
private final AutoDeleteManager autoDeleteManager;
private final ConversationManager conversationManager;
private final Clock clock;
@@ -71,7 +69,6 @@ abstract class ProtocolEngineImpl
ClientVersioningManager clientVersioningManager,
MessageEncoder messageEncoder,
MessageParser messageParser,
- MessageTracker messageTracker,
AutoDeleteManager autoDeleteManager,
ConversationManager conversationManager,
Clock clock,
@@ -84,7 +81,6 @@ abstract class ProtocolEngineImpl
this.clientVersioningManager = clientVersioningManager;
this.messageEncoder = messageEncoder;
this.messageParser = messageParser;
- this.messageTracker = messageTracker;
this.autoDeleteManager = autoDeleteManager;
this.conversationManager = conversationManager;
this.clock = clock;
@@ -116,7 +112,7 @@ abstract class ProtocolEngineImpl
// Send an INVITE message
Message sent = sendInviteMessage(txn, s, text);
// Track the message
- messageTracker.trackOutgoingMessage(txn, sent);
+ conversationManager.trackOutgoingMessage(txn, sent);
// Make the shareable visible to the contact
try {
setShareableVisibility(txn, s, VISIBLE);
@@ -140,7 +136,7 @@ abstract class ProtocolEngineImpl
}
Message m;
long localTimestamp = getTimestampForVisibleMessage(txn, s);
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
long timer = autoDeleteManager.getAutoDeleteTimer(txn, c,
localTimestamp);
@@ -190,7 +186,7 @@ abstract class ProtocolEngineImpl
// Send a ACCEPT message
Message sent = sendAcceptMessage(txn, s);
// Track the message
- messageTracker.trackOutgoingMessage(txn, sent);
+ conversationManager.trackOutgoingMessage(txn, sent);
try {
// Add and subscribe to the shareable
addShareable(txn, inviteId);
@@ -212,7 +208,7 @@ abstract class ProtocolEngineImpl
throws DbException {
Message m;
long localTimestamp = getTimestampForVisibleMessage(txn, s);
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
long timer = autoDeleteManager.getAutoDeleteTimer(txn, c,
localTimestamp);
@@ -260,7 +256,7 @@ abstract class ProtocolEngineImpl
// Send a DECLINE message
Message sent = sendDeclineMessage(txn, s, isAutoDecline);
// Track the message
- messageTracker.trackOutgoingMessage(txn, sent);
+ conversationManager.trackOutgoingMessage(txn, sent);
// Move to the START state
return new Session(START, s.getContactGroupId(), s.getShareableId(),
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
@@ -271,7 +267,7 @@ abstract class ProtocolEngineImpl
boolean isAutoDecline) throws DbException {
Message m;
long localTimestamp = getTimestampForVisibleMessage(txn, s);
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
if (contactSupportsAutoDeletion(txn, c)) {
long timer = autoDeleteManager.getAutoDeleteTimer(txn, c,
localTimestamp);
@@ -380,7 +376,7 @@ abstract class ProtocolEngineImpl
markMessageVisibleInUi(txn, m.getId());
markMessageAvailableToAnswer(txn, m.getId(), available);
// Track the message
- messageTracker.trackMessage(txn, m.getContactGroupId(),
+ conversationManager.trackMessage(txn, m.getContactGroupId(),
m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
@@ -407,7 +403,7 @@ abstract class ProtocolEngineImpl
markMessageVisibleInUi(txn, m.getId());
markMessageAvailableToAnswer(txn, m.getId(), false);
// Track the message
- messageTracker.trackMessage(txn, m.getContactGroupId(),
+ conversationManager.trackMessage(txn, m.getContactGroupId(),
m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
@@ -456,7 +452,7 @@ abstract class ProtocolEngineImpl
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getId());
// Track the message
- messageTracker.trackMessage(txn, m.getContactGroupId(),
+ conversationManager.trackMessage(txn, m.getContactGroupId(),
m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
@@ -511,7 +507,7 @@ abstract class ProtocolEngineImpl
// Mark the response visible in the UI
markMessageVisibleInUi(txn, m.getId());
// Track the message
- messageTracker.trackMessage(txn, m.getContactGroupId(),
+ conversationManager.trackMessage(txn, m.getContactGroupId(),
m.getTimestamp(), false);
// Receive the auto-delete timer
receiveAutoDeleteTimer(txn, m);
@@ -734,7 +730,7 @@ abstract class ProtocolEngineImpl
*/
private long getTimestampForVisibleMessage(Transaction txn, Session s)
throws DbException {
- ContactId c = getContactId(txn, s.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, s.getContactGroupId());
long conversationTimestamp =
conversationManager.getTimestampForOutgoingMessage(txn, c);
return max(conversationTimestamp, getSessionTimestamp(s) + 1);
@@ -758,20 +754,11 @@ abstract class ProtocolEngineImpl
private void receiveAutoDeleteTimer(Transaction txn,
DeletableSharingMessage m) throws DbException {
- ContactId c = getContactId(txn, m.getContactGroupId());
+ ContactId c = clientHelper.getContactId(txn, m.getContactGroupId());
autoDeleteManager.receiveAutoDeleteTimer(txn, c, m.getAutoDeleteTimer(),
m.getTimestamp());
}
- private ContactId getContactId(Transaction txn, GroupId contactGroupId)
- throws DbException {
- try {
- return clientHelper.getContactId(txn, contactGroupId);
- } catch (FormatException e) {
- throw new DbException(e);
- }
- }
-
private boolean contactSupportsAutoDeletion(Transaction txn, ContactId c)
throws DbException {
int minorVersion = clientVersioningManager.getClientMinorVersion(txn, c,
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
index b106ec10b..65c70edf1 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java
@@ -60,7 +60,6 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
context.mock(GroupMessageFactory.class);
final IdentityManager identityManager = context.mock(IdentityManager.class);
final MessageEncoder messageEncoder = context.mock(MessageEncoder.class);
- final MessageTracker messageTracker = context.mock(MessageTracker.class);
final AutoDeleteManager autoDeleteManager =
context.mock(AutoDeleteManager.class);
final ConversationManager conversationManager =
@@ -264,7 +263,7 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase {
void expectTrackUnreadMessage(long timestamp) throws Exception {
context.checking(new Expectations() {{
- oneOf(messageTracker).trackMessage(txn, contactGroupId, timestamp,
+ oneOf(conversationManager).trackMessage(txn, contactGroupId, timestamp,
false);
}});
}
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
index e47642e2e..fc8f1d5bb 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java
@@ -24,7 +24,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
new CreatorProtocolEngine(db, clientHelper, clientVersioningManager,
privateGroupManager, privateGroupFactory,
groupMessageFactory, identityManager, messageParser,
- messageEncoder, messageTracker, autoDeleteManager,
+ messageEncoder, autoDeleteManager,
conversationManager, clock);
private CreatorSession getDefaultSession(CreatorState state) {
@@ -76,7 +76,7 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest {
will(returnValue(privateGroupGroup));
oneOf(privateGroupFactory).parsePrivateGroup(privateGroupGroup);
will(returnValue(privateGroup));
- oneOf(messageTracker).trackOutgoingMessage(txn, message);
+ oneOf(conversationManager).trackOutgoingMessage(txn, message);
}});
expectSendInviteMessage(text);
}
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
index 47a749844..0c0b69e8f 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java
@@ -43,7 +43,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
new InviteeProtocolEngine(db, clientHelper, clientVersioningManager,
privateGroupManager, privateGroupFactory,
groupMessageFactory, identityManager, messageParser,
- messageEncoder, messageTracker, autoDeleteManager,
+ messageEncoder, autoDeleteManager,
conversationManager, clock);
private final LocalAuthor localAuthor = getLocalAuthor();
@@ -148,7 +148,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
}});
expectSendJoinMessage(properJoinMessage, true);
context.checking(new Expectations() {{
- oneOf(messageTracker).trackOutgoingMessage(txn, message);
+ oneOf(conversationManager).trackOutgoingMessage(txn, message);
oneOf(messageParser).getInviteMessage(txn, lastRemoteMessageId);
will(returnValue(inviteMessage));
oneOf(privateGroupFactory)
@@ -219,7 +219,7 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest {
expectMarkMessageAvailableToAnswer(lastRemoteMessageId, false);
expectSendLeaveMessage(true);
context.checking(new Expectations() {{
- oneOf(messageTracker).trackOutgoingMessage(txn, message);
+ oneOf(conversationManager).trackOutgoingMessage(txn, message);
}});
InviteeSession session = getDefaultSession(INVITED);
diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
index 6118dd32c..3c7c2e889 100644
--- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java
@@ -27,7 +27,7 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest {
new PeerProtocolEngine(db, clientHelper, clientVersioningManager,
privateGroupManager, privateGroupFactory,
groupMessageFactory, identityManager, messageParser,
- messageEncoder, messageTracker, autoDeleteManager,
+ messageEncoder, autoDeleteManager,
conversationManager, clock);
private PeerSession getDefaultSession(PeerState state) {