+ * Loads and updates the given Sone.
+ *
+ * @param sone
+ * The Sone to load
+ */
+ public void loadSone(final Sone sone) {
+ new Thread(new Runnable() {
+
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public void run() {
+ FreenetURI realRequestUri = sone.getRequestUri().setMetaString(new String[] { "sone.xml" });
+ setSoneStatus(sone, SoneStatus.downloading);
+ try {
+ FetchResult fetchResult = freenetInterface.fetchUri(realRequestUri);
+ if (fetchResult == null) {
+ /* TODO - mark Sone as bad. */
+ return;
+ }
+ Sone parsedSone = soneDownloader.parseSone(sone, fetchResult, realRequestUri);
+ if (parsedSone != null) {
+ addSone(parsedSone);
+ }
+ } finally {
+ setSoneStatus(sone, (sone.getTime() == 0) ? SoneStatus.unknown : SoneStatus.idle);
+ }
+ }
+ }, "Sone Downloader").start();
+ }
+
+ /**