Sone Inserters are indexed by Sones, not by IDs.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index e4814fe..dc6516d 100644 (file)
@@ -436,10 +436,6 @@ public class Core implements IdentityListener {
                        return null;
                }
                synchronized (localSones) {
-                       if (localSones.containsKey(ownIdentity.getId())) {
-                               logger.log(Level.FINE, "Tried to add known local Sone: %s", ownIdentity);
-                               return localSones.get(ownIdentity.getId());
-                       }
                        final Sone sone;
                        try {
                                sone = getLocalSone(ownIdentity.getId()).setIdentity(ownIdentity).setInsertUri(new FreenetURI(ownIdentity.getInsertUri())).setRequestUri(new FreenetURI(ownIdentity.getRequestUri()));
@@ -454,15 +450,7 @@ public class Core implements IdentityListener {
                        soneInserters.put(sone, soneInserter);
                        soneInserter.start();
                        setSoneStatus(sone, SoneStatus.idle);
-                       new Thread(new Runnable() {
-
-                               @Override
-                               @SuppressWarnings("synthetic-access")
-                               public void run() {
-                                       soneDownloader.fetchSone(sone);
-                               }
-
-                       }, "Sone Downloader").start();
+                       loadSone(sone);
                        return sone;
                }
        }
@@ -497,14 +485,19 @@ public class Core implements IdentityListener {
                        return null;
                }
                synchronized (remoteSones) {
-                       if (remoteSones.containsKey(identity.getId())) {
-                               logger.log(Level.FINE, "Identity already exists: %s", identity);
-                               return remoteSones.get(identity.getId());
-                       }
-                       Sone sone = new Sone(identity);
+                       final Sone sone = getRemoteSone(identity.getId()).setIdentity(identity);
                        sone.setRequestUri(getSoneUri(identity.getRequestUri(), identity.getProperty("Sone.LatestEdition")));
                        remoteSones.put(identity.getId(), sone);
                        soneDownloader.addSone(sone);
+                       new Thread(new Runnable() {
+
+                               @Override
+                               @SuppressWarnings("synthetic-access")
+                               public void run() {
+                                       soneDownloader.fetchSone(sone);
+                               }
+
+                       }, "Sone Downloader").start();
                        setSoneStatus(sone, SoneStatus.idle);
                        return sone;
                }
@@ -571,7 +564,7 @@ public class Core implements IdentityListener {
                                return;
                        }
                        localSones.remove(sone.getId());
-                       soneInserters.remove(sone.getId()).stop();
+                       soneInserters.remove(sone).stop();
                }
                identityManager.removeContext((OwnIdentity) sone.getIdentity(), "Sone");
        }