* The Sone to fetch
*/
public void fetchSone(Sone sone) {
+ fetchSone(sone, sone.getRequestUri());
+ }
+
+ /**
+ * Fetches the updated Sone. This method can be used to fetch a Sone from a
+ * specific URI (which happens when {@link Core#isSoneRescueMode() „Sone
+ * rescue mode“} is active).
+ *
+ * @param sone
+ * The Sone to fetch
+ * @param soneUri
+ * The URI to fetch the Sone from
+ */
+ public void fetchSone(Sone sone, FreenetURI soneUri) {
if (core.getSoneStatus(sone) == SoneStatus.downloading) {
return;
}
- logger.log(Level.FINE, "Starting fetch for Sone “%s” from %s…", new Object[] { sone, sone.getRequestUri().setMetaString(new String[] { "sone.xml" }) });
- FreenetURI requestUri = sone.getRequestUri().setMetaString(new String[] { "sone.xml" });
+ logger.log(Level.FINE, "Starting fetch for Sone “%s” from %s…", new Object[] { sone, soneUri });
+ FreenetURI requestUri = soneUri.setMetaString(new String[] { "sone.xml" });
core.setSoneStatus(sone, SoneStatus.downloading);
try {
Pair<FreenetURI, FetchResult> fetchResults = freenetInterface.fetchUri(requestUri);
soneInputStream = soneBucket.getInputStream();
Sone parsedSone = parseSone(originalSone, soneInputStream);
if (parsedSone != null) {
- parsedSone.setRequestUri(requestUri.setMetaString(new String[0]));
+ 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]));
+ }
}
return parsedSone;
} catch (IOException ioe1) {
} else {
for (SimpleXML postXml : postsXml.getNodes("post")) {
String postId = postXml.getValue("id", null);
+ String postRecipientId = postXml.getValue("recipient", null);
String postTime = postXml.getValue("time", null);
String postText = postXml.getValue("text", null);
if ((postId == null) || (postTime == null) || (postText == null)) {
return null;
}
try {
- posts.add(core.getPost(postId).setSone(sone).setTime(Long.parseLong(postTime)).setText(postText));
+ Post post = core.getPost(postId).setSone(sone).setTime(Long.parseLong(postTime)).setText(postText);
+ if ((postRecipientId != null) && (postRecipientId.length() == 43)) {
+ post.setRecipient(core.getSone(postRecipientId));
+ }
+ posts.add(post);
} catch (NumberFormatException nfe1) {
/* TODO - mark Sone as bad. */
logger.log(Level.WARNING, "Downloaded post for Sone %s with invalid time: %s", new Object[] { sone, postTime });
sone.setPosts(posts);
sone.setReplies(replies);
sone.setLikePostIds(likedPostIds);
+ sone.setLikeReplyIds(likedReplyIds);
}
return sone;