Don’t process a download if the downloader was aborted.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / SoneDownloader.java
index d0f9055..a406f1b 100644 (file)
@@ -17,6 +17,9 @@
 
 package net.pterodactylus.sone.core;
 
+import static java.util.logging.Level.FINER;
+import static net.pterodactylus.sone.data.Sone.TO_FREENET_URI;
+
 import java.io.InputStream;
 import java.util.HashSet;
 import java.util.Set;
@@ -107,7 +110,7 @@ public class SoneDownloader extends AbstractService {
         *            The Sone to fetch
         */
        public void fetchSone(Sone sone) {
-               fetchSone(sone, sone.getRequestUri().sskForUSK());
+               fetchSone(sone, TO_FREENET_URI.apply(sone).sskForUSK());
        }
 
        /**
@@ -146,6 +149,10 @@ public class SoneDownloader extends AbstractService {
                                /* TODO - mark Sone as bad. */
                                return null;
                        }
+                       if (shouldStop()) {
+                               logger.log(FINER, "Sone was stopped, won’t process download.");
+                               return null;
+                       }
                        logger.log(Level.FINEST, String.format("Got %d bytes back.", fetchResults.getFetchResult().size()));
                        Sone parsedSone = parseSone(sone, fetchResults.getFetchResult(), fetchResults.getFreenetUri());
                        if (parsedSone != null) {
@@ -180,12 +187,7 @@ public class SoneDownloader extends AbstractService {
                        soneInputStream = soneBucket.getInputStream();
                        Sone parsedSone = parseSone(originalSone, soneInputStream);
                        if (parsedSone != null) {
-                               parsedSone.setLatestEdition(requestUri.getEdition());
-                               if (requestUri.getKeyType().equals("USK")) {
-                                       parsedSone.setRequestUri(requestUri.setMetaString(new String[0]));
-                               } else {
-                                       parsedSone.setRequestUri(requestUri.setKeyType("USK").setDocName("Sone").setMetaString(new String[0]));
-                               }
+                               parsedSone.modify().setLatestEdition(requestUri.getEdition()).update();
                        }
                        return parsedSone;
                } catch (Exception e1) {
@@ -206,11 +208,9 @@ public class SoneDownloader extends AbstractService {
         * @param soneInputStream
         *            The input stream to parse the Sone from
         * @return The parsed Sone
-        * @throws SoneException
-        *             if a parse error occurs, or the protocol is invalid
         */
-       public Sone parseSone(Sone originalSone, InputStream soneInputStream) throws SoneException {
-               return new SoneParser(core).parseSone(originalSone, soneInputStream);
+       public Sone parseSone(Sone originalSone, InputStream soneInputStream) {
+               return new SoneParser().parseSone(core.getDatabase(), originalSone, soneInputStream);
        }
 
        //