🚧 Add handler for marking replies as known during first start
[Sone.git] / src / main / java / net / pterodactylus / sone / web / WebInterface.java
index dc25dd4..ea357d2 100644 (file)
@@ -22,13 +22,10 @@ import static java.util.logging.Logger.getLogger;
 
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
 import java.util.UUID;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
 import java.util.logging.Logger;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -55,9 +52,6 @@ import net.pterodactylus.sone.template.LinkedElementRenderFilter;
 import net.pterodactylus.sone.template.ParserFilter;
 import net.pterodactylus.sone.template.RenderFilter;
 import net.pterodactylus.sone.template.ShortenFilter;
-import net.pterodactylus.sone.text.Part;
-import net.pterodactylus.sone.text.SonePart;
-import net.pterodactylus.sone.text.SoneTextParser;
 import net.pterodactylus.sone.text.TimeTextConverter;
 import net.pterodactylus.sone.web.ajax.BookmarkAjaxPage;
 import net.pterodactylus.sone.web.ajax.CreatePostAjaxPage;
@@ -103,7 +97,6 @@ import freenet.clients.http.ToadletContext;
 
 import com.codahale.metrics.*;
 import com.google.common.base.Optional;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
@@ -133,9 +126,6 @@ public class WebInterface implements SessionProvider {
        private final TemplateContextFactory templateContextFactory;
        private final TemplateRenderer templateRenderer;
 
-       /** The Sone text parser. */
-       private final SoneTextParser soneTextParser;
-
        /** The parser filter. */
        private final ParserFilter parserFilter;
        private final ShortenFilter shortenFilter;
@@ -166,15 +156,9 @@ public class WebInterface implements SessionProvider {
        /** The invisible â€ślocal reply” notification. */
        private final ListNotification<PostReply> localReplyNotification;
 
-       /** The â€śyou have been mentioned” notification. */
-       private final ListNotification<Post> mentionNotification;
-
        /** Notifications for sone inserts. */
        private final Map<Sone, TemplateNotification> soneInsertNotifications = new HashMap<>();
 
-       /** Scheduled executor for time-based notifications. */
-       private final ScheduledExecutorService ticker = Executors.newScheduledThreadPool(1);
-
        @Inject
        public WebInterface(SonePlugin sonePlugin, Loaders loaders, ListNotificationFilter listNotificationFilter,
                        PostVisibilityFilter postVisibilityFilter, ReplyVisibilityFilter replyVisibilityFilter,
@@ -205,7 +189,6 @@ public class WebInterface implements SessionProvider {
                this.newPostNotification = newPostNotification;
                this.localPostNotification = localPostNotification;
                formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword();
-               soneTextParser = new SoneTextParser(getCore(), getCore());
 
                this.templateContextFactory = templateContextFactory;
                templateContextFactory.addTemplateObject("webInterface", this);
@@ -217,9 +200,6 @@ public class WebInterface implements SessionProvider {
 
                Template localReplyNotificationTemplate = loaders.loadTemplate("/templates/notify/newReplyNotification.html");
                localReplyNotification = new ListNotification<>("local-reply-notification", "replies", localReplyNotificationTemplate, false);
-
-               Template mentionNotificationTemplate = loaders.loadTemplate("/templates/notify/mentionNotification.html");
-               mentionNotification = new ListNotification<>("mention-notification", "posts", mentionNotificationTemplate, false);
        }
 
        //
@@ -415,7 +395,6 @@ public class WebInterface implements SessionProvider {
         */
        public void stop() {
                pageToadletRegistry.unregisterToadlets();
-               ticker.shutdownNow();
        }
 
        //
@@ -512,26 +491,6 @@ public class WebInterface implements SessionProvider {
        }
 
        /**
-        * Returns all {@link Sone#isLocal() local Sone}s that are referenced by
-        * {@link SonePart}s in the given text (after parsing it using
-        * {@link SoneTextParser}).
-        *
-        * @param text
-        *            The text to parse
-        * @return All mentioned local Sones
-        */
-       private Collection<Sone> getMentionedSones(String text) {
-               /* we need no context to find mentioned Sones. */
-               Set<Sone> mentionedSones = new HashSet<>();
-               for (Part part : soneTextParser.parse(text, null)) {
-                       if (part instanceof SonePart) {
-                               mentionedSones.add(((SonePart) part).getSone());
-                       }
-               }
-               return Collections2.filter(mentionedSones, Sone.LOCAL_SONE_FILTER);
-       }
-
-       /**
         * Returns the Sone insert notification for the given Sone. If no
         * notification for the given Sone exists, a new notification is created and
         * cached.
@@ -552,46 +511,11 @@ public class WebInterface implements SessionProvider {
                }
        }
 
-       private boolean localSoneMentionedInNewPostOrReply(Post post) {
-               if (!post.getSone().isLocal()) {
-                       if (!getMentionedSones(post.getText()).isEmpty() && !post.isKnown()) {
-                               return true;
-                       }
-               }
-               for (PostReply postReply : getCore().getReplies(post.getId())) {
-                       if (postReply.getSone().isLocal()) {
-                               continue;
-                       }
-                       if (!getMentionedSones(postReply.getText()).isEmpty() && !postReply.isKnown()) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
        //
        // EVENT HANDLERS
        //
 
        /**
-        * Notifies the web interface that a new {@link Post} was found.
-        *
-        * @param newPostFoundEvent
-        *            The event
-        */
-       @Subscribe
-       public void newPostFound(NewPostFoundEvent newPostFoundEvent) {
-               Post post = newPostFoundEvent.getPost();
-               boolean isLocal = post.getSone().isLocal();
-               if (!hasFirstStartNotification()) {
-                       if (!getMentionedSones(post.getText()).isEmpty() && !isLocal) {
-                               mentionNotification.add(post);
-                               notificationManager.addNotification(mentionNotification);
-                       }
-               }
-       }
-
-       /**
         * Notifies the web interface that a new {@link PostReply} was found.
         *
         * @param newPostReplyFoundEvent
@@ -608,12 +532,6 @@ public class WebInterface implements SessionProvider {
                }
                if (!hasFirstStartNotification()) {
                        notificationManager.addNotification(isLocal ? localReplyNotification : newReplyNotification);
-                       if (reply.getPost().isPresent() && localSoneMentionedInNewPostOrReply(reply.getPost().get())) {
-                               mentionNotification.add(reply.getPost().get());
-                               notificationManager.addNotification(mentionNotification);
-                       }
-               } else {
-                       getCore().markReplyKnown(reply);
                }
        }
 
@@ -634,9 +552,6 @@ public class WebInterface implements SessionProvider {
 
        private void removePost(Post post) {
                newPostNotification.remove(post);
-               if (!localSoneMentionedInNewPostOrReply(post)) {
-                       mentionNotification.remove(post);
-               }
        }
 
        @Subscribe
@@ -647,9 +562,6 @@ public class WebInterface implements SessionProvider {
        private void removeReply(PostReply reply) {
                newReplyNotification.remove(reply);
                localReplyNotification.remove(reply);
-               if (reply.getPost().isPresent() && !localSoneMentionedInNewPostOrReply(reply.getPost().get())) {
-                       mentionNotification.remove(reply.getPost().get());
-               }
        }
 
        /**