/** Interface to freenet. */
private FreenetInterface freenetInterface;
+ /** The Sone downloader. */
+ private SoneDownloader soneDownloader;
+
/** The local Sones. */
private final Set<Sone> localSones = new HashSet<Sone>();
*/
public Core freenetInterface(FreenetInterface freenetInterface) {
this.freenetInterface = freenetInterface;
+ soneDownloader = new SoneDownloader(freenetInterface);
return this;
}
soneCache.put(sone.getId(), sone);
SoneInserter soneInserter = new SoneInserter(freenetInterface, sone);
soneInserter.start();
+ soneDownloader.addSone(sone);
soneInserters.put(sone, soneInserter);
}
}
/**
+ * Adds a remote Sone so that it is watched for updates.
+ *
+ * @param sone
+ * The sone to watch
+ */
+ public void addRemoteSone(Sone sone) {
+ Sone updatedSone = soneCache.put(sone.getId(), sone);
+ soneDownloader.addSone(updatedSone);
+ }
+
+ /**
* Creates a new Sone at a random location.
*
* @param name
Sone sone;
try {
logger.log(Level.FINEST, "Creating new Sone “%s” at %s (%s)…", new Object[] { name, finalRequestUri, finalInsertUri });
- sone = new Sone(UUID.randomUUID(), name, new FreenetURI(finalRequestUri).setKeyType("USK"), new FreenetURI(finalInsertUri).setKeyType("USK"));
+ sone = new Sone(UUID.randomUUID(), name, new FreenetURI(finalRequestUri).setKeyType("USK").setDocName("Sone-" + name), new FreenetURI(finalInsertUri).setKeyType("USK").setDocName("Sone-" + name));
sone.setProfile(new Profile());
/* set modification counter to 1 so it is inserted immediately. */
sone.setModificationCounter(1);
*/
@Override
protected void serviceStop() {
+ soneDownloader.stop();
/* stop all Sone inserters. */
for (SoneInserter soneInserter : soneInserters.values()) {
soneInserter.stop();
Reply reply = new ReplyShell().setSone(replySone).setPost(replyPost).setTime(replyTime).setText(replyText).getShelled();
replyCache.put(replyId, reply);
} while (true);
+
+ /* load friends. */
+ int friendCounter = 0;
+ while (true) {
+ String friendPrefix = sonePrefix + "/Friend." + friendCounter++;
+ String friendId = configuration.getStringValue(friendPrefix + "/ID").getValue(null);
+ if (friendId == null) {
+ break;
+ }
+ Sone friendSone = soneCache.get(friendId);
+ if (friendSone instanceof SoneShell) {
+ String friendKey = configuration.getStringValue(friendPrefix + "/Key").getValue(null);
+ String friendName = configuration.getStringValue(friendPrefix + "/Name").getValue(null);
+ ((SoneShell) friendSone).setRequestUri(new FreenetURI(friendKey)).setName(friendName);
+ }
+ addRemoteSone(friendSone);
+ sone.addFriend(sone);
+ }
+
sone.setModificationCounter(modificationCounter);
addSone(sone);
} catch (MalformedURLException mue1) {
}
/* write null ID as terminator. */
configuration.getStringValue(sonePrefix + "/Reply." + replyId + "/ID").setValue(null);
+
+ int friendId = 0;
+ for (Sone friend : sone.getFriends()) {
+ String friendPrefix = sonePrefix + "/Friend." + friendId++;
+ configuration.getStringValue(friendPrefix + "/ID").setValue(friend.getId());
+ configuration.getStringValue(friendPrefix + "/Key").setValue(friend.getRequestUri().toString());
+ configuration.getStringValue(friendPrefix + "/Name").setValue(friend.getName());
+ }
+ /* write null ID as terminator. */
+ configuration.getStringValue(sonePrefix + "/Friend." + friendId + "/ID").setValue(null);
+
}
/* write null ID as terminator. */
configuration.getStringValue("Sone/Sone." + soneId + "/ID").setValue(null);