X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FWebInterface.java;h=f21d256df885eabea60e23c072b270de600a2acf;hp=4534c35b2b73d19f66bf6c7c5e5a5c9616a0086e;hb=aa676316c57d76a22efb98a2be2851202f906108;hpb=fdcd6fa4e0110028080d0b4a9ef3c5f8e5a5e867 diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index 4534c35..f21d256 100644 --- a/src/main/java/net/pterodactylus/sone/web/WebInterface.java +++ b/src/main/java/net/pterodactylus/sone/web/WebInterface.java @@ -1,5 +1,5 @@ /* - * Sone - WebInterface.java - Copyright © 2010–2012 David Roden + * Sone - WebInterface.java - Copyright © 2010–2013 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,6 +17,8 @@ package net.pterodactylus.sone.web; +import static net.pterodactylus.util.template.TemplateParser.parse; + import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -32,11 +34,18 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; import net.pterodactylus.sone.core.Core; -import net.pterodactylus.sone.core.CoreListener; +import net.pterodactylus.sone.core.event.ImageInsertAbortedEvent; +import net.pterodactylus.sone.core.event.ImageInsertFailedEvent; +import net.pterodactylus.sone.core.event.ImageInsertFinishedEvent; +import net.pterodactylus.sone.core.event.ImageInsertStartedEvent; import net.pterodactylus.sone.core.event.MarkPostKnownEvent; import net.pterodactylus.sone.core.event.MarkPostReplyKnownEvent; import net.pterodactylus.sone.core.event.MarkSoneKnownEvent; @@ -45,7 +54,13 @@ import net.pterodactylus.sone.core.event.NewPostReplyFoundEvent; import net.pterodactylus.sone.core.event.NewSoneFoundEvent; import net.pterodactylus.sone.core.event.PostRemovedEvent; import net.pterodactylus.sone.core.event.PostReplyRemovedEvent; +import net.pterodactylus.sone.core.event.SoneInsertAbortedEvent; +import net.pterodactylus.sone.core.event.SoneInsertedEvent; +import net.pterodactylus.sone.core.event.SoneInsertingEvent; +import net.pterodactylus.sone.core.event.SoneLockedEvent; import net.pterodactylus.sone.core.event.SoneRemovedEvent; +import net.pterodactylus.sone.core.event.SoneUnlockedEvent; +import net.pterodactylus.sone.core.event.UpdateFoundEvent; import net.pterodactylus.sone.data.Album; import net.pterodactylus.sone.data.Image; import net.pterodactylus.sone.data.Post; @@ -112,6 +127,7 @@ import net.pterodactylus.sone.web.ajax.UntrustAjaxPage; import net.pterodactylus.sone.web.page.FreenetRequest; import net.pterodactylus.sone.web.page.PageToadlet; import net.pterodactylus.sone.web.page.PageToadletFactory; +import net.pterodactylus.util.io.Closer; import net.pterodactylus.util.logging.Logging; import net.pterodactylus.util.notify.Notification; import net.pterodactylus.util.notify.NotificationManager; @@ -130,11 +146,8 @@ import net.pterodactylus.util.template.ReplaceFilter; import net.pterodactylus.util.template.StoreFilter; import net.pterodactylus.util.template.Template; import net.pterodactylus.util.template.TemplateContextFactory; -import net.pterodactylus.util.template.TemplateParser; import net.pterodactylus.util.template.TemplateProvider; import net.pterodactylus.util.template.XmlFilter; -import net.pterodactylus.util.thread.Ticker; -import net.pterodactylus.util.version.Version; import net.pterodactylus.util.web.RedirectPage; import net.pterodactylus.util.web.StaticPage; import net.pterodactylus.util.web.TemplatePage; @@ -157,7 +170,7 @@ import freenet.support.api.HTTPRequest; * * @author David ‘Bombe’ Roden */ -public class WebInterface implements CoreListener { +public class WebInterface { /** The logger. */ private static final Logger logger = Logging.getLogger(WebInterface.class); @@ -205,7 +218,7 @@ public class WebInterface implements CoreListener { private final Map soneInsertNotifications = new HashMap(); /** Sone locked notification ticker objects. */ - private final Map lockedSonesTickerObjects = Collections.synchronizedMap(new HashMap()); + private final Map> lockedSonesTickerObjects = Collections.synchronizedMap(new HashMap>()); /** The “Sone locked” notification. */ private final ListNotification lockedSonesNotification; @@ -222,6 +235,9 @@ public class WebInterface implements CoreListener { /** The “image insert failed” notification. */ private final ListNotification imageInsertFailedNotification; + /** Scheduled executor for time-based notifications. */ + private final ScheduledExecutorService ticker = Executors.newScheduledThreadPool(1); + /** * Creates a new web interface. * @@ -273,40 +289,49 @@ public class WebInterface implements CoreListener { templateContextFactory.addTemplateObject("formPassword", formPassword); /* create notifications. */ - Template newSoneNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newSoneNotification.html")); + Template newSoneNotificationTemplate = parseTemplate("/templates/notify/newSoneNotification.html"); newSoneNotification = new ListNotification("new-sone-notification", "sones", newSoneNotificationTemplate, false); - Template newPostNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newPostNotification.html")); + Template newPostNotificationTemplate = parseTemplate("/templates/notify/newPostNotification.html"); newPostNotification = new ListNotification("new-post-notification", "posts", newPostNotificationTemplate, false); - Template localPostNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newPostNotification.html")); + Template localPostNotificationTemplate = parseTemplate("/templates/notify/newPostNotification.html"); localPostNotification = new ListNotification("local-post-notification", "posts", localPostNotificationTemplate, false); - Template newReplyNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newReplyNotification.html")); + Template newReplyNotificationTemplate = parseTemplate("/templates/notify/newReplyNotification.html"); newReplyNotification = new ListNotification("new-reply-notification", "replies", newReplyNotificationTemplate, false); - Template localReplyNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newReplyNotification.html")); + Template localReplyNotificationTemplate = parseTemplate("/templates/notify/newReplyNotification.html"); localReplyNotification = new ListNotification("local-reply-notification", "replies", localReplyNotificationTemplate, false); - Template mentionNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/mentionNotification.html")); + Template mentionNotificationTemplate = parseTemplate("/templates/notify/mentionNotification.html"); mentionNotification = new ListNotification("mention-notification", "posts", mentionNotificationTemplate, false); - Template lockedSonesTemplate = TemplateParser.parse(createReader("/templates/notify/lockedSonesNotification.html")); + Template lockedSonesTemplate = parseTemplate("/templates/notify/lockedSonesNotification.html"); lockedSonesNotification = new ListNotification("sones-locked-notification", "sones", lockedSonesTemplate); - Template newVersionTemplate = TemplateParser.parse(createReader("/templates/notify/newVersionNotification.html")); + Template newVersionTemplate = parseTemplate("/templates/notify/newVersionNotification.html"); newVersionNotification = new TemplateNotification("new-version-notification", newVersionTemplate); - Template insertingImagesTemplate = TemplateParser.parse(createReader("/templates/notify/inserting-images-notification.html")); + Template insertingImagesTemplate = parseTemplate("/templates/notify/inserting-images-notification.html"); insertingImagesNotification = new ListNotification("inserting-images-notification", "images", insertingImagesTemplate); - Template insertedImagesTemplate = TemplateParser.parse(createReader("/templates/notify/inserted-images-notification.html")); + Template insertedImagesTemplate = parseTemplate("/templates/notify/inserted-images-notification.html"); insertedImagesNotification = new ListNotification("inserted-images-notification", "images", insertedImagesTemplate); - Template imageInsertFailedTemplate = TemplateParser.parse(createReader("/templates/notify/image-insert-failed-notification.html")); + Template imageInsertFailedTemplate = parseTemplate("/templates/notify/image-insert-failed-notification.html"); imageInsertFailedNotification = new ListNotification("image-insert-failed-notification", "images", imageInsertFailedTemplate); } + private Template parseTemplate(String resourceName) { + Reader reader = createReader(resourceName); + try { + return parse(reader); + } finally { + Closer.close(reader); + } + } + // // ACCESSORS // @@ -495,7 +520,7 @@ public class WebInterface implements CoreListener { */ public void setFirstStart(boolean firstStart) { if (firstStart) { - Template firstStartNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/firstStartNotification.html")); + Template firstStartNotificationTemplate = parseTemplate("/templates/notify/firstStartNotification.html"); Notification firstStartNotification = new TemplateNotification("first-start-notification", firstStartNotificationTemplate); notificationManager.addNotification(firstStartNotification); } @@ -510,7 +535,7 @@ public class WebInterface implements CoreListener { */ public void setNewConfig(boolean newConfig) { if (newConfig && !hasFirstStartNotification()) { - Template configNotReadNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/configNotReadNotification.html")); + Template configNotReadNotificationTemplate = parseTemplate("/templates/notify/configNotReadNotification.html"); Notification configNotReadNotification = new TemplateNotification("config-not-read-notification", configNotReadNotificationTemplate); notificationManager.addNotification(configNotReadNotification); } @@ -541,22 +566,22 @@ public class WebInterface implements CoreListener { registerToadlets(); /* notification templates. */ - Template startupNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/startupNotification.html")); + Template startupNotificationTemplate = parseTemplate("/templates/notify/startupNotification.html"); final TemplateNotification startupNotification = new TemplateNotification("startup-notification", startupNotificationTemplate); notificationManager.addNotification(startupNotification); - Ticker.getInstance().registerEvent(System.currentTimeMillis() + (120 * 1000), new Runnable() { + ticker.schedule(new Runnable() { @Override public void run() { startupNotification.dismiss(); } - }, "Sone Startup Notification Remover"); + }, 2, TimeUnit.MINUTES); - Template wotMissingNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/wotMissingNotification.html")); + Template wotMissingNotificationTemplate = parseTemplate("/templates/notify/wotMissingNotification.html"); final TemplateNotification wotMissingNotification = new TemplateNotification("wot-missing-notification", wotMissingNotificationTemplate); - Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000), new Runnable() { + ticker.scheduleAtFixedRate(new Runnable() { @Override @SuppressWarnings("synthetic-access") @@ -566,10 +591,9 @@ public class WebInterface implements CoreListener { } else { notificationManager.addNotification(wotMissingNotification); } - Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000), this, "Sone WoT Connector Checker"); } - }, "Sone WoT Connector Checker"); + }, 15, 15, TimeUnit.SECONDS); } /** @@ -577,7 +601,7 @@ public class WebInterface implements CoreListener { */ public void stop() { unregisterToadlets(); - Ticker.getInstance().stop(); + ticker.shutdownNow(); } // @@ -588,36 +612,36 @@ public class WebInterface implements CoreListener { * Register all toadlets. */ private void registerToadlets() { - Template emptyTemplate = TemplateParser.parse(new StringReader("")); - Template loginTemplate = TemplateParser.parse(createReader("/templates/login.html")); - Template indexTemplate = TemplateParser.parse(createReader("/templates/index.html")); - Template newTemplate = TemplateParser.parse(createReader("/templates/new.html")); - Template knownSonesTemplate = TemplateParser.parse(createReader("/templates/knownSones.html")); - Template createSoneTemplate = TemplateParser.parse(createReader("/templates/createSone.html")); - Template createPostTemplate = TemplateParser.parse(createReader("/templates/createPost.html")); - Template createReplyTemplate = TemplateParser.parse(createReader("/templates/createReply.html")); - Template bookmarksTemplate = TemplateParser.parse(createReader("/templates/bookmarks.html")); - Template searchTemplate = TemplateParser.parse(createReader("/templates/search.html")); - Template editProfileTemplate = TemplateParser.parse(createReader("/templates/editProfile.html")); - Template editProfileFieldTemplate = TemplateParser.parse(createReader("/templates/editProfileField.html")); - Template deleteProfileFieldTemplate = TemplateParser.parse(createReader("/templates/deleteProfileField.html")); - Template viewSoneTemplate = TemplateParser.parse(createReader("/templates/viewSone.html")); - Template viewPostTemplate = TemplateParser.parse(createReader("/templates/viewPost.html")); - Template deletePostTemplate = TemplateParser.parse(createReader("/templates/deletePost.html")); - Template deleteReplyTemplate = TemplateParser.parse(createReader("/templates/deleteReply.html")); - Template deleteSoneTemplate = TemplateParser.parse(createReader("/templates/deleteSone.html")); - Template imageBrowserTemplate = TemplateParser.parse(createReader("/templates/imageBrowser.html")); - Template createAlbumTemplate = TemplateParser.parse(createReader("/templates/createAlbum.html")); - Template deleteAlbumTemplate = TemplateParser.parse(createReader("/templates/deleteAlbum.html")); - Template deleteImageTemplate = TemplateParser.parse(createReader("/templates/deleteImage.html")); - Template noPermissionTemplate = TemplateParser.parse(createReader("/templates/noPermission.html")); - Template optionsTemplate = TemplateParser.parse(createReader("/templates/options.html")); - Template rescueTemplate = TemplateParser.parse(createReader("/templates/rescue.html")); - Template aboutTemplate = TemplateParser.parse(createReader("/templates/about.html")); - Template invalidTemplate = TemplateParser.parse(createReader("/templates/invalid.html")); - Template postTemplate = TemplateParser.parse(createReader("/templates/include/viewPost.html")); - Template replyTemplate = TemplateParser.parse(createReader("/templates/include/viewReply.html")); - Template openSearchTemplate = TemplateParser.parse(createReader("/templates/xml/OpenSearch.xml")); + Template emptyTemplate = parse(new StringReader("")); + Template loginTemplate = parseTemplate("/templates/login.html"); + Template indexTemplate = parseTemplate("/templates/index.html"); + Template newTemplate = parseTemplate("/templates/new.html"); + Template knownSonesTemplate = parseTemplate("/templates/knownSones.html"); + Template createSoneTemplate = parseTemplate("/templates/createSone.html"); + Template createPostTemplate = parseTemplate("/templates/createPost.html"); + Template createReplyTemplate = parseTemplate("/templates/createReply.html"); + Template bookmarksTemplate = parseTemplate("/templates/bookmarks.html"); + Template searchTemplate = parseTemplate("/templates/search.html"); + Template editProfileTemplate = parseTemplate("/templates/editProfile.html"); + Template editProfileFieldTemplate = parseTemplate("/templates/editProfileField.html"); + Template deleteProfileFieldTemplate = parseTemplate("/templates/deleteProfileField.html"); + Template viewSoneTemplate = parseTemplate("/templates/viewSone.html"); + Template viewPostTemplate = parseTemplate("/templates/viewPost.html"); + Template deletePostTemplate = parseTemplate("/templates/deletePost.html"); + Template deleteReplyTemplate = parseTemplate("/templates/deleteReply.html"); + Template deleteSoneTemplate = parseTemplate("/templates/deleteSone.html"); + Template imageBrowserTemplate = parseTemplate("/templates/imageBrowser.html"); + Template createAlbumTemplate = parseTemplate("/templates/createAlbum.html"); + Template deleteAlbumTemplate = parseTemplate("/templates/deleteAlbum.html"); + Template deleteImageTemplate = parseTemplate("/templates/deleteImage.html"); + Template noPermissionTemplate = parseTemplate("/templates/noPermission.html"); + Template optionsTemplate = parseTemplate("/templates/options.html"); + Template rescueTemplate = parseTemplate("/templates/rescue.html"); + Template aboutTemplate = parseTemplate("/templates/about.html"); + Template invalidTemplate = parseTemplate("/templates/invalid.html"); + Template postTemplate = parseTemplate("/templates/include/viewPost.html"); + Template replyTemplate = parseTemplate("/templates/include/viewReply.html"); + Template openSearchTemplate = parseTemplate("/templates/xml/OpenSearch.xml"); PageToadletFactory pageToadletFactory = new PageToadletFactory(sonePlugin.pluginRespirator().getHLSimpleClient(), "/Sone/"); pageToadlets.add(pageToadletFactory.createPageToadlet(new RedirectPage("", "index.html"))); @@ -775,7 +799,7 @@ public class WebInterface implements CoreListener { synchronized (soneInsertNotifications) { TemplateNotification templateNotification = soneInsertNotifications.get(sone); if (templateNotification == null) { - templateNotification = new TemplateNotification(TemplateParser.parse(createReader("/templates/notify/soneInsertNotification.html"))); + templateNotification = new TemplateNotification(parseTemplate("/templates/notify/soneInsertNotification.html")); templateNotification.set("insertSone", sone); soneInsertNotifications.put(sone, templateNotification); } @@ -783,6 +807,23 @@ public class WebInterface implements CoreListener { } } + 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 // @@ -844,8 +885,8 @@ public class WebInterface implements CoreListener { } if (!hasFirstStartNotification()) { notificationManager.addNotification(isLocal ? localReplyNotification : newReplyNotification); - if (!getMentionedSones(reply.getText()).isEmpty() && !isLocal && (reply.getPost().getSone() != null) && (reply.getTime() <= System.currentTimeMillis())) { - mentionNotification.add(reply.getPost()); + if (reply.getPost().isPresent() && localSoneMentionedInNewPostOrReply(reply.getPost().get())) { + mentionNotification.add(reply.getPost().get()); notificationManager.addNotification(mentionNotification); } } else { @@ -874,7 +915,9 @@ public class WebInterface implements CoreListener { public void markPostKnown(MarkPostKnownEvent markPostKnownEvent) { newPostNotification.remove(markPostKnownEvent.post()); localPostNotification.remove(markPostKnownEvent.post()); - mentionNotification.remove(markPostKnownEvent.post()); + if (!localSoneMentionedInNewPostOrReply(markPostKnownEvent.post())) { + mentionNotification.remove(markPostKnownEvent.post()); + } } /** @@ -885,9 +928,12 @@ public class WebInterface implements CoreListener { */ @Subscribe public void markReplyKnown(MarkPostReplyKnownEvent markPostReplyKnownEvent) { - newReplyNotification.remove(markPostReplyKnownEvent.postReply()); - localReplyNotification.remove(markPostReplyKnownEvent.postReply()); - mentionNotification.remove(markPostReplyKnownEvent.postReply().getPost()); + PostReply postReply = markPostReplyKnownEvent.postReply(); + newReplyNotification.remove(postReply); + localReplyNotification.remove(postReply); + if (postReply.getPost().isPresent() && !localSoneMentionedInNewPostOrReply(postReply.getPost().get())) { + mentionNotification.remove(postReply.getPost().get()); + } } /** @@ -911,7 +957,9 @@ public class WebInterface implements CoreListener { public void postRemoved(PostRemovedEvent postRemovedEvent) { newPostNotification.remove(postRemovedEvent.post()); localPostNotification.remove(postRemovedEvent.post()); - mentionNotification.remove(postRemovedEvent.post()); + if (!localSoneMentionedInNewPostOrReply(postRemovedEvent.post())) { + mentionNotification.remove(postRemovedEvent.post()); + } } /** @@ -925,131 +973,151 @@ public class WebInterface implements CoreListener { PostReply reply = postReplyRemovedEvent.postReply(); newReplyNotification.remove(reply); localReplyNotification.remove(reply); - if (!getMentionedSones(reply.getText()).isEmpty()) { - boolean isMentioned = false; - for (PostReply existingReply : getCore().getReplies(reply.getPost())) { - isMentioned |= !reply.isKnown() && !getMentionedSones(existingReply.getText()).isEmpty(); - } - if (!isMentioned) { - mentionNotification.remove(reply.getPost()); - } + if (reply.getPost().isPresent() && !localSoneMentionedInNewPostOrReply(reply.getPost().get())) { + mentionNotification.remove(reply.getPost().get()); } } - // - // CORELISTENER METHODS - // - /** - * {@inheritDoc} + * Notifies the web interface that a Sone was locked. + * + * @param soneLockedEvent + * The event */ - @Override - public void soneLocked(final Sone sone) { - Object tickerObject = Ticker.getInstance().registerEvent(System.currentTimeMillis() + (5 * 60) * 1000, new Runnable() { + @Subscribe + public void soneLocked(SoneLockedEvent soneLockedEvent) { + final Sone sone = soneLockedEvent.sone(); + ScheduledFuture tickerObject = ticker.schedule(new Runnable() { @Override @SuppressWarnings("synthetic-access") public void run() { lockedSonesNotification.add(sone); - lockedSonesTickerObjects.remove(sone); notificationManager.addNotification(lockedSonesNotification); } - }, "Sone Locked Notification"); + }, 5, TimeUnit.MINUTES); lockedSonesTickerObjects.put(sone, tickerObject); } /** - * {@inheritDoc} + * Notifies the web interface that a Sone was unlocked. + * + * @param soneUnlockedEvent + * The event */ - @Override - public void soneUnlocked(Sone sone) { - lockedSonesNotification.remove(sone); - Ticker.getInstance().deregisterEvent(lockedSonesTickerObjects.remove(sone)); + @Subscribe + public void soneUnlocked(SoneUnlockedEvent soneUnlockedEvent) { + lockedSonesNotification.remove(soneUnlockedEvent.sone()); + lockedSonesTickerObjects.remove(soneUnlockedEvent.sone()).cancel(false); } /** - * {@inheritDoc} + * Notifies the web interface that a {@link Sone} is being inserted. + * + * @param soneInsertingEvent + * The event */ - @Override - public void soneInserting(Sone sone) { - TemplateNotification soneInsertNotification = getSoneInsertNotification(sone); + @Subscribe + public void soneInserting(SoneInsertingEvent soneInsertingEvent) { + TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertingEvent.sone()); soneInsertNotification.set("soneStatus", "inserting"); - if (sone.getOptions().getBooleanOption("EnableSoneInsertNotifications").get()) { + if (soneInsertingEvent.sone().getOptions().getBooleanOption("EnableSoneInsertNotifications").get()) { notificationManager.addNotification(soneInsertNotification); } } /** - * {@inheritDoc} + * Notifies the web interface that a {@link Sone} was inserted. + * + * @param soneInsertedEvent + * The event */ - @Override - public void soneInserted(Sone sone, long insertDuration) { - TemplateNotification soneInsertNotification = getSoneInsertNotification(sone); + @Subscribe + public void soneInserted(SoneInsertedEvent soneInsertedEvent) { + TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertedEvent.sone()); soneInsertNotification.set("soneStatus", "inserted"); - soneInsertNotification.set("insertDuration", insertDuration / 1000); - if (sone.getOptions().getBooleanOption("EnableSoneInsertNotifications").get()) { + soneInsertNotification.set("insertDuration", soneInsertedEvent.insertDuration() / 1000); + if (soneInsertedEvent.sone().getOptions().getBooleanOption("EnableSoneInsertNotifications").get()) { notificationManager.addNotification(soneInsertNotification); } } /** - * {@inheritDoc} + * Notifies the web interface that a {@link Sone} insert was aborted. + * + * @param soneInsertAbortedEvent + * The event */ - @Override - public void soneInsertAborted(Sone sone, Throwable cause) { - TemplateNotification soneInsertNotification = getSoneInsertNotification(sone); + @Subscribe + public void soneInsertAborted(SoneInsertAbortedEvent soneInsertAbortedEvent) { + TemplateNotification soneInsertNotification = getSoneInsertNotification(soneInsertAbortedEvent.sone()); soneInsertNotification.set("soneStatus", "insert-aborted"); - soneInsertNotification.set("insert-error", cause); - if (sone.getOptions().getBooleanOption("EnableSoneInsertNotifications").get()) { + soneInsertNotification.set("insert-error", soneInsertAbortedEvent.cause()); + if (soneInsertAbortedEvent.sone().getOptions().getBooleanOption("EnableSoneInsertNotifications").get()) { notificationManager.addNotification(soneInsertNotification); } } /** - * {@inheritDoc} + * Notifies the web interface that a new Sone version was found. + * + * @param updateFoundEvent + * The event */ - @Override - public void updateFound(Version version, long releaseTime, long latestEdition) { - newVersionNotification.getTemplateContext().set("latestVersion", version); - newVersionNotification.getTemplateContext().set("latestEdition", latestEdition); - newVersionNotification.getTemplateContext().set("releaseTime", releaseTime); + @Subscribe + public void updateFound(UpdateFoundEvent updateFoundEvent) { + newVersionNotification.getTemplateContext().set("latestVersion", updateFoundEvent.version()); + newVersionNotification.getTemplateContext().set("latestEdition", updateFoundEvent.latestEdition()); + newVersionNotification.getTemplateContext().set("releaseTime", updateFoundEvent.releaseTime()); notificationManager.addNotification(newVersionNotification); } /** - * {@inheritDoc} + * Notifies the web interface that an image insert was started + * + * @param imageInsertStartedEvent + * The event */ - @Override - public void imageInsertStarted(Image image) { - insertingImagesNotification.add(image); + @Subscribe + public void imageInsertStarted(ImageInsertStartedEvent imageInsertStartedEvent) { + insertingImagesNotification.add(imageInsertStartedEvent.image()); notificationManager.addNotification(insertingImagesNotification); } /** - * {@inheritDoc} + * Notifies the web interface that an {@link Image} insert was aborted. + * + * @param imageInsertAbortedEvent + * The event */ - @Override - public void imageInsertAborted(Image image) { - insertingImagesNotification.remove(image); + @Subscribe + public void imageInsertAborted(ImageInsertAbortedEvent imageInsertAbortedEvent) { + insertingImagesNotification.remove(imageInsertAbortedEvent.image()); } /** - * {@inheritDoc} + * Notifies the web interface that an {@link Image} insert is finished. + * + * @param imageInsertFinishedEvent + * The event */ - @Override - public void imageInsertFinished(Image image) { - insertingImagesNotification.remove(image); - insertedImagesNotification.add(image); + @Subscribe + public void imageInsertFinished(ImageInsertFinishedEvent imageInsertFinishedEvent) { + insertingImagesNotification.remove(imageInsertFinishedEvent.image()); + insertedImagesNotification.add(imageInsertFinishedEvent.image()); notificationManager.addNotification(insertedImagesNotification); } /** - * {@inheritDoc} + * Notifies the web interface that an {@link Image} insert has failed. + * + * @param imageInsertFailedEvent + * The event */ - @Override - public void imageInsertFailed(Image image, Throwable cause) { - insertingImagesNotification.remove(image); - imageInsertFailedNotification.add(image); + @Subscribe + public void imageInsertFailed(ImageInsertFailedEvent imageInsertFailedEvent) { + insertingImagesNotification.remove(imageInsertFailedEvent.image()); + imageInsertFailedNotification.add(imageInsertFailedEvent.image()); notificationManager.addNotification(imageInsertFailedNotification); }