X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FFreenetInterface.java;h=e77badf3006ac23602c4998206e6d220036c592b;hb=b4de2c2f2e5fbbe50e417692d972d2998328a14e;hp=a01a2bbaf28894fc8d5a6db1b1b4508ff81de49c;hpb=faf66247a34f64946990a985d2ea3003465969cb;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java b/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java index a01a2bb..e77badf 100644 --- a/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java +++ b/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java @@ -24,6 +24,7 @@ import static java.util.logging.Logger.getLogger; import java.io.IOException; import java.net.MalformedURLException; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -42,6 +43,8 @@ import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.data.TemporaryImage; import com.google.common.base.Function; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import com.google.common.eventbus.EventBus; import com.google.inject.Singleton; @@ -91,12 +94,14 @@ public class FreenetInterface { /** The node to interact with. */ private final Node node; + private final SoneUriCreator soneUriCreator; + /** The high-level client to use for requests. */ private final HighLevelSimpleClient client; private final RequestClient requestClient = new RequestClientBuilder().realTime().build(); /** The USK callbacks. */ - private final Map soneUskCallbacks = new HashMap<>(); + private final Multimap soneUskCallbacks = ArrayListMultimap.create(); /** The not-Sone-related USK callbacks. */ private final Map uriUskCallbacks = Collections.synchronizedMap(new HashMap()); @@ -104,18 +109,11 @@ public class FreenetInterface { private final RequestClient imageInserts = new RequestClientBuilder().realTime().build(); private final RequestClient imageLoader = new RequestClientBuilder().realTime().build(); - /** - * Creates a new Freenet interface. - * - * @param eventBus - * The event bus - * @param node - * The node to interact with - */ @Inject - public FreenetInterface(EventBus eventBus, Node node) { + public FreenetInterface(EventBus eventBus, Node node, SoneUriCreator soneUriCreator) { this.eventBus = eventBus; this.node = node; + this.soneUriCreator = soneUriCreator; this.client = node.clientCore.makeClient(RequestStarter.INTERACTIVE_PRIORITY_CLASS, false, true); } @@ -285,16 +283,19 @@ public class FreenetInterface { * The Sone to unregister */ public void unregisterUsk(Sone sone) { - USKCallback uskCallback = soneUskCallbacks.remove(sone.getId()); - if (uskCallback == null) { + Collection uskCallbacks = soneUskCallbacks.removeAll(sone.getId()); + if (uskCallbacks.isEmpty()) { return; } - try { - logger.log(Level.FINEST, String.format("Unsubscribing from USK for %s…", sone)); - node.clientCore.uskManager.unsubscribe(USK.create(sone.getRequestUri()), uskCallback); - } catch (MalformedURLException mue1) { - logger.log(Level.FINE, String.format("Could not unsubscribe USK “%s”!", sone.getRequestUri()), mue1); - } + logger.log(Level.FINE, String.format("Unsubscribing %d from USK for %s…", uskCallbacks.size(), sone)); + logger.log(Level.FINEST, String.format("USKs left: %d", soneUskCallbacks.size())); + uskCallbacks.forEach(uskCallback -> { + try { + node.clientCore.uskManager.unsubscribe(USK.create(soneUriCreator.getRequestUri(sone)), uskCallback); + } catch (MalformedURLException mue1) { + logger.log(Level.FINE, String.format("Could not unsubscribe USK “%s”!", soneUriCreator.getRequestUri(sone)), mue1); + } + }); } /**