Filter notifications that the user is not interested in.
[Sone.git] / src / main / java / net / pterodactylus / sone / notify / ListNotificationFilters.java
index 3db8912..7175519 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.List;
 
 import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.PostReply;
 import net.pterodactylus.sone.data.Reply;
 import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
@@ -54,13 +55,15 @@ public class ListNotificationFilters {
        public static List<Notification> filterNotifications(Collection<? extends Notification> notifications, Sone currentSone) {
                List<Notification> filteredNotifications = new ArrayList<Notification>();
                for (Notification notification : notifications) {
-                       if (notification.getId().equals("new-post-notification")) {
+                       if (notification.getId().equals("new-sone-notification") && ((currentSone == null) || (currentSone.getOptions().getBooleanOption("ShowNotification/NewSones").get()))) {
+                               filteredNotifications.add(notification);
+                       } else if (notification.getId().equals("new-post-notification") && ((currentSone == null) || (currentSone.getOptions().getBooleanOption("ShowNotification/NewPosts").get()))) {
                                ListNotification<Post> filteredNotification = filterNewPostNotification((ListNotification<Post>) notification, currentSone, true);
                                if (filteredNotification != null) {
                                        filteredNotifications.add(filteredNotification);
                                }
-                       } else if (notification.getId().equals("new-reply-notification")) {
-                               ListNotification<Reply> filteredNotification = filterNewReplyNotification((ListNotification<Reply>) notification, currentSone);
+                       } else if (notification.getId().equals("new-reply-notification") && ((currentSone == null) || (currentSone.getOptions().getBooleanOption("ShowNotification/NewReplies").get()))) {
+                               ListNotification<PostReply> filteredNotification = filterNewReplyNotification((ListNotification<PostReply>) notification, currentSone);
                                if (filteredNotification != null) {
                                        filteredNotifications.add(filteredNotification);
                                }
@@ -129,12 +132,12 @@ public class ListNotificationFilters {
         * @return The filtered new-reply notification, or {@code null} if the
         *         notification should be removed
         */
-       public static ListNotification<Reply> filterNewReplyNotification(ListNotification<Reply> newReplyNotification, Sone currentSone) {
+       public static ListNotification<PostReply> filterNewReplyNotification(ListNotification<PostReply> newReplyNotification, Sone currentSone) {
                if (currentSone == null) {
                        return null;
                }
-               List<Reply> newReplies = new ArrayList<Reply>();
-               for (Reply reply : newReplyNotification.getElements()) {
+               List<PostReply> newReplies = new ArrayList<PostReply>();
+               for (PostReply reply : newReplyNotification.getElements()) {
                        if (isReplyVisible(currentSone, reply)) {
                                newReplies.add(reply);
                        }
@@ -145,7 +148,7 @@ public class ListNotificationFilters {
                if (newReplies.size() == newReplyNotification.getElements().size()) {
                        return newReplyNotification;
                }
-               ListNotification<Reply> filteredNotification = new ListNotification<Reply>(newReplyNotification);
+               ListNotification<PostReply> filteredNotification = new ListNotification<PostReply>(newReplyNotification);
                filteredNotification.setElements(newReplies);
                filteredNotification.setLastUpdateTime(newReplyNotification.getLastUpdatedTime());
                return filteredNotification;
@@ -237,7 +240,7 @@ public class ListNotificationFilters {
         * @return {@code true} if the reply is considered visible, {@code false}
         *         otherwise
         */
-       public static boolean isReplyVisible(Sone sone, Reply reply) {
+       public static boolean isReplyVisible(Sone sone, PostReply reply) {
                Validation.begin().isNotNull("Reply", reply).check();
                Post post = reply.getPost();
                if (post == null) {