From 36b191e9d4941dc0afb0203b3bf402c15943ac66 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 24 Apr 2018 15:43:45 +0100 Subject: [PATCH] Use remote states to update local states at startup. --- .../versioning/ClientVersioningManagerImpl.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java index 1af256a3c..3d028196e 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java @@ -305,9 +305,15 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client, Update oldLocalUpdate = loadUpdate(txn, latest.local.messageId); List oldLocalStates = oldLocalUpdate.states; long oldLocalUpdateVersion = oldLocalUpdate.updateVersion; + // Load and parse the latest remote update, if any + List remoteStates; + if (latest.remote == null) remoteStates = emptyList(); + else remoteStates = loadUpdate(txn, latest.remote.messageId).states; // Update the local states if necessary List newLocalStates = updateStatesFromLocalVersions(oldLocalStates, versions); + newLocalStates = updateStatesFromRemoteStates(newLocalStates, + remoteStates); if (!oldLocalStates.equals(newLocalStates)) { // Delete the latest local update db.deleteMessage(txn, latest.local.messageId); @@ -316,10 +322,6 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client, storeUpdate(txn, g.getId(), newLocalStates, oldLocalUpdateVersion + 1); } - // Load and parse the latest remote update, if any - List remoteStates; - if (latest.remote == null) remoteStates = emptyList(); - else remoteStates = loadUpdate(txn, latest.remote.messageId).states; // Calculate the old and new client visibilities Map before = getVisibilities(oldLocalStates, remoteStates); @@ -442,7 +444,8 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Client, for (ClientState local : localStates) { ClientState remote = remoteMap.get(local.majorVersion); if (remote == null) visibilities.put(local.majorVersion, INVISIBLE); - else if (remote.active) visibilities.put(local.majorVersion, SHARED); + else if (remote.active) + visibilities.put(local.majorVersion, SHARED); else visibilities.put(local.majorVersion, VISIBLE); } return visibilities;