X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=7872c94cbc0eedbf19bbe227724544d561692f1e;hb=3491bcaaa2305f34e9d41750d288564628a14614;hp=0382c71be8a66a1d5fa4f5e9ccb2461c913a9239;hpb=c4e6a05d7ec117a4bc1605bba59f9ef798ec0b37;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 0382c71..7872c94 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -80,6 +80,9 @@ public class Core implements IdentityListener { /** The options. */ private final Options options = new Options(); + /** The core listener manager. */ + private final CoreListenerManager coreListenerManager = new CoreListenerManager(this); + /** The configuration. */ private final Configuration configuration; @@ -152,6 +155,30 @@ public class Core implements IdentityListener { } // + // LISTENER MANAGEMENT + // + + /** + * Adds a new core listener. + * + * @param coreListener + * The listener to add + */ + public void addCoreListener(CoreListener coreListener) { + coreListenerManager.addListener(coreListener); + } + + /** + * Removes a core listener. + * + * @param coreListener + * The listener to remove + */ + public void removeCoreListener(CoreListener coreListener) { + coreListenerManager.removeListener(coreListener); + } + + // // ACCESSORS // @@ -411,6 +438,9 @@ public class Core implements IdentityListener { synchronized (newSones) { boolean isNew = !knownSones.contains(sone.getId()) && newSones.remove(sone.getId()); knownSones.add(sone.getId()); + if (isNew) { + coreListenerManager.fireMarkSoneKnown(sone); + } return isNew; } } @@ -458,6 +488,9 @@ public class Core implements IdentityListener { synchronized (newPosts) { boolean isNew = !knownPosts.contains(postId) && newPosts.remove(postId); knownPosts.add(postId); + if (isNew) { + coreListenerManager.fireMarkPostKnown(getPost(postId)); + } return isNew; } } @@ -513,6 +546,9 @@ public class Core implements IdentityListener { synchronized (newReplies) { boolean isNew = !knownReplies.contains(replyId) && newReplies.remove(replyId); knownReplies.add(replyId); + if (isNew) { + coreListenerManager.fireMarkReplyKnown(getReply(replyId)); + } return isNew; } } @@ -652,7 +688,13 @@ public class Core implements IdentityListener { sone.setLatestEdition(Numbers.safeParseLong(identity.getProperty("Sone.LatestEdition"), (long) 0)); if (newSone) { synchronized (newSones) { - newSones.add(sone.getId()); + newSone = !knownSones.contains(sone.getId()); + if (newSone) { + newSones.add(sone.getId()); + } + } + if (newSone) { + coreListenerManager.fireNewSoneFound(sone); } } remoteSones.put(identity.getId(), sone); @@ -690,7 +732,7 @@ public class Core implements IdentityListener { } synchronized (newPosts) { for (Post post : sone.getPosts()) { - if (!storedSone.getPosts().contains(post) && !knownSones.contains(post.getId())) { + if (!storedSone.getPosts().contains(post) && !knownPosts.contains(post.getId())) { newPosts.add(post.getId()); } posts.put(post.getId(), post); @@ -703,7 +745,7 @@ public class Core implements IdentityListener { } synchronized (newReplies) { for (Reply reply : sone.getReplies()) { - if (!storedSone.getReplies().contains(reply) && !knownSones.contains(reply.getId())) { + if (!storedSone.getReplies().contains(reply) && !knownReplies.contains(reply.getId())) { newReplies.add(reply.getId()); } replies.put(reply.getId(), reply); @@ -712,6 +754,7 @@ public class Core implements IdentityListener { } synchronized (storedSone) { storedSone.setTime(sone.getTime()); + storedSone.setClient(sone.getClient()); storedSone.setProfile(sone.getProfile()); storedSone.setPosts(sone.getPosts()); storedSone.setReplies(sone.getReplies());