From 29daf9b1a853061c245c6225e5e5ea8f553c87a7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Wed, 8 Jun 2011 13:23:36 +0200 Subject: [PATCH] =?utf8?q?Add=20=E2=80=9Cyou=20have=20been=20mentioned?= =?utf8?q?=E2=80=9D=20notification.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../net/pterodactylus/sone/web/WebInterface.java | 33 ++++++++++++++++++++++ src/main/resources/i18n/sone.en.properties | 2 ++ .../templates/notify/mentionNotification.html | 11 ++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/main/resources/templates/notify/mentionNotification.html diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index b174d66..1e04105 100644 --- a/src/main/java/net/pterodactylus/sone/web/WebInterface.java +++ b/src/main/java/net/pterodactylus/sone/web/WebInterface.java @@ -17,6 +17,7 @@ package net.pterodactylus.sone.web; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; @@ -58,6 +59,8 @@ import net.pterodactylus.sone.template.SoneAccessor; import net.pterodactylus.sone.template.SubstringFilter; import net.pterodactylus.sone.template.TrustAccessor; import net.pterodactylus.sone.template.UnknownDateFilter; +import net.pterodactylus.sone.text.Part; +import net.pterodactylus.sone.text.SonePart; import net.pterodactylus.sone.text.SoneTextParser; import net.pterodactylus.sone.web.ajax.BookmarkAjaxPage; import net.pterodactylus.sone.web.ajax.CreatePostAjaxPage; @@ -97,6 +100,7 @@ import net.pterodactylus.util.cache.CacheItem; import net.pterodactylus.util.cache.DefaultCacheItem; import net.pterodactylus.util.cache.MemoryCache; import net.pterodactylus.util.cache.ValueRetriever; +import net.pterodactylus.util.filter.Filters; import net.pterodactylus.util.logging.Logging; import net.pterodactylus.util.notify.Notification; import net.pterodactylus.util.notify.NotificationManager; @@ -164,6 +168,9 @@ public class WebInterface implements CoreListener { /** The “new reply” notification. */ private final ListNotification newReplyNotification; + /** The “you have been mentioned” notification. */ + private final ListNotification mentionNotification; + /** The “rescuing Sone” notification. */ private final ListNotification rescuingSonesNotification; @@ -232,6 +239,9 @@ public class WebInterface implements CoreListener { Template newReplyNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newReplyNotification.html")); newReplyNotification = new ListNotification("new-reply-notification", "replies", newReplyNotificationTemplate, false); + Template mentionNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/mentionNotification.html")); + mentionNotification = new ListNotification("mention-notification", "posts", mentionNotificationTemplate, false); + Template rescuingSonesTemplate = TemplateParser.parse(createReader("/templates/notify/rescuingSonesNotification.html")); rescuingSonesNotification = new ListNotification("sones-being-rescued-notification", "sones", rescuingSonesTemplate); @@ -658,6 +668,21 @@ public class WebInterface implements CoreListener { } } + private Set getMentionedSones(String text) { + /* we need no context to find mentioned Sones. */ + Set mentionedSones = new HashSet(); + try { + for (Part part : soneTextParser.parse(null, new StringReader(text))) { + if (part instanceof SonePart) { + mentionedSones.add(((SonePart) part).getSone()); + } + } + } catch (IOException ioe1) { + logger.log(Level.WARNING, "Could not parse post text: " + text, ioe1); + } + return Filters.filteredSet(mentionedSones, Sone.LOCAL_SONE_FILTER); + } + // // CORELISTENER METHODS // @@ -700,6 +725,9 @@ public class WebInterface implements CoreListener { newPostNotification.add(post); if (!hasFirstStartNotification()) { notificationManager.addNotification(newPostNotification); + if (!getMentionedSones(post.getText()).isEmpty()) { + mentionNotification.add(post); + } } else { getCore().markPostKnown(post); } @@ -716,6 +744,9 @@ public class WebInterface implements CoreListener { newReplyNotification.add(reply); if (!hasFirstStartNotification()) { notificationManager.addNotification(newReplyNotification); + if (!getMentionedSones(reply.getText()).isEmpty()) { + mentionNotification.add(reply.getPost()); + } } else { getCore().markReplyKnown(reply); } @@ -735,6 +766,7 @@ public class WebInterface implements CoreListener { @Override public void markPostKnown(Post post) { newPostNotification.remove(post); + mentionNotification.remove(post); } /** @@ -743,6 +775,7 @@ public class WebInterface implements CoreListener { @Override public void markReplyKnown(Reply reply) { newReplyNotification.remove(reply); + mentionNotification.remove(reply.getPost()); } /** diff --git a/src/main/resources/i18n/sone.en.properties b/src/main/resources/i18n/sone.en.properties index de9d317..3610afc 100644 --- a/src/main/resources/i18n/sone.en.properties +++ b/src/main/resources/i18n/sone.en.properties @@ -312,3 +312,5 @@ Notification.SoneRescued.Text=The following Sones have been rescued: Notification.SoneRescued.Text.RememberToUnlock=Please remember to control the posts and replies you have given and don’t forget to unlock your Sones! Notification.LockedSones.Text=The following Sones have been locked for more than 5 minutes. Please check if you really want to keep these Sones locked: Notification.NewVersion.Text=Version {version} of the Sone plugin was found. Download it from USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/{edition}​! +Notification.Mention.ShortText=You have been mentioned. +Notification.Mention.Text=You have been mentioned in the following posts: diff --git a/src/main/resources/templates/notify/mentionNotification.html b/src/main/resources/templates/notify/mentionNotification.html new file mode 100644 index 0000000..087fc2e --- /dev/null +++ b/src/main/resources/templates/notify/mentionNotification.html @@ -0,0 +1,11 @@ + +
+ <%= Notification.Mention.Text|l10n|html> + <%foreach posts post> + + <% post.sone.niceName|html><%notlast>,<%/notlast><%last>.<%/last> + <%/foreach> +
-- 2.7.4