Create our own realtime client for requests.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / FreenetInterface.java
index 901019c..6737d63 100644 (file)
@@ -24,6 +24,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.util.collection.Pair;
 import net.pterodactylus.util.logging.Logging;
 
 import com.db4o.ObjectContainer;
@@ -64,12 +65,10 @@ public class FreenetInterface {
         *
         * @param node
         *            The node to interact with
-        * @param client
-        *            The high-level client
         */
-       public FreenetInterface(Node node, HighLevelSimpleClient client) {
+       public FreenetInterface(Node node) {
                this.node = node;
-               this.client = client;
+               this.client = node.clientCore.makeClient(RequestStarter.INTERACTIVE_PRIORITY_CLASS, false, true);
        }
 
        //
@@ -83,13 +82,13 @@ public class FreenetInterface {
         *            The URI to fetch
         * @return The result of the fetch, or {@code null} if an error occured
         */
-       public FetchResult fetchUri(FreenetURI uri) {
+       public Pair<FreenetURI, FetchResult> fetchUri(FreenetURI uri) {
                FetchResult fetchResult = null;
                FreenetURI currentUri = new FreenetURI(uri);
                while (true) {
                        try {
                                fetchResult = client.fetch(currentUri);
-                               return fetchResult;
+                               return new Pair<FreenetURI, FetchResult>(currentUri, fetchResult);
                        } catch (FetchException fe1) {
                                if (fe1.getMode() == FetchException.PERMANENT_REDIRECT) {
                                        currentUri = fe1.newURI;
@@ -151,8 +150,14 @@ public class FreenetInterface {
                                public void onFoundEdition(long edition, USK key, ObjectContainer objectContainer, ClientContext clientContext, boolean metadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
                                        logger.log(Level.FINE, "Found USK update for Sone ā€œ%sā€ at %s, new known good: %s, new slot too: %s.", new Object[] { sone, key, newKnownGood, newSlotToo });
                                        if (newKnownGood) {
-                                               sone.updateUris(key.getURI());
-                                               soneDownloader.fetchSone(sone);
+                                               sone.setLatestEdition(key.suggestedEdition);
+                                               new Thread(new Runnable() {
+
+                                                       @Override
+                                                       public void run() {
+                                                               soneDownloader.fetchSone(sone);
+                                                       }
+                                               }, "Sone Downloader").start();
                                        }
                                }