From 24b9e199169393b14c13d7bae5ef55ad7e880e2b Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Fri, 6 May 2011 23:32:59 +0200 Subject: [PATCH] Prevent partial updates when communication with the WoT is disrupted. This fixes #193. --- .../sone/freenet/wot/IdentityManager.java | 32 +++++++++++++--------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java index 98ba2c7..acd8633 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java @@ -180,21 +180,17 @@ public class IdentityManager extends AbstractService { Map> currentIdentities = new HashMap>(); Map currentOwnIdentities = new HashMap(); + Set ownIdentities = null; try { /* get all identities with the wanted context from WoT. */ - Set ownIdentities = webOfTrustConnector.loadAllOwnIdentities(); + ownIdentities = webOfTrustConnector.loadAllOwnIdentities(); - /* check for changes. */ - for (OwnIdentity ownIdentity : ownIdentities) { - currentOwnIdentities.put(ownIdentity.getId(), ownIdentity); - } - checkOwnIdentities(currentOwnIdentities); - - /* now filter for context and get all identities. */ + /* load trusted identities. */ for (OwnIdentity ownIdentity : ownIdentities) { if ((context != null) && !ownIdentity.hasContext(context)) { continue; } + currentOwnIdentities.put(ownIdentity.getId(), ownIdentity); Set trustedIdentities = webOfTrustConnector.loadTrustedIdentities(ownIdentity, context); Map identities = new HashMap(); @@ -202,6 +198,19 @@ public class IdentityManager extends AbstractService { for (Identity identity : trustedIdentities) { identities.put(identity.getId(), identity); } + } + } catch (WebOfTrustException wote1) { + logger.log(Level.WARNING, "WoT has disappeared!", wote1); + ownIdentities = null; + } + + if (ownIdentities != null) { + + /* check for changes. */ + checkOwnIdentities(currentOwnIdentities); + + /* now check for changes in remote identities. */ + for (OwnIdentity ownIdentity : currentOwnIdentities.values()) { /* find new identities. */ for (Identity currentIdentity : currentIdentities.get(ownIdentity).values()) { @@ -258,13 +267,10 @@ public class IdentityManager extends AbstractService { } } } - - /* remember the current set of identities. */ - oldIdentities = currentIdentities; } - } catch (WebOfTrustException wote1) { - logger.log(Level.WARNING, "WoT has disappeared!", wote1); + /* remember the current set of identities. */ + oldIdentities = currentIdentities; } /* wait a minute before checking again. */ -- 2.7.4