From de76986ee4f8d1207698b3094842e08d97c6e8aa Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 16 Aug 2022 15:06:38 +0100 Subject: [PATCH] Rename event, only broadcast it when adding a new contact. --- ...> MailboxUpdateSentToNewContactEvent.java} | 17 +++++---- .../bramble/mailbox/MailboxClientManager.java | 7 ++-- .../mailbox/MailboxUpdateManagerImpl.java | 20 ++++++++-- .../mailbox/MailboxUpdateManagerImplTest.java | 37 +++++++++---------- 4 files changed, 46 insertions(+), 35 deletions(-) rename bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/event/{MailboxUpdateSentEvent.java => MailboxUpdateSentToNewContactEvent.java} (56%) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/event/MailboxUpdateSentEvent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/event/MailboxUpdateSentToNewContactEvent.java similarity index 56% rename from bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/event/MailboxUpdateSentEvent.java rename to bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/event/MailboxUpdateSentToNewContactEvent.java index 4017780bd..efba3afd7 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/event/MailboxUpdateSentEvent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/event/MailboxUpdateSentToNewContactEvent.java @@ -3,27 +3,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.mailbox.MailboxUpdateManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import javax.annotation.concurrent.Immutable; /** - * An event that is broadcast when a mailbox update is sent to a contact. + * An event that is broadcast when the first mailbox update is sent to a + * newly added contact, which happens in the same transaction in which the + * contact is added. *

- * Note that this event is not broadcast when a mailbox is paired or - * unpaired, although updates are sent to all contacts in those situations. - * - * @see MailboxPairedEvent - * @see MailboxUnpairedEvent + * This event is not broadcast when the first mailbox update is sent to an + * existing contact when setting up the + * {@link MailboxUpdateManager mailbox update client}. */ @Immutable @NotNullByDefault -public class MailboxUpdateSentEvent extends Event { +public class MailboxUpdateSentToNewContactEvent extends Event { private final ContactId contactId; private final MailboxUpdate mailboxUpdate; - public MailboxUpdateSentEvent(ContactId contactId, + public MailboxUpdateSentToNewContactEvent(ContactId contactId, MailboxUpdate mailboxUpdate) { this.contactId = contactId; this.mailboxUpdate = mailboxUpdate; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxClientManager.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxClientManager.java index 7057f0cac..7f23024c5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxClientManager.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxClientManager.java @@ -21,7 +21,7 @@ import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox; 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.MailboxUpdateSentEvent; +import org.briarproject.bramble.api.mailbox.event.MailboxUpdateSentToNewContactEvent; import org.briarproject.bramble.api.mailbox.event.OwnMailboxConnectionStatusEvent; import org.briarproject.bramble.api.mailbox.event.RemoteMailboxUpdateEvent; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -269,9 +269,10 @@ class MailboxClientManager implements Service, EventListener { LOG.info("Mailbox unpaired"); MailboxUnpairedEvent m = (MailboxUnpairedEvent) e; onMailboxUnpaired(m.getLocalUpdates()); - } else if (e instanceof MailboxUpdateSentEvent) { + } else if (e instanceof MailboxUpdateSentToNewContactEvent) { LOG.info("Contact added"); - MailboxUpdateSentEvent m = (MailboxUpdateSentEvent) e; + MailboxUpdateSentToNewContactEvent + m = (MailboxUpdateSentToNewContactEvent) e; onContactAdded(m.getContactId(), m.getMailboxUpdate()); } else if (e instanceof ContactRemovedEvent) { LOG.info("Contact removed"); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java index 4a6556c52..12dd1694d 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java @@ -27,7 +27,7 @@ import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox; 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.MailboxUpdateSentEvent; +import org.briarproject.bramble.api.mailbox.event.MailboxUpdateSentToNewContactEvent; import org.briarproject.bramble.api.mailbox.event.RemoteMailboxUpdateEvent; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.Group; @@ -115,13 +115,12 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, } Group g = getContactGroup(c); storeMessageReplaceLatest(txn, g.getId(), updated); - txn.attach(new MailboxUpdateSentEvent(c.getId(), updated)); } } else { db.addGroup(txn, localGroup); // Set things up for any pre-existing contacts for (Contact c : db.getContacts(txn)) { - addingContact(txn, c); + addingContact(txn, c, false); } } @@ -137,6 +136,17 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, @Override public void addingContact(Transaction txn, Contact c) throws DbException { + addingContact(txn, c, true); + } + + /** + * @param attachEvent True if a {@link MailboxUpdateSentToNewContactEvent} + * should be attached to the transaction. We should only do this when + * adding a new contact, not when setting up this client for an existing + * contact. + */ + private void addingContact(Transaction txn, Contact c, boolean attachEvent) + throws DbException { // Create a group to share with the contact Group g = getContactGroup(c); db.addGroup(txn, g); @@ -157,7 +167,9 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, // Not paired, but we still want to get our clientSupports sent u = sendUpdateNoMailbox(txn, c); } - txn.attach(new MailboxUpdateSentEvent(c.getId(), u)); + if (attachEvent) { + txn.attach(new MailboxUpdateSentToNewContactEvent(c.getId(), u)); + } } @Override diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java index f176dc89b..af0893eb9 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java @@ -19,7 +19,7 @@ import org.briarproject.bramble.api.mailbox.MailboxUpdateWithMailbox; 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.MailboxUpdateSentEvent; +import org.briarproject.bramble.api.mailbox.event.MailboxUpdateSentToNewContactEvent; import org.briarproject.bramble.api.mailbox.event.RemoteMailboxUpdateEvent; import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.GroupId; @@ -187,8 +187,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn); - MailboxUpdateSentEvent e = getEvent(txn, MailboxUpdateSentEvent.class); - assertNoMailboxPropertiesSent(e, someClientSupportsList); + assertFalse(hasEvent(txn, MailboxUpdateSentToNewContactEvent.class)); } @Test @@ -243,8 +242,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn); - MailboxUpdateSentEvent e = getEvent(txn, MailboxUpdateSentEvent.class); - assertMailboxPropertiesSent(e, someClientSupportsList); + assertFalse(hasEvent(txn, MailboxUpdateSentToNewContactEvent.class)); } @Test @@ -295,8 +293,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn1); - MailboxUpdateSentEvent e = getEvent(txn1, MailboxUpdateSentEvent.class); - assertNoMailboxPropertiesSent(e, someClientSupportsList); + assertFalse(hasEvent(txn1, MailboxUpdateSentToNewContactEvent.class)); context.checking(new Expectations() {{ oneOf(db).containsGroup(txn2, localGroup.getId()); @@ -311,7 +308,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn2); - assertFalse(hasEvent(txn2, MailboxUpdateSentEvent.class)); + assertFalse(hasEvent(txn2, MailboxUpdateSentToNewContactEvent.class)); } @Test @@ -363,9 +360,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn1); - MailboxUpdateSentEvent e1 = - getEvent(txn1, MailboxUpdateSentEvent.class); - assertNoMailboxPropertiesSent(e1, someClientSupportsList); + assertFalse(hasEvent(txn1, MailboxUpdateSentToNewContactEvent.class)); BdfDictionary metaDictionary = BdfDictionary.of( new BdfEntry(MSG_KEY_VERSION, 1), @@ -427,9 +422,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { t = createInstance(newerClientSupportsList); t.onDatabaseOpened(txn2); - MailboxUpdateSentEvent e2 = - getEvent(txn2, MailboxUpdateSentEvent.class); - assertNoMailboxPropertiesSent(e2, newerClientSupportsList); + assertFalse(hasEvent(txn2, MailboxUpdateSentToNewContactEvent.class)); } @Test @@ -466,7 +459,8 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.addingContact(txn, contact); - MailboxUpdateSentEvent e = getEvent(txn, MailboxUpdateSentEvent.class); + MailboxUpdateSentToNewContactEvent + e = getEvent(txn, MailboxUpdateSentToNewContactEvent.class); assertNoMailboxPropertiesSent(e, someClientSupportsList); } @@ -510,7 +504,8 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.addingContact(txn, contact); - MailboxUpdateSentEvent e = getEvent(txn, MailboxUpdateSentEvent.class); + MailboxUpdateSentToNewContactEvent + e = getEvent(txn, MailboxUpdateSentToNewContactEvent.class); assertMailboxPropertiesSent(e, someClientSupportsList); } @@ -722,7 +717,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { assertEquals(updateWithMailbox.getMailboxProperties(), u.getMailboxProperties()); - assertFalse(hasEvent(txn, MailboxUpdateSentEvent.class)); + assertFalse(hasEvent(txn, MailboxUpdateSentToNewContactEvent.class)); } @Test @@ -765,7 +760,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { MailboxUpdate u = localUpdates.get(contact.getId()); assertFalse(u.hasMailbox()); - assertFalse(hasEvent(txn, MailboxUpdateSentEvent.class)); + assertFalse(hasEvent(txn, MailboxUpdateSentToNewContactEvent.class)); } @Test @@ -948,7 +943,8 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { }}); } - private void assertNoMailboxPropertiesSent(MailboxUpdateSentEvent e, + private void assertNoMailboxPropertiesSent( + MailboxUpdateSentToNewContactEvent e, List clientSupports) { assertEquals(contact.getId(), e.getContactId()); MailboxUpdate u = e.getMailboxUpdate(); @@ -956,7 +952,8 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { assertFalse(u.hasMailbox()); } - private void assertMailboxPropertiesSent(MailboxUpdateSentEvent e, + private void assertMailboxPropertiesSent( + MailboxUpdateSentToNewContactEvent e, List clientSupports) { assertEquals(contact.getId(), e.getContactId()); MailboxUpdate u = e.getMailboxUpdate();