import net.pterodactylus.sone.freenet.L10nFilter;
import net.pterodactylus.sone.freenet.wot.Identity;
import net.pterodactylus.sone.main.SonePlugin;
-import net.pterodactylus.sone.notify.NewPostNotification;
-import net.pterodactylus.sone.notify.NewReplyNotification;
-import net.pterodactylus.sone.notify.NewSoneNotification;
+import net.pterodactylus.sone.notify.ListNotification;
import net.pterodactylus.sone.template.CollectionAccessor;
import net.pterodactylus.sone.template.CssClassNameFilter;
import net.pterodactylus.sone.template.GetPagePlugin;
import net.pterodactylus.sone.web.ajax.FollowSoneAjaxPage;
import net.pterodactylus.sone.web.ajax.GetLikesAjaxPage;
import net.pterodactylus.sone.web.ajax.GetReplyAjaxPage;
-import net.pterodactylus.sone.web.ajax.GetSoneStatusPage;
+import net.pterodactylus.sone.web.ajax.GetStatusAjaxPage;
import net.pterodactylus.sone.web.ajax.GetTranslationPage;
import net.pterodactylus.sone.web.ajax.LikeAjaxPage;
+import net.pterodactylus.sone.web.ajax.LockSoneAjaxPage;
import net.pterodactylus.sone.web.ajax.UnfollowSoneAjaxPage;
import net.pterodactylus.sone.web.ajax.UnlikeAjaxPage;
+import net.pterodactylus.sone.web.ajax.UnlockSoneAjaxPage;
import net.pterodactylus.sone.web.page.PageToadlet;
import net.pterodactylus.sone.web.page.PageToadletFactory;
import net.pterodactylus.sone.web.page.StaticPage;
private DefaultTemplateFactory templateFactory;
/** The “new Sone” notification. */
- private final NewSoneNotification newSoneNotification;
+ private final ListNotification<Sone> newSoneNotification;
/** The “new post” notification. */
- private final NewPostNotification newPostNotification;
+ private final ListNotification<Post> newPostNotification;
/** The “new reply” notification. */
- private final NewReplyNotification newReplyNotification;
+ private final ListNotification<Reply> newReplyNotification;
+
+ /** The “rescuing Sone” notification. */
+ private final ListNotification<Sone> rescuingSonesNotification;
+
+ /** The “Sone rescued” notification. */
+ private final ListNotification<Sone> sonesRescuedNotification;
/**
* Creates a new web interface.
/* create notifications. */
Template newSoneNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/newSoneNotification.html"));
- newSoneNotification = new NewSoneNotification(newSoneNotificationTemplate);
+ newSoneNotification = new ListNotification<Sone>("new-sone-notification", "sones", newSoneNotificationTemplate);
Template newPostNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/newPostNotification.html"));
- newPostNotification = new NewPostNotification(newPostNotificationTemplate);
+ newPostNotification = new ListNotification<Post>("new-post-notification", "posts", newPostNotificationTemplate);
Template newReplyNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/newReplyNotification.html"));
- newReplyNotification = new NewReplyNotification(newReplyNotificationTemplate);
+ newReplyNotification = new ListNotification<Reply>("new-replies-notification", "replies", newReplyNotificationTemplate);
+
+ Template rescuingSonesTemplate = templateFactory.createTemplate(createReader("/templates/notify/rescuingSonesNotification.html"));
+ rescuingSonesNotification = new ListNotification<Sone>("sones-being-rescued-notification", "sones", rescuingSonesTemplate);
+
+ Template sonesRescuedTemplate = templateFactory.createTemplate(createReader("/templates/notify/sonesRescuedNotification.html"));
+ sonesRescuedNotification = new ListNotification<Sone>("sones-rescued-notification", "sones", sonesRescuedTemplate);
}
//
/* notification templates. */
Template startupNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/startupNotification.html"));
- final TemplateNotification startupNotification = new TemplateNotification(startupNotificationTemplate);
+ final TemplateNotification startupNotification = new TemplateNotification("startup-notification", startupNotificationTemplate);
notificationManager.addNotification(startupNotification);
Ticker.getInstance().registerEvent(System.currentTimeMillis() + (120 * 1000), new Runnable() {
startupNotification.dismiss();
}
}, "Sone Startup Notification Remover");
+
+ Template wotMissingNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/wotMissingNotification.html"));
+ final TemplateNotification wotMissingNotification = new TemplateNotification("wot-missing-notification", wotMissingNotificationTemplate);
+ Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000), new Runnable() {
+
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public void run() {
+ if (getCore().getIdentityManager().isConnected()) {
+ wotMissingNotification.dismiss();
+ } else {
+ notificationManager.addNotification(wotMissingNotification);
+ }
+ Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000), this, "Sone WoT Connector Checker");
+ }
+
+ }, "Sone WoT Connector Checker");
}
/**
*/
public void stop() {
unregisterToadlets();
+ Ticker.getInstance().stop();
}
//
Template unlikePostTemplate = templateFactory.createTemplate(createReader("/templates/unlike.html"));
Template deletePostTemplate = templateFactory.createTemplate(createReader("/templates/deletePost.html"));
Template deleteReplyTemplate = templateFactory.createTemplate(createReader("/templates/deleteReply.html"));
+ Template lockSoneTemplate = templateFactory.createTemplate(createReader("/templates/lockSone.html"));
+ Template unlockSoneTemplate = templateFactory.createTemplate(createReader("/templates/unlockSone.html"));
Template followSoneTemplate = templateFactory.createTemplate(createReader("/templates/followSone.html"));
Template unfollowSoneTemplate = templateFactory.createTemplate(createReader("/templates/unfollowSone.html"));
Template deleteSoneTemplate = templateFactory.createTemplate(createReader("/templates/deleteSone.html"));
Template noPermissionTemplate = templateFactory.createTemplate(createReader("/templates/noPermission.html"));
- Template wotPluginMissingTemplate = templateFactory.createTemplate(createReader("/templates/wotPluginMissing.html"));
Template dismissNotificationTemplate = templateFactory.createTemplate(createReader("/templates/dismissNotification.html"));
Template logoutTemplate = templateFactory.createTemplate(createReader("/templates/logout.html"));
Template optionsTemplate = templateFactory.createTemplate(createReader("/templates/options.html"));
pageToadlets.add(pageToadletFactory.createPageToadlet(new UnlikePage(unlikePostTemplate, this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DeletePostPage(deletePostTemplate, this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DeleteReplyPage(deleteReplyTemplate, this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new LockSonePage(lockSoneTemplate, this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new UnlockSonePage(unlockSoneTemplate, this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new FollowSonePage(followSoneTemplate, this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new UnfollowSonePage(unfollowSoneTemplate, this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DeleteSonePage(deleteSoneTemplate, this), "DeleteSone"));
pageToadlets.add(pageToadletFactory.createPageToadlet(new OptionsPage(optionsTemplate, this), "Options"));
pageToadlets.add(pageToadletFactory.createPageToadlet(new AboutPage(aboutTemplate, this, SonePlugin.VERSION), "About"));
pageToadlets.add(pageToadletFactory.createPageToadlet(new SoneTemplatePage("noPermission.html", noPermissionTemplate, "Page.NoPermission.Title", this)));
- pageToadlets.add(pageToadletFactory.createPageToadlet(new SoneTemplatePage("wotPluginMissing.html", wotPluginMissingTemplate, "Page.WotPluginMissing.Title", this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DismissNotificationPage(dismissNotificationTemplate, this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new StaticPage("css/", "/static/css/", "text/css")));
pageToadlets.add(pageToadletFactory.createPageToadlet(new StaticPage("javascript/", "/static/javascript/", "text/javascript")));
pageToadlets.add(pageToadletFactory.createPageToadlet(new StaticPage("images/", "/static/images/", "image/png")));
pageToadlets.add(pageToadletFactory.createPageToadlet(new GetTranslationPage(this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new GetStatusAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DismissNotificationAjaxPage(this)));
- pageToadlets.add(pageToadletFactory.createPageToadlet(new GetSoneStatusPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new CreateReplyAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new GetReplyAjaxPage(this, replyTemplate)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DeletePostAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DeleteReplyAjaxPage(this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new LockSoneAjaxPage(this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new UnlockSoneAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new FollowSoneAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new UnfollowSoneAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new LikeAjaxPage(this)));
* {@inheritDoc}
*/
@Override
+ public void rescuingSone(Sone sone) {
+ rescuingSonesNotification.add(sone);
+ notificationManager.addNotification(rescuingSonesNotification);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void rescuedSone(Sone sone) {
+ rescuingSonesNotification.remove(sone);
+ sonesRescuedNotification.add(sone);
+ notificationManager.addNotification(sonesRescuedNotification);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void newSoneFound(Sone sone) {
- newSoneNotification.addSone(sone);
+ newSoneNotification.add(sone);
notificationManager.addNotification(newSoneNotification);
}
*/
@Override
public void newPostFound(Post post) {
- newPostNotification.addPost(post);
+ newPostNotification.add(post);
notificationManager.addNotification(newPostNotification);
}
*/
@Override
public void newReplyFound(Reply reply) {
- newReplyNotification.addReply(reply);
+ if (reply.getPost().getSone() == null) {
+ return;
+ }
+ newReplyNotification.add(reply);
notificationManager.addNotification(newReplyNotification);
}
*/
@Override
public void markSoneKnown(Sone sone) {
- newSoneNotification.removeSone(sone);
- if (newSoneNotification.isEmpty()) {
- newSoneNotification.dismiss();
- }
+ newSoneNotification.remove(sone);
}
/**
*/
@Override
public void markPostKnown(Post post) {
- newPostNotification.removePost(post);
- if (newPostNotification.isEmpty()) {
- newPostNotification.dismiss();
- }
+ newPostNotification.remove(post);
}
/**
*/
@Override
public void markReplyKnown(Reply reply) {
- newReplyNotification.removeReply(reply);
- if (newReplyNotification.isEmpty()) {
- newReplyNotification.dismiss();
- }
+ newReplyNotification.remove(reply);
}
/**