X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=4c08651f1ca5a9c02c6f8af991fbef1e89ed58a7;hb=5b6767cdd9eece7d2a08f52016b3e35340d1f22f;hp=5a80f3154529682e65e85a9e96852ba9461af59b;hpb=abe29a1d19532ea1c13024cf78c5faf388287faf;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 5a80f31..4c08651 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -44,7 +44,6 @@ import net.pterodactylus.sone.main.SonePlugin; import net.pterodactylus.util.config.Configuration; import net.pterodactylus.util.config.ConfigurationException; import net.pterodactylus.util.logging.Logging; -import net.pterodactylus.util.notify.NotificationManager; import net.pterodactylus.util.number.Numbers; import freenet.keys.FreenetURI; @@ -81,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; @@ -90,9 +92,6 @@ public class Core implements IdentityListener { /** Interface to freenet. */ private final FreenetInterface freenetInterface; - /** The notification manager. */ - private final NotificationManager notificationManager = new NotificationManager(); - /** The Sone downloader. */ private final SoneDownloader soneDownloader; @@ -156,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 // @@ -178,15 +201,6 @@ public class Core implements IdentityListener { } /** - * Returns the notification manager. - * - * @return The notification manager - */ - public NotificationManager getNotifications() { - return notificationManager; - } - - /** * Returns the status of the given Sone. * * @param sone @@ -424,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; } } @@ -471,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; } } @@ -526,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; } } @@ -665,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);