mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Merge branch 'message-tracked-event' into 'master'
Implement and use new message tracked event See merge request briar/briar!1541
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -40,10 +40,10 @@ public class ContactListItem extends ContactItem
|
||||
item.unread, item.timestamp);
|
||||
}
|
||||
|
||||
ContactListItem(ContactListItem item, ConversationMessageHeader h) {
|
||||
ContactListItem(ContactListItem item, long timestamp, boolean read) {
|
||||
this(item.getContact(), item.getAuthorInfo(), item.isConnected(), false,
|
||||
h.isRead() ? item.unread : item.unread + 1,
|
||||
Math.max(h.getTimestamp(), item.timestamp));
|
||||
read ? item.unread : item.unread + 1,
|
||||
Math.max(timestamp, item.timestamp));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.briarproject.briar.api.client.MessageTracker;
|
||||
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
|
||||
import org.briarproject.briar.api.conversation.event.ConversationMessageReceivedEvent;
|
||||
import org.briarproject.briar.api.conversation.event.ConversationMessageTrackedEvent;
|
||||
import org.briarproject.briar.api.identity.AuthorInfo;
|
||||
import org.briarproject.briar.api.identity.AuthorManager;
|
||||
|
||||
@@ -131,13 +132,14 @@ public class ContactsViewModel extends DbViewModel implements EventListener {
|
||||
} else if (e instanceof ContactRemovedEvent) {
|
||||
LOG.info("Contact removed, removing item");
|
||||
removeItem(((ContactRemovedEvent) e).getContactId());
|
||||
} else if (e instanceof ConversationMessageReceivedEvent) {
|
||||
LOG.info("Conversation message received, updating item");
|
||||
ConversationMessageReceivedEvent<?> p =
|
||||
(ConversationMessageReceivedEvent<?>) e;
|
||||
ConversationMessageHeader h = p.getMessageHeader();
|
||||
updateItem(p.getContactId(), item -> new ContactListItem(item, h),
|
||||
true);
|
||||
} else if (e instanceof ConversationMessageTrackedEvent) {
|
||||
LOG.info("Conversation message tracked, updating item");
|
||||
ConversationMessageTrackedEvent p =
|
||||
(ConversationMessageTrackedEvent) e;
|
||||
long timestamp = p.getTimestamp();
|
||||
boolean read = p.getRead();
|
||||
updateItem(p.getContactId(),
|
||||
item -> new ContactListItem(item, timestamp, read), true);
|
||||
} else if (e instanceof AvatarUpdatedEvent) {
|
||||
AvatarUpdatedEvent a = (AvatarUpdatedEvent) e;
|
||||
updateItem(a.getContactId(), item -> new ContactListItem(item,
|
||||
|
||||
@@ -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.
|
||||
* <p>
|
||||
* 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.
|
||||
* <p>
|
||||
* 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.
|
||||
* <p>
|
||||
* 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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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<ConversationClient> clients;
|
||||
|
||||
@Inject
|
||||
ConversationManagerImpl(DatabaseComponent db, MessageTracker messageTracker,
|
||||
Clock clock) {
|
||||
Clock clock, ClientHelper clientHelper) {
|
||||
this.db = db;
|
||||
this.messageTracker = messageTracker;
|
||||
this.clock = clock;
|
||||
this.clientHelper = clientHelper;
|
||||
clients = new CopyOnWriteArraySet<>();
|
||||
}
|
||||
|
||||
@@ -86,6 +92,36 @@ class ConversationManagerImpl implements ConversationManager {
|
||||
return new GroupCount(msgCount, unreadCount, latestTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void trackIncomingMessage(Transaction txn, Message m)
|
||||
throws DbException {
|
||||
messageTracker.trackIncomingMessage(txn, m);
|
||||
Event e = new ConversationMessageTrackedEvent(
|
||||
m.getTimestamp(), false,
|
||||
clientHelper.getContactId(txn, m.getGroupId()));
|
||||
txn.attach(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void trackOutgoingMessage(Transaction txn, Message m)
|
||||
throws DbException {
|
||||
messageTracker.trackOutgoingMessage(txn, m);
|
||||
Event e = new ConversationMessageTrackedEvent(
|
||||
m.getTimestamp(), true,
|
||||
clientHelper.getContactId(txn, m.getGroupId()));
|
||||
txn.attach(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void trackMessage(Transaction txn, GroupId g, long timestamp,
|
||||
boolean read)
|
||||
throws DbException {
|
||||
messageTracker.trackMessage(txn, g, timestamp, read);
|
||||
Event e = new ConversationMessageTrackedEvent(
|
||||
timestamp, read, clientHelper.getContactId(txn, g));
|
||||
txn.attach(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setReadFlag(GroupId g, MessageId m, boolean read)
|
||||
throws DbException {
|
||||
|
||||
@@ -100,7 +100,7 @@ abstract class AbstractProtocolEngine<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
Map<TransportId, TransportProperties> transportProperties,
|
||||
boolean visible) 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);
|
||||
@@ -152,7 +152,7 @@ abstract class AbstractProtocolEngine<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
|
||||
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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
IdentityManager identityManager,
|
||||
MessageParser messageParser,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock) {
|
||||
@@ -86,7 +83,6 @@ abstract class AbstractProtocolEngine<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
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<S extends Session<?>>
|
||||
*/
|
||||
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<S extends Session<?>>
|
||||
|
||||
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<S extends Session<?>>
|
||||
}
|
||||
}
|
||||
|
||||
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,
|
||||
|
||||
@@ -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<CreatorSession> {
|
||||
IdentityManager identityManager,
|
||||
MessageParser messageParser,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock) {
|
||||
super(db, clientHelper, clientVersioningManager, privateGroupManager,
|
||||
privateGroupFactory, groupMessageFactory, identityManager,
|
||||
messageParser, messageEncoder, messageTracker,
|
||||
messageParser, messageEncoder,
|
||||
autoDeleteManager, conversationManager, clock);
|
||||
}
|
||||
|
||||
@@ -162,7 +160,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
|
||||
Message sent = sendInviteMessage(txn, s, text, timestamp, signature,
|
||||
autoDeleteTimer);
|
||||
// Track the message
|
||||
messageTracker.trackOutgoingMessage(txn, sent);
|
||||
conversationManager.trackOutgoingMessage(txn, sent);
|
||||
// Move to the INVITED state
|
||||
long localTimestamp =
|
||||
max(timestamp, getTimestampForVisibleMessage(txn, s));
|
||||
@@ -199,7 +197,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
|
||||
// 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);
|
||||
@@ -226,7 +224,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
|
||||
// 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);
|
||||
|
||||
@@ -14,7 +14,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.ProtocolStateException;
|
||||
import org.briarproject.briar.api.client.SessionId;
|
||||
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||
@@ -53,13 +52,12 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
|
||||
IdentityManager identityManager,
|
||||
MessageParser messageParser,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock) {
|
||||
super(db, clientHelper, clientVersioningManager, privateGroupManager,
|
||||
privateGroupFactory, groupMessageFactory, identityManager,
|
||||
messageParser, messageEncoder, messageTracker,
|
||||
messageParser, messageEncoder,
|
||||
autoDeleteManager, conversationManager, clock);
|
||||
}
|
||||
|
||||
@@ -188,7 +186,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
|
||||
// Send a JOIN message
|
||||
Message sent = sendJoinMessage(txn, s, true);
|
||||
// Track the message
|
||||
messageTracker.trackOutgoingMessage(txn, sent);
|
||||
conversationManager.trackOutgoingMessage(txn, sent);
|
||||
try {
|
||||
// Subscribe to the private group
|
||||
subscribeToPrivateGroup(txn, inviteId);
|
||||
@@ -212,7 +210,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
|
||||
// Send a LEAVE message
|
||||
Message sent = sendLeaveMessage(txn, s, true, isAutoDecline);
|
||||
// Track the message
|
||||
messageTracker.trackOutgoingMessage(txn, sent);
|
||||
conversationManager.trackOutgoingMessage(txn, sent);
|
||||
// Move to the START state
|
||||
return new InviteeSession(s.getContactGroupId(), s.getPrivateGroupId(),
|
||||
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
|
||||
@@ -249,7 +247,7 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
|
||||
markMessageVisibleInUi(txn, m.getId());
|
||||
markMessageAvailableToAnswer(txn, m.getId(), true);
|
||||
// Track the message
|
||||
messageTracker.trackMessage(txn, m.getContactGroupId(),
|
||||
conversationManager.trackMessage(txn, m.getContactGroupId(),
|
||||
m.getTimestamp(), false);
|
||||
// Receive the auto-delete timer
|
||||
receiveAutoDeleteTimer(txn, m);
|
||||
|
||||
@@ -13,7 +13,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.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.privategroup.GroupMessageFactory;
|
||||
@@ -48,13 +47,12 @@ class PeerProtocolEngine extends AbstractProtocolEngine<PeerSession> {
|
||||
IdentityManager identityManager,
|
||||
MessageParser messageParser,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock) {
|
||||
super(db, clientHelper, clientVersioningManager, privateGroupManager,
|
||||
privateGroupFactory, groupMessageFactory, identityManager,
|
||||
messageParser, messageEncoder, messageTracker,
|
||||
messageParser, messageEncoder,
|
||||
autoDeleteManager, conversationManager, clock);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
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.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.privategroup.GroupMessageFactory;
|
||||
import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
|
||||
@@ -29,7 +28,6 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory {
|
||||
private final IdentityManager identityManager;
|
||||
private final MessageParser messageParser;
|
||||
private final MessageEncoder messageEncoder;
|
||||
private final MessageTracker messageTracker;
|
||||
private final AutoDeleteManager autoDeleteManager;
|
||||
private final ConversationManager conversationManager;
|
||||
private final Clock clock;
|
||||
@@ -45,7 +43,6 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory {
|
||||
IdentityManager identityManager,
|
||||
MessageParser messageParser,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock) {
|
||||
@@ -58,7 +55,6 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory {
|
||||
this.identityManager = identityManager;
|
||||
this.messageParser = messageParser;
|
||||
this.messageEncoder = messageEncoder;
|
||||
this.messageTracker = messageTracker;
|
||||
this.autoDeleteManager = autoDeleteManager;
|
||||
this.conversationManager = conversationManager;
|
||||
this.clock = clock;
|
||||
@@ -69,7 +65,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory {
|
||||
return new CreatorProtocolEngine(db, clientHelper,
|
||||
clientVersioningManager, privateGroupManager,
|
||||
privateGroupFactory, groupMessageFactory, identityManager,
|
||||
messageParser, messageEncoder, messageTracker,
|
||||
messageParser, messageEncoder,
|
||||
autoDeleteManager, conversationManager, clock);
|
||||
}
|
||||
|
||||
@@ -78,7 +74,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory {
|
||||
return new InviteeProtocolEngine(db, clientHelper,
|
||||
clientVersioningManager, privateGroupManager,
|
||||
privateGroupFactory, groupMessageFactory, identityManager,
|
||||
messageParser, messageEncoder, messageTracker,
|
||||
messageParser, messageEncoder,
|
||||
autoDeleteManager, conversationManager, clock);
|
||||
}
|
||||
|
||||
@@ -87,7 +83,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory {
|
||||
return new PeerProtocolEngine(db, clientHelper,
|
||||
clientVersioningManager, privateGroupManager,
|
||||
privateGroupFactory, groupMessageFactory, identityManager,
|
||||
messageParser, messageEncoder, messageTracker,
|
||||
messageParser, messageEncoder,
|
||||
autoDeleteManager, conversationManager, clock);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import org.briarproject.briar.api.blog.BlogManager;
|
||||
import org.briarproject.briar.api.blog.BlogSharingManager;
|
||||
import org.briarproject.briar.api.blog.event.BlogInvitationRequestReceivedEvent;
|
||||
import org.briarproject.briar.api.blog.event.BlogInvitationResponseReceivedEvent;
|
||||
import org.briarproject.briar.api.client.MessageTracker;
|
||||
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.conversation.ConversationRequest;
|
||||
|
||||
@@ -41,14 +40,13 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl<Blog> {
|
||||
ClientVersioningManager clientVersioningManager,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageParser<Blog> messageParser,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock,
|
||||
BlogManager blogManager,
|
||||
InvitationFactory<Blog, BlogInvitationResponse> invitationFactory) {
|
||||
super(db, clientHelper, clientVersioningManager, messageEncoder,
|
||||
messageParser, messageTracker, autoDeleteManager,
|
||||
messageParser, autoDeleteManager,
|
||||
conversationManager, clock, BlogSharingManager.CLIENT_ID,
|
||||
BlogSharingManager.MAJOR_VERSION, BlogManager.CLIENT_ID,
|
||||
BlogManager.MAJOR_VERSION);
|
||||
|
||||
@@ -13,7 +13,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.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.conversation.ConversationRequest;
|
||||
import org.briarproject.briar.api.forum.Forum;
|
||||
@@ -41,14 +40,13 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl<Forum> {
|
||||
ClientVersioningManager clientVersioningManager,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageParser<Forum> messageParser,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock,
|
||||
ForumManager forumManager,
|
||||
InvitationFactory<Forum, ForumInvitationResponse> invitationFactory) {
|
||||
super(db, clientHelper, clientVersioningManager, messageEncoder,
|
||||
messageParser, messageTracker, autoDeleteManager,
|
||||
messageParser, autoDeleteManager,
|
||||
conversationManager, clock, ForumSharingManager.CLIENT_ID,
|
||||
ForumSharingManager.MAJOR_VERSION, ForumManager.CLIENT_ID,
|
||||
ForumManager.MAJOR_VERSION);
|
||||
|
||||
@@ -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.ProtocolStateException;
|
||||
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.sharing.Shareable;
|
||||
@@ -58,7 +57,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
|
||||
|
||||
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<S extends Shareable>
|
||||
ClientVersioningManager clientVersioningManager,
|
||||
MessageEncoder messageEncoder,
|
||||
MessageParser<S> messageParser,
|
||||
MessageTracker messageTracker,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
Clock clock,
|
||||
@@ -84,7 +81,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
|
||||
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<S extends Shareable>
|
||||
// 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<S extends Shareable>
|
||||
}
|
||||
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<S extends Shareable>
|
||||
// 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<S extends Shareable>
|
||||
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<S extends Shareable>
|
||||
// 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<S extends Shareable>
|
||||
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<S extends Shareable>
|
||||
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<S extends Shareable>
|
||||
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<S extends Shareable>
|
||||
// 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<S extends Shareable>
|
||||
// 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<S extends Shareable>
|
||||
*/
|
||||
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<S extends Shareable>
|
||||
|
||||
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,
|
||||
|
||||
@@ -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);
|
||||
}});
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user