diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/GroupVisibilityUpdatedEvent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/GroupVisibilityUpdatedEvent.java index 1bcca2c66..7d151a48d 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/GroupVisibilityUpdatedEvent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/GroupVisibilityUpdatedEvent.java @@ -3,6 +3,7 @@ package org.briarproject.bramble.api.sync.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.Group.Visibility; import java.util.Collection; @@ -15,12 +16,19 @@ import javax.annotation.concurrent.Immutable; @NotNullByDefault public class GroupVisibilityUpdatedEvent extends Event { + private final Visibility visibility; private final Collection affected; - public GroupVisibilityUpdatedEvent(Collection affected) { + public GroupVisibilityUpdatedEvent(Visibility visibility, + Collection affected) { + this.visibility = visibility; this.affected = affected; } + public Visibility getVisibility() { + return visibility; + } + /** * Returns the contacts affected by the update. */ diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index bdf191ba1..14b033b41 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -1025,7 +1025,8 @@ class DatabaseComponentImpl implements DatabaseComponent { db.getGroupVisibility(txn, id).keySet(); db.removeGroup(txn, id); transaction.attach(new GroupRemovedEvent(g)); - transaction.attach(new GroupVisibilityUpdatedEvent(affected)); + transaction.attach(new GroupVisibilityUpdatedEvent(INVISIBLE, + affected)); } @Override @@ -1150,7 +1151,7 @@ class DatabaseComponentImpl implements DatabaseComponent { else if (v == INVISIBLE) db.removeGroupVisibility(txn, c, g); else db.setGroupVisibility(txn, c, g, v == SHARED); List affected = singletonList(c); - transaction.attach(new GroupVisibilityUpdatedEvent(affected)); + transaction.attach(new GroupVisibilityUpdatedEvent(v, affected)); } @Override diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java index 349b8d37b..4bfb17bb0 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java @@ -50,6 +50,7 @@ import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STOPPING; import static org.briarproject.bramble.api.record.Record.RECORD_HEADER_BYTES; +import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_LENGTH; import static org.briarproject.bramble.api.sync.SyncConstants.SUPPORTED_VERSIONS; @@ -235,8 +236,10 @@ class DuplexOutgoingSession implements SyncSession, EventListener { generateOffer(); } else if (e instanceof GroupVisibilityUpdatedEvent) { GroupVisibilityUpdatedEvent g = (GroupVisibilityUpdatedEvent) e; - if (g.getAffectedContacts().contains(contactId)) + if (g.getVisibility() == SHARED && + g.getAffectedContacts().contains(contactId)) { generateOffer(); + } } else if (e instanceof MessageRequestedEvent) { if (((MessageRequestedEvent) e).getContactId().equals(contactId)) generateBatch();