X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneDownloader.java;h=42f67029b78cd41e760eb1e7ae08bc44e91aca4c;hb=5b54d9007b20d2cd8f52decdeb2baaf1445f33cb;hp=13154a088d17b2e8f89d56dde50addaa7e33cd27;hpb=52d670f5e47eb7417a5a82662416beeb39c9a774;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java index 13154a0..42f6702 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java @@ -26,6 +26,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import net.pterodactylus.sone.core.Core.SoneStatus; +import net.pterodactylus.sone.data.Client; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Reply; @@ -147,7 +148,7 @@ public class SoneDownloader extends AbstractService { * @return The parsed Sone, or {@code null} if the Sone could not be parsed */ public Sone parseSone(Sone originalSone, FetchResult fetchResult, FreenetURI requestUri) { - logger.log(Level.FINEST, "Persing FetchResult (%d bytes, %s) for %s…", new Object[] { fetchResult.size(), fetchResult.getMimeType(), originalSone }); + logger.log(Level.FINEST, "Parsing FetchResult (%d bytes, %s) for %s…", new Object[] { fetchResult.size(), fetchResult.getMimeType(), originalSone }); Bucket soneBucket = fetchResult.asBucket(); InputStream soneInputStream = null; try { @@ -167,16 +168,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; @@ -186,9 +187,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()).setIdentity(originalSone.getIdentity()); + SimpleXML soneXml; try { soneXml = SimpleXML.fromDocument(document); @@ -212,6 +216,17 @@ public class SoneDownloader extends AbstractService { return null; } + SimpleXML clientXml = soneXml.getNode("client"); + if (clientXml != null) { + String clientName = clientXml.getValue("name", null); + String clientVersion = clientXml.getValue("version", null); + if ((clientName == null) || (clientVersion == null)) { + logger.log(Level.WARNING, "Download Sone %s with client XML but missing name or version!", sone); + return null; + } + sone.setClient(new Client(clientName, clientVersion)); + } + String soneRequestUri = soneXml.getValue("request-uri", null); if (soneRequestUri != null) { try { @@ -338,7 +353,6 @@ public class SoneDownloader extends AbstractService { sone.setPosts(posts); sone.setReplies(replies); sone.setLikePostIds(likedPostIds); - sone.setModificationCounter(0); } return sone;