import net.pterodactylus.sone.freenet.wot.IdentityListener;
import net.pterodactylus.sone.freenet.wot.IdentityManager;
import net.pterodactylus.sone.freenet.wot.OwnIdentity;
+import net.pterodactylus.sone.freenet.wot.WebOfTrustException;
import net.pterodactylus.sone.main.SonePlugin;
import net.pterodactylus.util.config.Configuration;
import net.pterodactylus.util.config.ConfigurationException;
synchronized (newPosts) {
boolean isNew = !knownPosts.contains(postId) && newPosts.contains(postId);
if (markAsKnown) {
- newPosts.remove(postId);
- knownPosts.add(postId);
- if (isNew) {
- coreListenerManager.fireMarkPostKnown(getPost(postId));
+ Post post = getPost(postId, false);
+ if (post != null) {
+ markPostKnown(post);
}
}
return isNew;
synchronized (newReplies) {
boolean isNew = !knownReplies.contains(replyId) && newReplies.contains(replyId);
if (markAsKnown) {
- newReplies.remove(replyId);
- knownReplies.add(replyId);
- if (isNew) {
- coreListenerManager.fireMarkReplyKnown(getReply(replyId));
+ Reply reply = getReply(replyId, false);
+ if (reply != null) {
+ markReplyKnown(reply);
}
}
return isNew;
* @return The created Sone
*/
public Sone createSone(OwnIdentity ownIdentity) {
- identityManager.addContext(ownIdentity, "Sone");
+ try {
+ ownIdentity.addContext("Sone");
+ } catch (WebOfTrustException wote1) {
+ logger.log(Level.SEVERE, "Could not add “Sone” context to own identity: " + ownIdentity, wote1);
+ return null;
+ }
Sone sone = addLocalSone(ownIdentity);
return sone;
}
if (!soneRescueMode) {
for (Post post : storedSone.getPosts()) {
posts.remove(post.getId());
+ if (!sone.getPosts().contains(post)) {
+ coreListenerManager.firePostRemoved(post);
+ }
}
}
synchronized (newPosts) {
if (!soneRescueMode) {
for (Reply reply : storedSone.getReplies()) {
replies.remove(reply.getId());
+ if (!sone.getReplies().contains(reply)) {
+ coreListenerManager.fireReplyRemoved(reply);
+ }
}
}
synchronized (newReplies) {
localSones.remove(sone.getId());
soneInserters.remove(sone).stop();
}
- identityManager.removeContext((OwnIdentity) sone.getIdentity(), "Sone");
- identityManager.removeProperty((OwnIdentity) sone.getIdentity(), "Sone.LatestEdition");
+ try {
+ ((OwnIdentity) sone.getIdentity()).removeContext("Sone");
+ ((OwnIdentity) sone.getIdentity()).removeProperty("Sone.LatestEdition");
+ } catch (WebOfTrustException wote1) {
+ logger.log(Level.WARNING, "Could not remove context and properties from Sone: " + sone, wote1);
+ }
try {
configuration.getLongValue("Sone/" + sone.getId() + "/Time").setValue(null);
} catch (ConfigurationException ce1) {
}
logger.log(Level.INFO, "Saving Sone: %s", sone);
- identityManager.setProperty((OwnIdentity) sone.getIdentity(), "Sone.LatestEdition", String.valueOf(sone.getLatestEdition()));
try {
+ ((OwnIdentity) sone.getIdentity()).setProperty("Sone.LatestEdition", String.valueOf(sone.getLatestEdition()));
+
/* save Sone into configuration. */
String sonePrefix = "Sone/" + sone.getId();
configuration.getLongValue(sonePrefix + "/Time").setValue(sone.getTime());
for (Post post : sone.getPosts()) {
String postPrefix = sonePrefix + "/Posts/" + postCounter++;
configuration.getStringValue(postPrefix + "/ID").setValue(post.getId());
- if (post.getRecipient() != null) {
- configuration.getStringValue(postPrefix + "/Recipient").setValue(post.getRecipient().getId());
- }
+ configuration.getStringValue(postPrefix + "/Recipient").setValue((post.getRecipient() != null) ? post.getRecipient().getId() : null);
configuration.getLongValue(postPrefix + "/Time").setValue(post.getTime());
configuration.getStringValue(postPrefix + "/Text").setValue(post.getText());
}
logger.log(Level.INFO, "Sone %s saved.", sone);
} catch (ConfigurationException ce1) {
logger.log(Level.WARNING, "Could not save Sone: " + sone, ce1);
+ } catch (WebOfTrustException wote1) {
+ logger.log(Level.WARNING, "Could not set WoT property for Sone: " + sone, wote1);
}
}
* @return The created post
*/
public Post createPost(Sone sone, long time, String text) {
+ return createPost(sone, null, time, text);
+ }
+
+ /**
+ * Creates a new post.
+ *
+ * @param sone
+ * The Sone that creates the post
+ * @param recipient
+ * The recipient Sone, or {@code null} if this post does not have
+ * a recipient
+ * @param text
+ * The text of the post
+ * @return The created post
+ */
+ public Post createPost(Sone sone, Sone recipient, String text) {
+ return createPost(sone, recipient, System.currentTimeMillis(), text);
+ }
+
+ /**
+ * Creates a new post.
+ *
+ * @param sone
+ * The Sone that creates the post
+ * @param recipient
+ * The recipient Sone, or {@code null} if this post does not have
+ * a recipient
+ * @param time
+ * The time of the post
+ * @param text
+ * The text of the post
+ * @return The created post
+ */
+ public Post createPost(Sone sone, Sone recipient, long time, String text) {
if (!isLocalSone(sone)) {
logger.log(Level.FINE, "Tried to create post for non-local Sone: %s", sone);
return null;
}
Post post = new Post(sone, time, text);
+ if (recipient != null) {
+ post.setRecipient(recipient);
+ }
synchronized (posts) {
posts.put(post.getId(), post);
}
* {@inheritDoc}
*/
@Override
- public void identityAdded(Identity identity) {
+ public void identityAdded(OwnIdentity ownIdentity, Identity identity) {
logger.log(Level.FINEST, "Adding Identity: " + identity);
addRemoteSone(identity);
}
* {@inheritDoc}
*/
@Override
- public void identityUpdated(final Identity identity) {
+ public void identityUpdated(OwnIdentity ownIdentity, final Identity identity) {
new Thread(new Runnable() {
@Override
* {@inheritDoc}
*/
@Override
- public void identityRemoved(Identity identity) {
+ public void identityRemoved(OwnIdentity ownIdentity, Identity identity) {
/* TODO */
}