mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Broadcast events for pairing and unpairing.
This commit is contained in:
@@ -0,0 +1,36 @@
|
|||||||
|
package org.briarproject.bramble.api.mailbox.event;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
|
import org.briarproject.bramble.api.event.Event;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxProperties;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An event that is broadcast when a mailbox is paired.
|
||||||
|
*/
|
||||||
|
@Immutable
|
||||||
|
@NotNullByDefault
|
||||||
|
public class MailboxPairedEvent extends Event {
|
||||||
|
|
||||||
|
private final MailboxProperties properties;
|
||||||
|
private final Map<ContactId, MailboxUpdateWithMailbox> localUpdates;
|
||||||
|
|
||||||
|
public MailboxPairedEvent(MailboxProperties properties,
|
||||||
|
Map<ContactId, MailboxUpdateWithMailbox> localUpdates) {
|
||||||
|
this.properties = properties;
|
||||||
|
this.localUpdates = localUpdates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MailboxProperties getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<ContactId, MailboxUpdateWithMailbox> getLocalUpdates() {
|
||||||
|
return localUpdates;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package org.briarproject.bramble.api.mailbox.event;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
|
import org.briarproject.bramble.api.event.Event;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxUpdate;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An event that is broadcast when a mailbox is unpaired.
|
||||||
|
*/
|
||||||
|
@Immutable
|
||||||
|
@NotNullByDefault
|
||||||
|
public class MailboxUnpairedEvent extends Event {
|
||||||
|
|
||||||
|
private final Map<ContactId, MailboxUpdate> localUpdates;
|
||||||
|
|
||||||
|
public MailboxUnpairedEvent(Map<ContactId, MailboxUpdate> localUpdates) {
|
||||||
|
this.localUpdates = localUpdates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<ContactId, MailboxUpdate> getLocalUpdates() {
|
||||||
|
return localUpdates;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,6 +25,8 @@ import org.briarproject.bramble.api.mailbox.MailboxUpdate;
|
|||||||
import org.briarproject.bramble.api.mailbox.MailboxUpdateManager;
|
import org.briarproject.bramble.api.mailbox.MailboxUpdateManager;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox;
|
import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxVersion;
|
import org.briarproject.bramble.api.mailbox.MailboxVersion;
|
||||||
|
import org.briarproject.bramble.api.mailbox.event.MailboxPairedEvent;
|
||||||
|
import org.briarproject.bramble.api.mailbox.event.MailboxUnpairedEvent;
|
||||||
import org.briarproject.bramble.api.mailbox.event.RemoteMailboxUpdateEvent;
|
import org.briarproject.bramble.api.mailbox.event.RemoteMailboxUpdateEvent;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.sync.Group;
|
import org.briarproject.bramble.api.sync.Group;
|
||||||
@@ -38,6 +40,7 @@ import org.briarproject.bramble.api.system.Clock;
|
|||||||
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
|
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
|
||||||
import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook;
|
import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
@@ -161,17 +164,23 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager,
|
|||||||
@Override
|
@Override
|
||||||
public void mailboxPaired(Transaction txn, MailboxProperties p)
|
public void mailboxPaired(Transaction txn, MailboxProperties p)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
|
Map<ContactId, MailboxUpdateWithMailbox> localUpdates = new HashMap<>();
|
||||||
for (Contact c : db.getContacts(txn)) {
|
for (Contact c : db.getContacts(txn)) {
|
||||||
createAndSendUpdateWithMailbox(txn, c, p.getServerSupports(),
|
MailboxUpdateWithMailbox u = createAndSendUpdateWithMailbox(txn, c,
|
||||||
p.getOnion());
|
p.getServerSupports(), p.getOnion());
|
||||||
|
localUpdates.put(c.getId(), u);
|
||||||
}
|
}
|
||||||
|
txn.attach(new MailboxPairedEvent(p, localUpdates));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mailboxUnpaired(Transaction txn) throws DbException {
|
public void mailboxUnpaired(Transaction txn) throws DbException {
|
||||||
|
Map<ContactId, MailboxUpdate> localUpdates = new HashMap<>();
|
||||||
for (Contact c : db.getContacts(txn)) {
|
for (Contact c : db.getContacts(txn)) {
|
||||||
sendUpdateNoMailbox(txn, c);
|
MailboxUpdate u = sendUpdateNoMailbox(txn, c);
|
||||||
|
localUpdates.put(c.getId(), u);
|
||||||
}
|
}
|
||||||
|
txn.attach(new MailboxUnpairedEvent(localUpdates));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -240,18 +249,19 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager,
|
|||||||
* supported Mailbox API version(s). All of which the contact needs to
|
* supported Mailbox API version(s). All of which the contact needs to
|
||||||
* communicate with our Mailbox.
|
* communicate with our Mailbox.
|
||||||
*/
|
*/
|
||||||
private void createAndSendUpdateWithMailbox(Transaction txn, Contact c,
|
private MailboxUpdateWithMailbox createAndSendUpdateWithMailbox(
|
||||||
List<MailboxVersion> serverSupports, String ownOnion)
|
Transaction txn, Contact c, List<MailboxVersion> serverSupports,
|
||||||
throws DbException {
|
String ownOnion) throws DbException {
|
||||||
MailboxProperties properties = new MailboxProperties(ownOnion,
|
MailboxProperties properties = new MailboxProperties(ownOnion,
|
||||||
new MailboxAuthToken(crypto.generateUniqueId().getBytes()),
|
new MailboxAuthToken(crypto.generateUniqueId().getBytes()),
|
||||||
serverSupports,
|
serverSupports,
|
||||||
new MailboxFolderId(crypto.generateUniqueId().getBytes()),
|
new MailboxFolderId(crypto.generateUniqueId().getBytes()),
|
||||||
new MailboxFolderId(crypto.generateUniqueId().getBytes()));
|
new MailboxFolderId(crypto.generateUniqueId().getBytes()));
|
||||||
MailboxUpdate u =
|
MailboxUpdateWithMailbox u =
|
||||||
new MailboxUpdateWithMailbox(clientSupports, properties);
|
new MailboxUpdateWithMailbox(clientSupports, properties);
|
||||||
Group g = getContactGroup(c);
|
Group g = getContactGroup(c);
|
||||||
storeMessageReplaceLatest(txn, g.getId(), u);
|
storeMessageReplaceLatest(txn, g.getId(), u);
|
||||||
|
return u;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -260,11 +270,12 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager,
|
|||||||
* Mailbox that they can use. It still includes the list of Mailbox API
|
* Mailbox that they can use. It still includes the list of Mailbox API
|
||||||
* version(s) that we support as a client.
|
* version(s) that we support as a client.
|
||||||
*/
|
*/
|
||||||
private void sendUpdateNoMailbox(Transaction txn, Contact c)
|
private MailboxUpdate sendUpdateNoMailbox(Transaction txn, Contact c)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
Group g = getContactGroup(c);
|
Group g = getContactGroup(c);
|
||||||
MailboxUpdate u = new MailboxUpdate(clientSupports);
|
MailboxUpdate u = new MailboxUpdate(clientSupports);
|
||||||
storeMessageReplaceLatest(txn, g.getId(), u);
|
storeMessageReplaceLatest(txn, g.getId(), u);
|
||||||
|
return u;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
|||||||
import org.briarproject.bramble.api.mailbox.MailboxUpdate;
|
import org.briarproject.bramble.api.mailbox.MailboxUpdate;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox;
|
import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxVersion;
|
import org.briarproject.bramble.api.mailbox.MailboxVersion;
|
||||||
|
import org.briarproject.bramble.api.mailbox.event.MailboxPairedEvent;
|
||||||
|
import org.briarproject.bramble.api.mailbox.event.MailboxUnpairedEvent;
|
||||||
import org.briarproject.bramble.api.mailbox.event.RemoteMailboxUpdateEvent;
|
import org.briarproject.bramble.api.mailbox.event.RemoteMailboxUpdateEvent;
|
||||||
import org.briarproject.bramble.api.sync.Group;
|
import org.briarproject.bramble.api.sync.Group;
|
||||||
import org.briarproject.bramble.api.sync.GroupId;
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
@@ -679,6 +681,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase {
|
|||||||
|
|
||||||
MailboxUpdateManagerImpl t = createInstance(someClientSupportsList);
|
MailboxUpdateManagerImpl t = createInstance(someClientSupportsList);
|
||||||
t.mailboxPaired(txn, ownProps);
|
t.mailboxPaired(txn, ownProps);
|
||||||
|
assertTrue(hasEvent(txn, MailboxPairedEvent.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -717,6 +720,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase {
|
|||||||
|
|
||||||
MailboxUpdateManagerImpl t = createInstance(someClientSupportsList);
|
MailboxUpdateManagerImpl t = createInstance(someClientSupportsList);
|
||||||
t.mailboxUnpaired(txn);
|
t.mailboxUnpaired(txn);
|
||||||
|
assertTrue(hasEvent(txn, MailboxUnpairedEvent.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user