diff --git a/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeManagerImpl.java index 58ba7c462..c10ac6e12 100644 --- a/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeManagerImpl.java @@ -46,7 +46,8 @@ import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_ import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_TIMESTAMP; public class RemoteWipeManagerImpl extends ConversationClientImpl - implements RemoteWipeManager, LifecycleManager.OpenDatabaseHook { + implements RemoteWipeManager, ContactManager.ContactHook, + ClientVersioningManager.ClientVersioningHook, LifecycleManager.OpenDatabaseHook { private final ClientVersioningManager clientVersioningManager; private final Group localGroup; @@ -79,17 +80,7 @@ public class RemoteWipeManagerImpl extends ConversationClientImpl if (db.containsGroup(txn, localGroup.getId())) return; db.addGroup(txn, localGroup); // Set things up for any pre-existing contacts - for (Contact c : db.getContacts(txn)) { - // Create a group to share with the contact - Group g = getContactGroup(c); - db.addGroup(txn, g); - // Apply the client's visibility to the contact group - Group.Visibility client = clientVersioningManager.getClientVisibility(txn, - c.getId(), CLIENT_ID, MAJOR_VERSION); - db.setGroupVisibility(txn, c.getId(), g.getId(), client); - // Attach the contact ID to the group - setContactId(txn, g.getId(), c.getId()); - } + for (Contact c : db.getContacts(txn)) addingContact(txn, c); } private void setContactId(Transaction txn, GroupId g, ContactId c) @@ -277,4 +268,30 @@ public class RemoteWipeManagerImpl extends ConversationClientImpl throw new DbException(e); } } + + @Override + public void onClientVisibilityChanging(Transaction txn, Contact c, + Group.Visibility v) throws DbException { + // Apply the client's visibility to the contact group + Group g = getContactGroup(c); + db.setGroupVisibility(txn, c.getId(), g.getId(), v); + } + + @Override + public void addingContact(Transaction txn, Contact c) throws DbException { + // Create a group to share with the contact + Group g = getContactGroup(c); + db.addGroup(txn, g); + // Apply the client's visibility to the contact group + Group.Visibility client = clientVersioningManager.getClientVisibility(txn, + c.getId(), CLIENT_ID, MAJOR_VERSION); + db.setGroupVisibility(txn, c.getId(), g.getId(), client); + // Attach the contact ID to the group + setContactId(txn, g.getId(), c.getId()); + } + + @Override + public void removingContact(Transaction txn, Contact c) throws DbException { + db.removeGroup(txn, getContactGroup(c)); + } } diff --git a/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeModule.java b/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeModule.java index b24ae9d78..64bc103d3 100644 --- a/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/remotewipe/RemoteWipeModule.java @@ -1,7 +1,9 @@ package org.briarproject.briar.remotewipe; +import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.sync.validation.ValidationManager; +import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.briar.api.conversation.ConversationManager; import org.briarproject.briar.api.remotewipe.RemoteWipeManager; @@ -11,6 +13,10 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; +import static org.briarproject.briar.api.socialbackup.SocialBackupManager.CLIENT_ID; +import static org.briarproject.briar.api.socialbackup.SocialBackupManager.MAJOR_VERSION; +import static org.briarproject.briar.api.socialbackup.SocialBackupManager.MINOR_VERSION; + @Module public class RemoteWipeModule { public static class EagerSingletons { @@ -24,11 +30,17 @@ public class RemoteWipeModule { LifecycleManager lifecycleManager, ValidationManager validationManager, ConversationManager conversationManager, + ContactManager contactManager, + ClientVersioningManager clientVersioningManager, RemoteWipeManagerImpl remoteWipeManager) { lifecycleManager.registerOpenDatabaseHook(remoteWipeManager); validationManager .registerIncomingMessageHook(RemoteWipeManager.CLIENT_ID, RemoteWipeManager.MAJOR_VERSION, remoteWipeManager); + + contactManager.registerContactHook(remoteWipeManager); + clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION, + MINOR_VERSION, remoteWipeManager); conversationManager.registerConversationClient(remoteWipeManager); return remoteWipeManager; } diff --git a/briar-core/src/test/java/org/briarproject/briar/remotewipe/RemoteWipeIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/remotewipe/RemoteWipeIntegrationTest.java index b197d6ca8..39a788e83 100644 --- a/briar-core/src/test/java/org/briarproject/briar/remotewipe/RemoteWipeIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/remotewipe/RemoteWipeIntegrationTest.java @@ -89,6 +89,7 @@ public class RemoteWipeIntegrationTest extends BriarIntegrationTest messages0At1 = getMessages0At1(); assertEquals(1, messages0At1.size()); + System.out.println("mmmm" + messages0At1.size()); for (ConversationMessageHeader h : messages0At1) { assertTrue(h instanceof RemoteWipeMessageHeader); RemoteWipeMessageHeader r = (RemoteWipeMessageHeader) h;