X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=a4b3569846e9438f1b762a63d2a5f6790a5ad8b6;hb=c8f518f638aa16cf37145561b709d28252de213a;hp=0f733b6e458a2f240e01df782990344675941639;hpb=21c4819261de874652e7c8be37bde5923758cf4b;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 0f733b6..a4b3569 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -91,7 +91,7 @@ public class Core extends AbstractService { private final Map soneInserters = new HashMap(); /** The Sones’ statuses. */ - private final Map soneStatuses = new HashMap(); + private final Map soneStatuses = Collections.synchronizedMap(new HashMap()); /* various caches follow here. */ @@ -108,7 +108,7 @@ public class Core extends AbstractService { * Creates a new core. */ public Core() { - super("Sone Core"); + super("Sone Core", false); } // @@ -522,6 +522,35 @@ public class Core extends AbstractService { return replies; } + /** + * Gets all Sones that like the given post. + * + * @param post + * The post to check for + * @return All Sones that like the post + */ + public Set getLikes(final Post post) { + return Filters.filteredSet(getSones(), new Filter() { + + @Override + public boolean filterObject(Sone sone) { + return sone.isLikedPostId(post.getId()); + } + }); + } + + /** + * Deletes the given reply. It is removed from its Sone and from the reply + * cache. + * + * @param reply + * The reply to remove + */ + public void deleteReply(Reply reply) { + reply.getSone().removeReply(reply); + replyCache.remove(reply.getId()); + } + // // SERVICE METHODS // @@ -633,6 +662,17 @@ public class Core extends AbstractService { sone.addBlockedSoneId(blockedSoneId); } + /* load liked post IDs. */ + int likedPostIdCounter = 0; + while (true) { + String likedPostIdPrefix = sonePrefix + "/LikedPostId." + likedPostIdCounter++; + String likedPostId = configuration.getStringValue(likedPostIdPrefix + "/ID").getValue(null); + if (likedPostId == null) { + break; + } + sone.addLikedPostId(likedPostId); + } + sone.setModificationCounter(modificationCounter); addLocalSone(sone); } catch (MalformedURLException mue1) { @@ -726,6 +766,14 @@ public class Core extends AbstractService { } configuration.getStringValue(sonePrefix + "/BlockedSone." + blockedSoneCounter + "/ID").setValue(null); + /* write all liked posts. */ + int likedPostIdCounter = 0; + for (String soneLikedPostId : sone.getLikedPostIds()) { + String likedPostIdPrefix = sonePrefix + "/LikedPostId." + likedPostIdCounter++; + configuration.getStringValue(likedPostIdPrefix + "/ID").setValue(soneLikedPostId); + } + configuration.getStringValue(sonePrefix + "/LikedPostId." + likedPostIdCounter + "/ID").setValue(null); + } /* write null ID as terminator. */ configuration.getStringValue("Sone/Sone." + soneId + "/ID").setValue(null);