Always create a new Sone.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / SoneDownloader.java
index 8a27979..6a6265e 100644 (file)
@@ -30,6 +30,7 @@ import net.pterodactylus.sone.data.Post;
 import net.pterodactylus.sone.data.Profile;
 import net.pterodactylus.sone.data.Reply;
 import net.pterodactylus.sone.data.Sone;
+import net.pterodactylus.util.collection.Pair;
 import net.pterodactylus.util.io.Closer;
 import net.pterodactylus.util.logging.Logging;
 import net.pterodactylus.util.number.Numbers;
@@ -119,13 +120,13 @@ public class SoneDownloader extends AbstractService {
                FreenetURI requestUri = sone.getRequestUri().setMetaString(new String[] { "sone.xml" });
                core.setSoneStatus(sone, SoneStatus.downloading);
                try {
-                       FetchResult fetchResult = freenetInterface.fetchUri(requestUri);
-                       if (fetchResult == null) {
+                       Pair<FreenetURI, FetchResult> fetchResults = freenetInterface.fetchUri(requestUri);
+                       if (fetchResults == null) {
                                /* TODO - mark Sone as bad. */
                                return;
                        }
-                       logger.log(Level.FINEST, "Got %d bytes back.", fetchResult.size());
-                       Sone parsedSone = parseSone(sone, fetchResult, requestUri);
+                       logger.log(Level.FINEST, "Got %d bytes back.", fetchResults.getRight().size());
+                       Sone parsedSone = parseSone(sone, fetchResults.getRight(), fetchResults.getLeft());
                        if (parsedSone != null) {
                                core.updateSone(parsedSone);
                        }
@@ -166,16 +167,16 @@ public class SoneDownloader extends AbstractService {
        }
 
        /**
-        * Parses a Sone from the given input stream and updates the given Sone, or
-        * creates a new Sone.
+        * Parses a Sone from the given input stream and creates a new Sone from the
+        * parsed data.
         *
-        * @param sone
+        * @param originalSone
         *            The Sone to update
         * @param soneInputStream
         *            The input stream to parse the Sone from
         * @return The parsed Sone
         */
-       public Sone parseSone(Sone sone, InputStream soneInputStream) {
+       public Sone parseSone(Sone originalSone, InputStream soneInputStream) {
                /* TODO - impose a size limit? */
 
                Document document;
@@ -185,9 +186,12 @@ public class SoneDownloader extends AbstractService {
                }
                if (document == null) {
                        /* TODO - mark Sone as bad. */
-                       logger.log(Level.WARNING, "Could not parse XML for Sone %s!", new Object[] { sone });
+                       logger.log(Level.WARNING, "Could not parse XML for Sone %s!", new Object[] { originalSone });
                        return null;
                }
+
+               Sone sone = new Sone(originalSone.getId());
+
                SimpleXML soneXml;
                try {
                        soneXml = SimpleXML.fromDocument(document);
@@ -226,7 +230,7 @@ public class SoneDownloader extends AbstractService {
                if ((soneInsertUri != null) && (sone.getInsertUri() == null)) {
                        try {
                                sone.setInsertUri(new FreenetURI(soneInsertUri));
-                               sone.updateUris(Math.max(sone.getRequestUri().getSuggestedEdition(), sone.getInsertUri().getSuggestedEdition()));
+                               sone.setLatestEdition(Math.max(sone.getRequestUri().getSuggestedEdition(), sone.getInsertUri().getSuggestedEdition()));
                        } catch (MalformedURLException mue1) {
                                /* TODO - mark Sone as bad. */
                                logger.log(Level.WARNING, "Downloaded Sone " + sone + " has invalid insert URI: " + soneInsertUri, mue1);