From c1483ea61a37cdd62761af255ca83ec0c45d5ef3 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 26 Nov 2020 12:16:34 +0000 Subject: [PATCH] Add dummy implementation of AutoDeleteManager. --- .../conversation/ConversationViewModel.java | 62 +++++++++++-------- .../api/autodelete/AutoDeleteManager.java | 14 +++++ .../briar/api/messaging/MessagingManager.java | 5 ++ .../briarproject/briar/BriarCoreModule.java | 4 +- .../autodelete/AutoDeleteManagerImpl.java | 33 ++++++++++ .../briar/autodelete/AutoDeleteModule.java | 16 +++++ .../introduction/AbstractProtocolEngine.java | 38 +++++++----- .../IntroduceeProtocolEngine.java | 7 ++- .../IntroducerProtocolEngine.java | 5 +- .../briar/messaging/MessagingManagerImpl.java | 10 +-- .../invitation/AbstractProtocolEngine.java | 59 +++++++++++------- .../invitation/CreatorProtocolEngine.java | 15 +++-- .../invitation/InviteeProtocolEngine.java | 14 +++-- .../invitation/PeerProtocolEngine.java | 15 +++-- .../invitation/ProtocolEngineFactoryImpl.java | 23 +++++-- .../briar/sharing/BlogProtocolEngineImpl.java | 15 +++-- .../sharing/ForumProtocolEngineImpl.java | 13 ++-- .../briar/sharing/ProtocolEngineImpl.java | 55 +++++++++------- .../IntroductionIntegrationTestComponent.java | 4 +- .../AbstractProtocolEngineTest.java | 16 +++-- .../invitation/CreatorProtocolEngineTest.java | 2 +- .../invitation/InviteeProtocolEngineTest.java | 2 +- .../invitation/PeerProtocolEngineTest.java | 2 +- .../test/BriarIntegrationTestComponent.java | 4 +- 24 files changed, 306 insertions(+), 127 deletions(-) create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/autodelete/AutoDeleteManager.java create mode 100644 briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteManagerImpl.java create mode 100644 briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteModule.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java index 0bf21d2d5..0e2c4a60a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java @@ -10,6 +10,7 @@ import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.NoSuchContactException; +import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.db.TransactionManager; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventBus; @@ -32,6 +33,7 @@ import org.briarproject.briar.android.viewmodel.DbViewModel; import org.briarproject.briar.android.viewmodel.LiveEvent; import org.briarproject.briar.android.viewmodel.MutableLiveEvent; import org.briarproject.briar.api.attachment.AttachmentHeader; +import org.briarproject.briar.api.autodelete.AutoDeleteManager; import org.briarproject.briar.api.avatar.event.AvatarUpdatedEvent; import org.briarproject.briar.api.identity.AuthorInfo; import org.briarproject.briar.api.identity.AuthorManager; @@ -63,7 +65,6 @@ import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.now; import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE; import static org.briarproject.briar.android.util.UiUtils.observeForeverOnce; -import static org.briarproject.briar.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER; import static org.briarproject.briar.api.messaging.PrivateMessageFormat.TEXT_IMAGES; import static org.briarproject.briar.api.messaging.PrivateMessageFormat.TEXT_ONLY; @@ -88,6 +89,7 @@ public class ConversationViewModel extends DbViewModel private final PrivateMessageFactory privateMessageFactory; private final AttachmentRetriever attachmentRetriever; private final AttachmentCreator attachmentCreator; + private final AutoDeleteManager autoDeleteManager; @Nullable private ContactId contactId = null; @@ -122,7 +124,8 @@ public class ConversationViewModel extends DbViewModel SettingsManager settingsManager, PrivateMessageFactory privateMessageFactory, AttachmentRetriever attachmentRetriever, - AttachmentCreator attachmentCreator) { + AttachmentCreator attachmentCreator, + AutoDeleteManager autoDeleteManager) { super(application, dbExecutor, lifecycleManager, db, androidExecutor); this.db = db; this.eventBus = eventBus; @@ -133,6 +136,7 @@ public class ConversationViewModel extends DbViewModel this.privateMessageFactory = privateMessageFactory; this.attachmentRetriever = attachmentRetriever; this.attachmentCreator = attachmentCreator; + this.autoDeleteManager = autoDeleteManager; messagingGroupId = map(contactItem, c -> messagingManager.getContactGroup(c.getContact()).getId()); contactDeleted.setValue(false); @@ -246,7 +250,8 @@ public class ConversationViewModel extends DbViewModel observeForeverOnce(messagingGroupId, groupId -> { requireNonNull(groupId); observeForeverOnce(privateMessageFormat, format -> - createMessage(groupId, text, headers, timestamp, format)); + storeMessage(requireNonNull(contactId), groupId, text, + headers, timestamp, format)); }); } @@ -306,45 +311,50 @@ public class ConversationViewModel extends DbViewModel settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE); } - @UiThread - private void createMessage(GroupId groupId, @Nullable String text, + private PrivateMessage createMessage(Transaction txn, ContactId c, + GroupId groupId, @Nullable String text, List headers, long timestamp, - PrivateMessageFormat format) { + PrivateMessageFormat format) throws DbException { try { - PrivateMessage pm; if (format == TEXT_ONLY) { - pm = privateMessageFactory.createLegacyPrivateMessage( + return privateMessageFactory.createLegacyPrivateMessage( groupId, timestamp, requireNonNull(text)); } else if (format == TEXT_IMAGES) { - pm = privateMessageFactory.createPrivateMessage(groupId, + return privateMessageFactory.createPrivateMessage(groupId, timestamp, text, headers); } else { - // TODO: Look up auto-delete timer - pm = privateMessageFactory.createPrivateMessage(groupId, - timestamp, text, headers, NO_AUTO_DELETE_TIMER); + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); + return privateMessageFactory.createPrivateMessage(groupId, + timestamp, text, headers, timer); } - storeMessage(pm); } catch (FormatException e) { throw new AssertionError(e); } } @UiThread - private void storeMessage(PrivateMessage m) { - attachmentCreator.onAttachmentsSent(m.getMessage().getId()); + private void storeMessage(ContactId c, GroupId groupId, + @Nullable String text, List headers, + long timestamp, PrivateMessageFormat format) { runOnDbThread(() -> { try { - long start = now(); - messagingManager.addLocalMessage(m); - logDuration(LOG, "Storing message", start); - Message message = m.getMessage(); - PrivateMessageHeader h = new PrivateMessageHeader( - message.getId(), message.getGroupId(), - message.getTimestamp(), true, true, false, false, - m.hasText(), m.getAttachmentHeaders(), - m.getAutoDeleteTimer()); - // TODO add text to cache when available here - addedHeader.postEvent(h); + db.transaction(false, txn -> { + long start = now(); + PrivateMessage m = createMessage(txn, c, groupId, text, + headers, timestamp, format); + messagingManager.addLocalMessage(txn, m); + logDuration(LOG, "Storing message", start); + Message message = m.getMessage(); + PrivateMessageHeader h = new PrivateMessageHeader( + message.getId(), message.getGroupId(), + message.getTimestamp(), true, true, false, false, + m.hasText(), m.getAttachmentHeaders(), + m.getAutoDeleteTimer()); + // TODO add text to cache when available here + MessageId id = message.getId(); + txn.attach(() -> attachmentCreator.onAttachmentsSent(id)); + addedHeader.postEvent(h); + }); } catch (DbException e) { logException(LOG, WARNING, e); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/autodelete/AutoDeleteManager.java b/briar-api/src/main/java/org/briarproject/briar/api/autodelete/AutoDeleteManager.java new file mode 100644 index 000000000..621929634 --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/autodelete/AutoDeleteManager.java @@ -0,0 +1,14 @@ +package org.briarproject.briar.api.autodelete; + +import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.db.Transaction; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +@NotNullByDefault +public interface AutoDeleteManager { + + long getAutoDeleteTimer(Transaction txn, ContactId c) throws DbException; + + void setAutoDeleteTimer(Transaction txn, ContactId c) throws DbException; +} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java index 1ea995c8e..ac5b1acc3 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/MessagingManager.java @@ -39,6 +39,11 @@ public interface MessagingManager extends ConversationClient { */ void addLocalMessage(PrivateMessage m) throws DbException; + /** + * Stores a local private message. + */ + void addLocalMessage(Transaction txn, PrivateMessage m) throws DbException; + /** * Stores a local attachment message. * diff --git a/briar-core/src/main/java/org/briarproject/briar/BriarCoreModule.java b/briar-core/src/main/java/org/briarproject/briar/BriarCoreModule.java index 222e41a96..65d8a3c9a 100644 --- a/briar-core/src/main/java/org/briarproject/briar/BriarCoreModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/BriarCoreModule.java @@ -1,6 +1,7 @@ package org.briarproject.briar; import org.briarproject.briar.attachment.AttachmentModule; +import org.briarproject.briar.autodelete.AutoDeleteModule; import org.briarproject.briar.avatar.AvatarModule; import org.briarproject.briar.blog.BlogModule; import org.briarproject.briar.client.BriarClientModule; @@ -18,6 +19,8 @@ import org.briarproject.briar.test.TestModule; import dagger.Module; @Module(includes = { + AttachmentModule.class, + AutoDeleteModule.class, AvatarModule.class, BlogModule.class, BriarClientModule.class, @@ -27,7 +30,6 @@ import dagger.Module; GroupInvitationModule.class, IdentityModule.class, IntroductionModule.class, - AttachmentModule.class, MessagingModule.class, PrivateGroupModule.class, SharingModule.class, diff --git a/briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteManagerImpl.java new file mode 100644 index 000000000..4324aeea5 --- /dev/null +++ b/briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteManagerImpl.java @@ -0,0 +1,33 @@ +package org.briarproject.briar.autodelete; + +import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.db.Transaction; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.briar.api.autodelete.AutoDeleteManager; + +import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; + +import static org.briarproject.briar.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER; + +@Immutable +@NotNullByDefault +class AutoDeleteManagerImpl implements AutoDeleteManager { + + @Inject + AutoDeleteManagerImpl() { + } + + @Override + public long getAutoDeleteTimer(Transaction txn, ContactId c) + throws DbException { + return NO_AUTO_DELETE_TIMER; + } + + @Override + public void setAutoDeleteTimer(Transaction txn, ContactId c) + throws DbException { + // Mmm hmm, yup, I'll bear that in mind + } +} diff --git a/briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteModule.java b/briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteModule.java new file mode 100644 index 000000000..f423d223a --- /dev/null +++ b/briar-core/src/main/java/org/briarproject/briar/autodelete/AutoDeleteModule.java @@ -0,0 +1,16 @@ +package org.briarproject.briar.autodelete; + +import org.briarproject.briar.api.autodelete.AutoDeleteManager; + +import dagger.Module; +import dagger.Provides; + +@Module +public class AutoDeleteModule { + + @Provides + AutoDeleteManager provideAutoDeleteManager( + AutoDeleteManagerImpl autoDeleteManager) { + return autoDeleteManager; + } +} diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index 0e74825d5..0444a5e15 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -22,6 +22,7 @@ import org.briarproject.bramble.api.sync.Message; 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.identity.AuthorInfo; @@ -59,6 +60,7 @@ abstract class AbstractProtocolEngine> protected final MessageParser messageParser; protected final MessageEncoder messageEncoder; protected final ClientVersioningManager clientVersioningManager; + protected final AutoDeleteManager autoDeleteManager; protected final Clock clock; AbstractProtocolEngine( @@ -72,6 +74,7 @@ abstract class AbstractProtocolEngine> MessageParser messageParser, MessageEncoder messageEncoder, ClientVersioningManager clientVersioningManager, + AutoDeleteManager autoDeleteManager, Clock clock) { this.db = db; this.clientHelper = clientHelper; @@ -83,6 +86,7 @@ abstract class AbstractProtocolEngine> this.messageParser = messageParser; this.messageEncoder = messageEncoder; this.clientVersioningManager = clientVersioningManager; + this.autoDeleteManager = autoDeleteManager; this.clock = clock; } @@ -90,9 +94,9 @@ abstract class AbstractProtocolEngine> long timestamp, Author author, @Nullable String text) throws DbException { Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); m = messageEncoder.encodeRequestMessage(s.getContactGroupId(), timestamp, s.getLastLocalMessageId(), author, text, timer); sendMessage(txn, REQUEST, s.getSessionId(), m, true, timer); @@ -110,9 +114,9 @@ abstract class AbstractProtocolEngine> Map transportProperties, boolean visible) throws DbException { Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); m = messageEncoder.encodeAcceptMessage(s.getContactGroupId(), timestamp, s.getLastLocalMessageId(), s.getSessionId(), ephemeralPublicKey, acceptTimestamp, transportProperties, @@ -131,9 +135,9 @@ abstract class AbstractProtocolEngine> Message sendDeclineMessage(Transaction txn, PeerSession s, long timestamp, boolean visible) throws DbException { Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); m = messageEncoder.encodeDeclineMessage(s.getContactGroupId(), timestamp, s.getLastLocalMessageId(), s.getSessionId(), timer); @@ -237,16 +241,20 @@ abstract class AbstractProtocolEngine> ); } - boolean contactSupportsAutoDeletion(Transaction txn, GroupId contactGroupId) + private ContactId getContactId(Transaction txn, GroupId contactGroupId) throws DbException { try { - ContactId c = clientHelper.getContactId(txn, contactGroupId); - int minorVersion = clientVersioningManager - .getClientMinorVersion(txn, c, CLIENT_ID, MAJOR_VERSION); - // Auto-delete was added in client version 0.1 - return minorVersion >= 1; + 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, + CLIENT_ID, MAJOR_VERSION); + // Auto-delete was added in client version 0.1 + return minorVersion >= 1; + } } 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 4beba3fb5..99e20927f 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 @@ -26,6 +26,7 @@ import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.transport.KeyManager; import org.briarproject.bramble.api.transport.KeySetId; 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; @@ -80,10 +81,12 @@ class IntroduceeProtocolEngine IntroductionCrypto crypto, KeyManager keyManager, TransportPropertyManager transportPropertyManager, - ClientVersioningManager clientVersioningManager) { + ClientVersioningManager clientVersioningManager, + AutoDeleteManager autoDeleteManager) { super(db, clientHelper, contactManager, contactGroupFactory, messageTracker, identityManager, authorManager, messageParser, - messageEncoder, clientVersioningManager, clock); + messageEncoder, clientVersioningManager, autoDeleteManager, + clock); this.crypto = crypto; this.keyManager = keyManager; this.transportPropertyManager = transportPropertyManager; 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 8978c917a..bd784c0b1 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 @@ -14,6 +14,7 @@ import org.briarproject.bramble.api.sync.Message; 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.identity.AuthorManager; @@ -54,10 +55,12 @@ class IntroducerProtocolEngine MessageParser messageParser, MessageEncoder messageEncoder, ClientVersioningManager clientVersioningManager, + AutoDeleteManager autoDeleteManager, Clock clock) { super(db, clientHelper, contactManager, contactGroupFactory, messageTracker, identityManager, authorManager, messageParser, - messageEncoder, clientVersioningManager, clock); + messageEncoder, clientVersioningManager, autoDeleteManager, + clock); } @Override 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 9297365c9..a79a91574 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 @@ -227,7 +227,12 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook, @Override public void addLocalMessage(PrivateMessage m) throws DbException { - Transaction txn = db.startTransaction(false); + db.transaction(false, txn -> addLocalMessage(txn, m)); + } + + @Override + public void addLocalMessage(Transaction txn, PrivateMessage m) + throws DbException { try { BdfDictionary meta = new BdfDictionary(); meta.put(MSG_KEY_TIMESTAMP, m.getMessage().getTimestamp()); @@ -257,11 +262,8 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook, clientHelper.addLocalMessage(txn, m.getMessage(), meta, true, false); messageTracker.trackOutgoingMessage(txn, m.getMessage()); - db.commitTransaction(txn); } catch (FormatException e) { throw new AssertionError(e); - } finally { - db.endTransaction(txn); } } 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 8d453c06d..396512594 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 @@ -17,6 +17,7 @@ import org.briarproject.bramble.api.sync.Message; 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.privategroup.GroupMessage; import org.briarproject.briar.api.privategroup.GroupMessageFactory; @@ -52,15 +53,21 @@ abstract class AbstractProtocolEngine> private final IdentityManager identityManager; private final MessageParser messageParser; private final MessageEncoder messageEncoder; + private final AutoDeleteManager autoDeleteManager; private final Clock clock; - AbstractProtocolEngine(DatabaseComponent db, ClientHelper clientHelper, + AbstractProtocolEngine( + DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, PrivateGroupManager privateGroupManager, PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, - IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, MessageTracker messageTracker, + IdentityManager identityManager, + MessageParser messageParser, + MessageEncoder messageEncoder, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, Clock clock) { this.db = db; this.clientHelper = clientHelper; @@ -72,6 +79,7 @@ abstract class AbstractProtocolEngine> this.messageParser = messageParser; this.messageEncoder = messageEncoder; this.messageTracker = messageTracker; + this.autoDeleteManager = autoDeleteManager; this.clock = clock; } @@ -112,9 +120,9 @@ abstract class AbstractProtocolEngine> throw new DbException(e); // Invalid group descriptor } Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); m = messageEncoder.encodeInviteMessage(s.getContactGroupId(), privateGroup.getId(), timestamp, privateGroup.getName(), privateGroup.getCreator(), privateGroup.getSalt(), text, @@ -134,10 +142,12 @@ abstract class AbstractProtocolEngine> Message sendJoinMessage(Transaction txn, S s, boolean visibleInUi) throws DbException { Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer if the message is - // visible in the UI (accepting an invitation) - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + // Set auto-delete timer if manually accepting an invitation + long timer = visibleInUi + ? autoDeleteManager.getAutoDeleteTimer(txn, c) + : NO_AUTO_DELETE_TIMER; m = messageEncoder.encodeJoinMessage(s.getContactGroupId(), s.getPrivateGroupId(), getLocalTimestamp(s), s.getLastLocalMessageId(), timer); @@ -156,10 +166,12 @@ abstract class AbstractProtocolEngine> Message sendLeaveMessage(Transaction txn, S s, boolean visibleInUi) throws DbException { Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer if the message is - // visible in the UI (declining an invitation) - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + // Set auto-delete timer if manually accepting an invitation + long timer = visibleInUi + ? autoDeleteManager.getAutoDeleteTimer(txn, c) + : NO_AUTO_DELETE_TIMER; m = messageEncoder.encodeLeaveMessage(s.getContactGroupId(), s.getPrivateGroupId(), getLocalTimestamp(s), s.getLastLocalMessageId(), timer); @@ -263,18 +275,21 @@ abstract class AbstractProtocolEngine> } } - boolean contactSupportsAutoDeletion(Transaction txn, GroupId contactGroupId) + private ContactId getContactId(Transaction txn, GroupId contactGroupId) throws DbException { try { - ContactId c = clientHelper.getContactId(txn, contactGroupId); - int minorVersion = clientVersioningManager - .getClientMinorVersion(txn, c, - GroupInvitationManager.CLIENT_ID, - GroupInvitationManager.MAJOR_VERSION); - // Auto-delete was added in client version 0.1 - return minorVersion >= 1; + 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, + GroupInvitationManager.CLIENT_ID, + GroupInvitationManager.MAJOR_VERSION); + // Auto-delete was added in client version 0.1 + return minorVersion >= 1; + } } 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 519d6cb6d..a38967fdd 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 @@ -11,6 +11,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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; @@ -36,17 +37,23 @@ import static org.briarproject.briar.privategroup.invitation.CreatorState.START; @NotNullByDefault class CreatorProtocolEngine extends AbstractProtocolEngine { - CreatorProtocolEngine(DatabaseComponent db, ClientHelper clientHelper, + CreatorProtocolEngine( + DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, PrivateGroupManager privateGroupManager, PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, - IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, MessageTracker messageTracker, + IdentityManager identityManager, + MessageParser messageParser, + MessageEncoder messageEncoder, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, Clock clock) { super(db, clientHelper, clientVersioningManager, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, messageTracker, clock); + messageParser, messageEncoder, messageTracker, + autoDeleteManager, clock); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java index cdb597a5e..dbc17477f 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java @@ -13,6 +13,7 @@ import org.briarproject.bramble.api.sync.Message; 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; @@ -41,17 +42,22 @@ import static org.briarproject.briar.privategroup.invitation.InviteeState.START; @NotNullByDefault class InviteeProtocolEngine extends AbstractProtocolEngine { - InviteeProtocolEngine(DatabaseComponent db, ClientHelper clientHelper, + InviteeProtocolEngine(DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, PrivateGroupManager privateGroupManager, PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, - IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, MessageTracker messageTracker, + IdentityManager identityManager, + MessageParser messageParser, + MessageEncoder messageEncoder, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, Clock clock) { super(db, clientHelper, clientVersioningManager, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, messageTracker, clock); + messageParser, messageEncoder, messageTracker, + autoDeleteManager, clock); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java index de0a96fc6..21eef0053 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java @@ -12,6 +12,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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.privategroup.GroupMessageFactory; @@ -36,17 +37,23 @@ import static org.briarproject.briar.privategroup.invitation.PeerState.START; @NotNullByDefault class PeerProtocolEngine extends AbstractProtocolEngine { - PeerProtocolEngine(DatabaseComponent db, ClientHelper clientHelper, + PeerProtocolEngine( + DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, PrivateGroupManager privateGroupManager, PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, - IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, MessageTracker messageTracker, + IdentityManager identityManager, + MessageParser messageParser, + MessageEncoder messageEncoder, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, Clock clock) { super(db, clientHelper, clientVersioningManager, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, messageTracker, clock); + messageParser, messageEncoder, messageTracker, + autoDeleteManager, clock); } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngineFactoryImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngineFactoryImpl.java index d54031029..089b06c66 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngineFactoryImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/ProtocolEngineFactoryImpl.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.identity.IdentityManager; 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.privategroup.GroupMessageFactory; import org.briarproject.briar.api.privategroup.PrivateGroupFactory; @@ -28,16 +29,22 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { private final MessageParser messageParser; private final MessageEncoder messageEncoder; private final MessageTracker messageTracker; + private final AutoDeleteManager autoDeleteManager; private final Clock clock; @Inject - ProtocolEngineFactoryImpl(DatabaseComponent db, ClientHelper clientHelper, + ProtocolEngineFactoryImpl( + DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, PrivateGroupManager privateGroupManager, PrivateGroupFactory privateGroupFactory, GroupMessageFactory groupMessageFactory, - IdentityManager identityManager, MessageParser messageParser, - MessageEncoder messageEncoder, MessageTracker messageTracker, + IdentityManager identityManager, + MessageParser messageParser, + MessageEncoder messageEncoder, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, Clock clock) { this.db = db; this.clientHelper = clientHelper; @@ -49,6 +56,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { this.messageParser = messageParser; this.messageEncoder = messageEncoder; this.messageTracker = messageTracker; + this.autoDeleteManager = autoDeleteManager; this.clock = clock; } @@ -57,7 +65,8 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { return new CreatorProtocolEngine(db, clientHelper, clientVersioningManager, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, messageTracker, clock); + messageParser, messageEncoder, messageTracker, + autoDeleteManager, clock); } @Override @@ -65,7 +74,8 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { return new InviteeProtocolEngine(db, clientHelper, clientVersioningManager, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, messageTracker, clock); + messageParser, messageEncoder, messageTracker, + autoDeleteManager, clock); } @Override @@ -73,6 +83,7 @@ class ProtocolEngineFactoryImpl implements ProtocolEngineFactory { return new PeerProtocolEngine(db, clientHelper, clientVersioningManager, privateGroupManager, privateGroupFactory, groupMessageFactory, identityManager, - messageParser, messageEncoder, messageTracker, clock); + messageParser, messageEncoder, messageTracker, + autoDeleteManager, clock); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java index 79dfaaa42..05fcc2eb0 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogProtocolEngineImpl.java @@ -11,6 +11,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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.blog.Blog; import org.briarproject.briar.api.blog.BlogInvitationResponse; import org.briarproject.briar.api.blog.BlogManager; @@ -32,13 +33,19 @@ class BlogProtocolEngineImpl extends ProtocolEngineImpl { invitationFactory; @Inject - BlogProtocolEngineImpl(DatabaseComponent db, ClientHelper clientHelper, + BlogProtocolEngineImpl( + DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, - MessageEncoder messageEncoder, MessageParser messageParser, - MessageTracker messageTracker, Clock clock, BlogManager blogManager, + MessageEncoder messageEncoder, + MessageParser messageParser, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, + Clock clock, + BlogManager blogManager, InvitationFactory invitationFactory) { super(db, clientHelper, clientVersioningManager, messageEncoder, - messageParser, messageTracker, clock, + messageParser, messageTracker, autoDeleteManager, clock, BlogSharingManager.CLIENT_ID, BlogSharingManager.MAJOR_VERSION, BlogManager.CLIENT_ID, BlogManager.MAJOR_VERSION); this.blogManager = blogManager; diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java index e6df8fc48..91757b463 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumProtocolEngineImpl.java @@ -11,6 +11,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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.ConversationRequest; import org.briarproject.briar.api.forum.Forum; @@ -32,15 +33,19 @@ class ForumProtocolEngineImpl extends ProtocolEngineImpl { invitationFactory; @Inject - ForumProtocolEngineImpl(DatabaseComponent db, + ForumProtocolEngineImpl( + DatabaseComponent db, ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, - MessageEncoder messageEncoder, MessageParser messageParser, - MessageTracker messageTracker, Clock clock, + MessageEncoder messageEncoder, + MessageParser messageParser, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, + Clock clock, ForumManager forumManager, InvitationFactory invitationFactory) { super(db, clientHelper, clientVersioningManager, messageEncoder, - messageParser, messageTracker, clock, + messageParser, messageTracker, autoDeleteManager, clock, ForumSharingManager.CLIENT_ID, ForumSharingManager.MAJOR_VERSION, ForumManager.CLIENT_ID, ForumManager.MAJOR_VERSION); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java index cd6f8e221..9e841bd44 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java @@ -18,6 +18,7 @@ import org.briarproject.bramble.api.sync.Message; 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.sharing.Shareable; @@ -56,22 +57,31 @@ abstract class ProtocolEngineImpl private final ClientVersioningManager clientVersioningManager; private final MessageEncoder messageEncoder; private final MessageTracker messageTracker; + private final AutoDeleteManager autoDeleteManager; private final Clock clock; private final ClientId sharingClientId, shareableClientId; private final int sharingClientMajorVersion, shareableClientMajorVersion; - ProtocolEngineImpl(DatabaseComponent db, ClientHelper clientHelper, + ProtocolEngineImpl( + DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, - MessageEncoder messageEncoder, MessageParser messageParser, - MessageTracker messageTracker, Clock clock, - ClientId sharingClientId, int sharingClientMajorVersion, - ClientId shareableClientId, int shareableClientMajorVersion) { + MessageEncoder messageEncoder, + MessageParser messageParser, + MessageTracker messageTracker, + AutoDeleteManager autoDeleteManager, + Clock clock, + ClientId sharingClientId, + int sharingClientMajorVersion, + ClientId shareableClientId, + int shareableClientMajorVersion) { this.db = db; this.clientHelper = clientHelper; this.clientVersioningManager = clientVersioningManager; this.messageEncoder = messageEncoder; this.messageParser = messageParser; this.messageTracker = messageTracker; + this.autoDeleteManager = autoDeleteManager; this.clock = clock; this.sharingClientId = sharingClientId; this.sharingClientMajorVersion = sharingClientMajorVersion; @@ -125,9 +135,9 @@ abstract class ProtocolEngineImpl } long localTimestamp = Math.max(timestamp, getLocalTimestamp(s)); Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); m = messageEncoder.encodeInviteMessage(s.getContactGroupId(), localTimestamp, s.getLastLocalMessageId(), descriptor, text, timer); @@ -191,9 +201,9 @@ abstract class ProtocolEngineImpl private Message sendAcceptMessage(Transaction txn, Session s) throws DbException { Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); m = messageEncoder.encodeAcceptMessage(s.getContactGroupId(), s.getShareableId(), getLocalTimestamp(s), s.getLastLocalMessageId(), timer); @@ -244,9 +254,9 @@ abstract class ProtocolEngineImpl private Message sendDeclineMessage(Transaction txn, Session s) throws DbException { Message m; - if (contactSupportsAutoDeletion(txn, s.getContactGroupId())) { - // TODO: Look up the current auto-delete timer - long timer = NO_AUTO_DELETE_TIMER; + ContactId c = getContactId(txn, s.getContactGroupId()); + if (contactSupportsAutoDeletion(txn, c)) { + long timer = autoDeleteManager.getAutoDeleteTimer(txn, c); m = messageEncoder.encodeDeclineMessage(s.getContactGroupId(), s.getShareableId(), getLocalTimestamp(s), s.getLastLocalMessageId(), timer); @@ -673,17 +683,20 @@ abstract class ProtocolEngineImpl session.getInviteTimestamp()) + 1); } - boolean contactSupportsAutoDeletion(Transaction txn, GroupId contactGroupId) + private ContactId getContactId(Transaction txn, GroupId contactGroupId) throws DbException { try { - ContactId c = clientHelper.getContactId(txn, contactGroupId); - int minorVersion = clientVersioningManager - .getClientMinorVersion(txn, c, sharingClientId, - sharingClientMajorVersion); - // Auto-delete was added in client version 0.1 - return minorVersion >= 1; + 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, + sharingClientId, sharingClientMajorVersion); + // Auto-delete was added in client version 0.1 + return minorVersion >= 1; + } } diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java index ce4e455e4..eb48a7d9d 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTestComponent.java @@ -3,6 +3,7 @@ package org.briarproject.briar.introduction; import org.briarproject.bramble.BrambleCoreModule; import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule; import org.briarproject.briar.attachment.AttachmentModule; +import org.briarproject.briar.autodelete.AutoDeleteModule; import org.briarproject.briar.avatar.AvatarModule; import org.briarproject.briar.blog.BlogModule; import org.briarproject.briar.client.BriarClientModule; @@ -22,6 +23,8 @@ import dagger.Component; @Component(modules = { BrambleCoreIntegrationTestModule.class, BrambleCoreModule.class, + AttachmentModule.class, + AutoDeleteModule.class, AvatarModule.class, BlogModule.class, BriarClientModule.class, @@ -29,7 +32,6 @@ import dagger.Component; GroupInvitationModule.class, IdentityModule.class, IntroductionModule.class, - AttachmentModule.class, MessagingModule.class, PrivateGroupModule.class, SharingModule.class 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 b7df73946..1f2f85008 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 @@ -17,6 +17,7 @@ import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.bramble.test.BrambleMockTestCase; +import org.briarproject.briar.api.autodelete.AutoDeleteManager; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.privategroup.GroupMessageFactory; import org.briarproject.briar.api.privategroup.PrivateGroup; @@ -59,6 +60,8 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { 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 Clock clock = context.mock(Clock.class); final Transaction txn = new Transaction(null, false); @@ -120,7 +123,7 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { } void expectSendInviteMessage(String text) throws Exception { - expectCheckWhetherContactSupportsAutoDeletion(); + expectCheckWhetherContactSupportsAutoDeletion(true); expectGetLocalTimestamp(messageTimestamp); context.checking(new Expectations() {{ oneOf(messageEncoder).encodeInviteMessage(contactGroupId, @@ -134,7 +137,7 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { void expectSendJoinMessage(JoinMessage m, boolean visible) throws Exception { - expectCheckWhetherContactSupportsAutoDeletion(); + expectCheckWhetherContactSupportsAutoDeletion(visible); expectGetLocalTimestamp(messageTimestamp); context.checking(new Expectations() {{ oneOf(messageEncoder).encodeJoinMessage(m.getContactGroupId(), @@ -146,7 +149,7 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { } void expectSendLeaveMessage(boolean visible) throws Exception { - expectCheckWhetherContactSupportsAutoDeletion(); + expectCheckWhetherContactSupportsAutoDeletion(visible); expectGetLocalTimestamp(messageTimestamp); context.checking(new Expectations() {{ oneOf(messageEncoder).encodeLeaveMessage(contactGroupId, @@ -223,7 +226,8 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { }}); } - void expectCheckWhetherContactSupportsAutoDeletion() throws Exception { + void expectCheckWhetherContactSupportsAutoDeletion(boolean visible) + throws Exception { context.checking(new Expectations() {{ oneOf(clientHelper).getContactId(txn, contactGroupId); will(returnValue(contactId)); @@ -231,6 +235,10 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { GroupInvitationManager.CLIENT_ID, GroupInvitationManager.MAJOR_VERSION); will(returnValue(GroupInvitationManager.MINOR_VERSION)); + if (visible) { + oneOf(autoDeleteManager).getAutoDeleteTimer(txn, contactId); + will(returnValue(NO_AUTO_DELETE_TIMER)); + } }}); } } 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 f74054ddb..fde516717 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, clock); + messageEncoder, messageTracker, autoDeleteManager, clock); private CreatorSession getDefaultSession(CreatorState state) { return new CreatorSession(contactGroupId, privateGroupId, 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 d32277223..56a984d6e 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, clock); + messageEncoder, messageTracker, autoDeleteManager, clock); private final LocalAuthor localAuthor = getLocalAuthor(); private InviteeSession getDefaultSession(InviteeState state) { 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 0c64a4965..35191e995 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, clock); + messageEncoder, messageTracker, autoDeleteManager, clock); private PeerSession getDefaultSession(PeerState state) { return new PeerSession(contactGroupId, privateGroupId, diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java index f28cb8ef0..d0b5bf1d4 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java @@ -27,6 +27,7 @@ import org.briarproject.briar.api.messaging.PrivateMessageFactory; import org.briarproject.briar.api.privategroup.PrivateGroupManager; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager; import org.briarproject.briar.attachment.AttachmentModule; +import org.briarproject.briar.autodelete.AutoDeleteModule; import org.briarproject.briar.avatar.AvatarModule; import org.briarproject.briar.blog.BlogModule; import org.briarproject.briar.client.BriarClientModule; @@ -46,6 +47,8 @@ import dagger.Component; @Component(modules = { BrambleCoreIntegrationTestModule.class, BrambleCoreModule.class, + AttachmentModule.class, + AutoDeleteModule.class, AvatarModule.class, BlogModule.class, BriarClientModule.class, @@ -53,7 +56,6 @@ import dagger.Component; GroupInvitationModule.class, IdentityModule.class, IntroductionModule.class, - AttachmentModule.class, MessagingModule.class, PrivateGroupModule.class, SharingModule.class