import net.pterodactylus.sone.data.Sone;
import net.pterodactylus.util.config.Configuration;
import net.pterodactylus.util.config.ConfigurationException;
+import net.pterodactylus.util.filter.Filter;
+import net.pterodactylus.util.filter.Filters;
import net.pterodactylus.util.logging.Logging;
import net.pterodactylus.util.service.AbstractService;
import freenet.client.FetchResult;
}
/**
- * Creates a new post.
+ * Gets all known Sones that are not local Sones.
+ *
+ * @return All remote Sones
+ */
+ public Collection<Sone> getRemoteSones() {
+ return Filters.filteredCollection(getKnownSones(), new Filter<Sone>() {
+
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public boolean filterObject(Sone object) {
+ return !localSones.contains(object);
+ }
+ });
+ }
+
+ /**
+ * Creates a new post and adds it to the given Sone.
*
* @param sone
* The sone that creates the post
}
/**
- * Creates a new post.
+ * Creates a new post and adds it to the given Sone.
*
* @param sone
* The Sone that creates the post
*/
public void addSone(Sone sone) {
soneCache.put(sone.getId(), sone);
- soneDownloader.addSone(sone);
+ if (!localSones.contains(sone)) {
+ soneDownloader.addSone(sone);
+ }
}
/**
}
/**
- * Loads the Sone from the given request URI.
+ * Loads the Sone from the given request URI. The fetching of the data is
+ * performed in a new thread so this method returns immediately.
*
* @param requestUri
* The request URI to load the Sone from
*/
- public void loadSone(String requestUri) {
- try {
- FetchResult fetchResult = freenetInterface.fetchUri(new FreenetURI(requestUri).setMetaString(new String[] { "sone.xml" }));
- soneDownloader.parseSone(null, fetchResult);
- } catch (MalformedURLException mue1) {
- logger.log(Level.INFO, "Could not create URI from “" + requestUri + "”.", mue1);
- }
+ 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();
}
/**
String friendKey = configuration.getStringValue(friendPrefix + "/Key").getValue(null);
String friendName = configuration.getStringValue(friendPrefix + "/Name").getValue(null);
friendSone.setRequestUri(new FreenetURI(friendKey)).setName(friendName);
- soneDownloader.addSone(friendSone);
+ loadSone(friendKey);
sone.addFriend(friendSone);
}