From a9f77f0f9016229201babff098427991a9109f16 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 13 Apr 2018 16:51:44 +0100 Subject: [PATCH] Add a method for getting a client's visibility. --- .../api/sync/ClientVersioningManager.java | 8 +++++++ .../sync/ClientVersioningManagerImpl.java | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java index 8a374b288c..781ce4b4e4 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientVersioningManager.java @@ -1,6 +1,7 @@ package org.briarproject.bramble.api.sync; import org.briarproject.bramble.api.contact.Contact; +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.lifecycle.LifecycleManager; @@ -34,6 +35,13 @@ public interface ClientVersioningManager { void registerClientVersioningHook(ClientId clientId, int clientVersion, ClientVersioningHook hook); + /** + * Returns the visibility of the given client with respect to the given + * contact. + */ + Visibility getClientVisibility(Transaction txn, ContactId contactId, + ClientId clientId, int clientVersion) throws DbException; + interface ClientVersioningHook { void onClientVisibilityChanging(Transaction txn, Contact c, diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java index 5594ac5e57..5f51690a37 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ClientVersioningManagerImpl.java @@ -89,6 +89,28 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client, hooks.put(new ClientVersion(clientId, clientVersion), hook); } + @Override + public Visibility getClientVisibility(Transaction txn, + ContactId contactId, ClientId clientId, int clientVersion) + throws DbException { + try { + Contact contact = db.getContact(txn, contactId); + Group g = getContactGroup(contact); + LatestUpdates latest = findLatestUpdates(txn, g.getId()); + if (latest.local == null) throw new DbException(); + if (latest.remote == null) return INVISIBLE; + Update localUpdate = loadUpdate(txn, latest.local.messageId); + Update remoteUpdate = loadUpdate(txn, latest.remote.messageId); + Map<ClientVersion, Visibility> visibilities = + getVisibilities(localUpdate.states, remoteUpdate.states); + ClientVersion cv = new ClientVersion(clientId, clientVersion); + Visibility v = visibilities.get(cv); + return v == null ? INVISIBLE : v; + } catch (FormatException e) { + throw new DbException(e); + } + } + @Override public void createLocalState(Transaction txn) throws DbException { if (db.containsGroup(txn, localGroup.getId())) return; -- GitLab