import static java.util.logging.Logger.getLogger;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import net.pterodactylus.sone.web.pages.*;
import net.pterodactylus.util.notify.Notification;
import net.pterodactylus.util.notify.NotificationManager;
-import net.pterodactylus.util.notify.TemplateNotification;
import net.pterodactylus.util.template.Template;
import net.pterodactylus.util.template.TemplateContextFactory;
import net.pterodactylus.util.web.RedirectPage;
/** The invisible “local reply” notification. */
private final ListNotification<PostReply> localReplyNotification;
- /** Notifications for sone inserts. */
- private final Map<Sone, TemplateNotification> soneInsertNotifications = new HashMap<>();
-
@Inject
public WebInterface(SonePlugin sonePlugin, Loaders loaders, ListNotificationFilter listNotificationFilter,
PostVisibilityFilter postVisibilityFilter, ReplyVisibilityFilter replyVisibilityFilter,
PageToadletRegistry pageToadletRegistry, MetricRegistry metricRegistry, Translation translation, L10nFilter l10nFilter,
NotificationManager notificationManager, @Named("newRemotePost") ListNotification<Post> newPostNotification,
@Named("newRemotePostReply") ListNotification<PostReply> newReplyNotification,
- @Named("localPost") ListNotification<Post> localPostNotification) {
+ @Named("localPost") ListNotification<Post> localPostNotification,
+ @Named("localReply") ListNotification<PostReply> localReplyNotification) {
this.sonePlugin = sonePlugin;
this.loaders = loaders;
this.listNotificationFilter = listNotificationFilter;
this.newPostNotification = newPostNotification;
this.newReplyNotification = newReplyNotification;
this.localPostNotification = localPostNotification;
+ this.localReplyNotification = localReplyNotification;
formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword();
this.templateContextFactory = templateContextFactory;
templateContextFactory.addTemplateObject("webInterface", this);
templateContextFactory.addTemplateObject("formPassword", formPassword);
-
- /* create notifications. */
- Template localReplyNotificationTemplate = loaders.loadTemplate("/templates/notify/newReplyNotification.html");
- localReplyNotification = new ListNotification<>("local-reply-notification", "replies", localReplyNotificationTemplate, false);
}
//
pageToadletRegistry.registerToadlets();
}
- /**
- * Returns the Sone insert notification for the given Sone. If no
- * notification for the given Sone exists, a new notification is created and
- * cached.
- *
- * @param sone
- * The Sone to get the insert notification for
- * @return The Sone insert notification
- */
- private TemplateNotification getSoneInsertNotification(Sone sone) {
- synchronized (soneInsertNotifications) {
- TemplateNotification templateNotification = soneInsertNotifications.get(sone);
- if (templateNotification == null) {
- templateNotification = new TemplateNotification(loaders.loadTemplate("/templates/notify/soneInsertNotification.html"));
- templateNotification.set("insertSone", sone);
- soneInsertNotifications.put(sone, templateNotification);
- }
- return templateNotification;
- }
- }
-
- //
- // EVENT HANDLERS
- //
-
- /**
- * Notifies the web interface that a new {@link PostReply} was found.
- *
- * @param newPostReplyFoundEvent
- * The event
- */
- @Subscribe
- public void newReplyFound(NewPostReplyFoundEvent newPostReplyFoundEvent) {
- PostReply reply = newPostReplyFoundEvent.getPostReply();
- boolean isLocal = reply.getSone().isLocal();
- if (isLocal) {
- localReplyNotification.add(reply);
- if (!hasFirstStartNotification()) {
- notificationManager.addNotification(localReplyNotification);
- }
- }
- }
-
- @Subscribe
- public void markPostKnown(MarkPostKnownEvent markPostKnownEvent) {
- removePost(markPostKnownEvent.getPost());
- }
-
- @Subscribe
- public void markReplyKnown(MarkPostReplyKnownEvent markPostReplyKnownEvent) {
- removeReply(markPostReplyKnownEvent.getPostReply());
- }
-
- @Subscribe
- public void postRemoved(PostRemovedEvent postRemovedEvent) {
- removePost(postRemovedEvent.getPost());
- }
-
- private void removePost(Post post) {
- newPostNotification.remove(post);
- }
-
- @Subscribe
- public void replyRemoved(PostReplyRemovedEvent postReplyRemovedEvent) {
- removeReply(postReplyRemovedEvent.getPostReply());
- }
-
- private void removeReply(PostReply reply) {
- localReplyNotification.remove(reply);
- }
-
- /**
- * Notifies the web interface that a {@link Sone} is being inserted.
- *
- * @param soneInsertingEvent
- * The event
- */
- @Subscribe
- public void soneInserting(SoneInsertingEvent soneInsertingEvent) {
- TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertingEvent.getSone());
- soneInsertNotification.set("soneStatus", "inserting");
- if (soneInsertingEvent.getSone().getOptions().isSoneInsertNotificationEnabled()) {
- notificationManager.addNotification(soneInsertNotification);
- }
- }
-
- /**
- * Notifies the web interface that a {@link Sone} was inserted.
- *
- * @param soneInsertedEvent
- * The event
- */
- @Subscribe
- public void soneInserted(SoneInsertedEvent soneInsertedEvent) {
- TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertedEvent.getSone());
- soneInsertNotification.set("soneStatus", "inserted");
- soneInsertNotification.set("insertDuration", soneInsertedEvent.getInsertDuration() / 1000);
- if (soneInsertedEvent.getSone().getOptions().isSoneInsertNotificationEnabled()) {
- notificationManager.addNotification(soneInsertNotification);
- }
- }
-
- /**
- * Notifies the web interface that a {@link Sone} insert was aborted.
- *
- * @param soneInsertAbortedEvent
- * The event
- */
- @Subscribe
- public void soneInsertAborted(SoneInsertAbortedEvent soneInsertAbortedEvent) {
- TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertAbortedEvent.getSone());
- soneInsertNotification.set("soneStatus", "insert-aborted");
- soneInsertNotification.set("insert-error", soneInsertAbortedEvent.getCause());
- if (soneInsertAbortedEvent.getSone().getOptions().isSoneInsertNotificationEnabled()) {
- notificationManager.addNotification(soneInsertNotification);
- }
- }
-
@Subscribe
public void debugActivated(@Nonnull DebugActivatedEvent debugActivatedEvent) {
pageToadletRegistry.activateDebugMode();