import java.net.MalformedURLException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import net.pterodactylus.util.config.ConfigurationException;
import net.pterodactylus.util.logging.Logging;
import net.pterodactylus.util.service.AbstractService;
+import freenet.client.FetchResult;
import freenet.keys.FreenetURI;
/**
}
/**
+ * Returns all known sones.
+ *
+ * @return All known sones
+ */
+ public Collection<Sone> getKnownSones() {
+ return soneCache.values();
+ }
+
+ /**
* Creates a new post.
*
* @param sone
return post;
}
+ /**
+ * Creates a reply.
+ *
+ * @param sone
+ * The Sone that posts the reply
+ * @param post
+ * The post the reply refers to
+ * @param text
+ * The text of the reply
+ * @return The created reply
+ */
+ public Reply createReply(Sone sone, Post post, String text) {
+ return createReply(sone, post, System.currentTimeMillis(), text);
+ }
+
+ /**
+ * Creates a reply.
+ *
+ * @param sone
+ * The Sone that posts the reply
+ * @param post
+ * The post the reply refers to
+ * @param time
+ * The time of the post
+ * @param text
+ * The text of the reply
+ * @return The created reply
+ */
+ public Reply createReply(Sone sone, Post post, long time, String text) {
+ Reply reply = getReply(UUID.randomUUID().toString()).setSone(sone).setPost(post).setTime(time).setText(text);
+ sone.addReply(reply);
+ return reply;
+ }
+
//
// ACTIONS
//
/**
+ * Adds a Sone to watch for updates. The Sone needs to be completely
+ * initialized.
+ *
+ * @param sone
+ * The Sone to watch for updates
+ */
+ public void addSone(Sone sone) {
+ soneCache.put(sone.getId(), sone);
+ soneDownloader.addSone(sone);
+ }
+
+ /**
* Adds the given Sone.
*
* @param sone
if (localSones.add(sone)) {
SoneInserter soneInserter = new SoneInserter(freenetInterface, sone);
soneInserter.start();
- soneDownloader.addSone(sone);
soneInserters.put(sone, soneInserter);
}
}
}
/**
+ * Loads the Sone from the given request URI.
+ *
+ * @param requestUri
+ * The request URI to load the Sone from
+ */
+ public void loadSone(final String requestUri) {
+ new Thread(new Runnable() {
+
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public void run() {
+ try {
+ FreenetURI realRequestUri = new FreenetURI(requestUri).setMetaString(new String[] { "sone.xml" });
+ FetchResult fetchResult = freenetInterface.fetchUri(realRequestUri);
+ Sone parsedSone = soneDownloader.parseSone(null, fetchResult, realRequestUri);
+ if (parsedSone != null) {
+ addSone(parsedSone);
+ }
+ } catch (MalformedURLException mue1) {
+ logger.log(Level.INFO, "Could not create URI from “" + requestUri + "”.", mue1);
+ }
+ }
+ }, "Sone Downloader").start();
+ }
+
+ /**
* Deletes the given Sone from this plugin instance.
*
* @param sone