From 6fd3d46cae8b06225c862a8b5d0a6aef35328e21 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Wed, 11 Dec 2019 14:58:35 +0100 Subject: [PATCH] =?utf8?q?=E2=99=BB=EF=B8=8F=20Move=20image-insert=20notif?= =?utf8?q?ications=20into=20handler?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../net/pterodactylus/sone/web/WebInterface.java | 68 -------------------- .../sone/web/notification/ImageInsertHandler.kt | 9 +-- .../sone/web/notification/NotificationHandler.kt | 3 +- .../web/notification/NotificationHandlerModule.kt | 19 ++++++ .../notification/NotificationHandlerModuleTest.kt | 74 ++++++++++++++++++++++ 5 files changed, 100 insertions(+), 73 deletions(-) diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index 07f1476..9bb9250 100644 --- a/src/main/java/net/pterodactylus/sone/web/WebInterface.java +++ b/src/main/java/net/pterodactylus/sone/web/WebInterface.java @@ -38,7 +38,6 @@ import javax.inject.Named; import net.pterodactylus.sone.core.Core; import net.pterodactylus.sone.core.ElementLoader; import net.pterodactylus.sone.core.event.*; -import net.pterodactylus.sone.data.Image; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Sone; @@ -174,15 +173,6 @@ public class WebInterface implements SessionProvider { /** Notifications for sone inserts. */ private final Map soneInsertNotifications = new HashMap<>(); - /** The “inserting images” notification. */ - private final ListNotification insertingImagesNotification; - - /** The “inserted images” notification. */ - private final ListNotification insertedImagesNotification; - - /** The “image insert failed” notification. */ - private final ListNotification imageInsertFailedNotification; - /** Scheduled executor for time-based notifications. */ private final ScheduledExecutorService ticker = Executors.newScheduledThreadPool(1); @@ -231,15 +221,6 @@ public class WebInterface implements SessionProvider { Template mentionNotificationTemplate = loaders.loadTemplate("/templates/notify/mentionNotification.html"); mentionNotification = new ListNotification<>("mention-notification", "posts", mentionNotificationTemplate, false); - - Template insertingImagesTemplate = loaders.loadTemplate("/templates/notify/inserting-images-notification.html"); - insertingImagesNotification = new ListNotification<>("inserting-images-notification", "images", insertingImagesTemplate); - - Template insertedImagesTemplate = loaders.loadTemplate("/templates/notify/inserted-images-notification.html"); - insertedImagesNotification = new ListNotification<>("inserted-images-notification", "images", insertedImagesTemplate); - - Template imageInsertFailedTemplate = loaders.loadTemplate("/templates/notify/image-insert-failed-notification.html"); - imageInsertFailedNotification = new ListNotification<>("image-insert-failed-notification", "images", imageInsertFailedTemplate); } // @@ -780,55 +761,6 @@ public class WebInterface implements SessionProvider { } } - /** - * Notifies the web interface that an image insert was started - * - * @param imageInsertStartedEvent - * The event - */ - @Subscribe - public void imageInsertStarted(ImageInsertStartedEvent imageInsertStartedEvent) { - insertingImagesNotification.add(imageInsertStartedEvent.getImage()); - notificationManager.addNotification(insertingImagesNotification); - } - - /** - * Notifies the web interface that an {@link Image} insert was aborted. - * - * @param imageInsertAbortedEvent - * The event - */ - @Subscribe - public void imageInsertAborted(ImageInsertAbortedEvent imageInsertAbortedEvent) { - insertingImagesNotification.remove(imageInsertAbortedEvent.getImage()); - } - - /** - * Notifies the web interface that an {@link Image} insert is finished. - * - * @param imageInsertFinishedEvent - * The event - */ - @Subscribe - public void imageInsertFinished(ImageInsertFinishedEvent imageInsertFinishedEvent) { - insertingImagesNotification.remove(imageInsertFinishedEvent.getImage()); - insertedImagesNotification.add(imageInsertFinishedEvent.getImage()); - notificationManager.addNotification(insertedImagesNotification); - } - - /** - * Notifies the web interface that an {@link Image} insert has failed. - * - * @param imageInsertFailedEvent - * The event - */ - @Subscribe - public void imageInsertFailed(ImageInsertFailedEvent imageInsertFailedEvent) { - insertingImagesNotification.remove(imageInsertFailedEvent.getImage()); - imageInsertFailedNotification.add(imageInsertFailedEvent.getImage()); - notificationManager.addNotification(imageInsertFailedNotification); - } - @Subscribe public void debugActivated(@Nonnull DebugActivatedEvent debugActivatedEvent) { pageToadletRegistry.activateDebugMode(); diff --git a/src/main/kotlin/net/pterodactylus/sone/web/notification/ImageInsertHandler.kt b/src/main/kotlin/net/pterodactylus/sone/web/notification/ImageInsertHandler.kt index ea11481..0d36de6 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/notification/ImageInsertHandler.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/notification/ImageInsertHandler.kt @@ -22,6 +22,7 @@ import net.pterodactylus.sone.core.event.* import net.pterodactylus.sone.data.* import net.pterodactylus.sone.notify.* import net.pterodactylus.util.notify.* +import javax.inject.* /** * Notification handler for the various image-insert-related events. @@ -31,11 +32,11 @@ import net.pterodactylus.util.notify.* * @see ImageInsertFailedEvent * @see ImageInsertFinishedEvent */ -class ImageInsertHandler( +class ImageInsertHandler @Inject constructor( private val notificationManager: NotificationManager, - private val imageInsertingNotification: ListNotification, - private val imageFailedNotification: ListNotification, - private val imageInsertedNotification: ListNotification) { + @Named("imageInserting") private val imageInsertingNotification: ListNotification, + @Named("imageFailed") private val imageFailedNotification: ListNotification, + @Named("imageInserted") private val imageInsertedNotification: ListNotification) { @Subscribe fun imageInsertStarted(imageInsertStartedEvent: ImageInsertStartedEvent) { diff --git a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt index 631b026..783a9f6 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandler.kt @@ -30,5 +30,6 @@ class NotificationHandler @Inject constructor( newRemotePostHandler: NewRemotePostHandler, soneLockedOnStartupHandler: SoneLockedOnStartupHandler, soneLockedHandler: SoneLockedHandler, - newVersionHandler: NewVersionHandler + newVersionHandler: NewVersionHandler, + imageInsertHandler: ImageInsertHandler ) diff --git a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt index 09cf0cb..3728620 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModule.kt @@ -43,6 +43,7 @@ class NotificationHandlerModule : AbstractModule() { bind().asSingleton() bind().asSingleton() bind().asSingleton() + bind().asSingleton() } @Provides @@ -87,6 +88,24 @@ class NotificationHandlerModule : AbstractModule() { fun getNewVersionNotification(loaders: Loaders) = TemplateNotification("new-version-notification", loaders.loadTemplate("/templates/notify/newVersionNotification.html")) + @Provides + @Singleton + @Named("imageInserting") + fun getImageInsertingNotification(loaders: Loaders) = + ListNotification("inserting-images-notification", "images", loaders.loadTemplate("/templates/notify/inserting-images-notification.html"), dismissable = true) + + @Provides + @Singleton + @Named("imageFailed") + fun getImageInsertingFailedNotification(loaders: Loaders) = + ListNotification("image-insert-failed-notification", "images", loaders.loadTemplate("/templates/notify/image-insert-failed-notification.html"), dismissable = true) + + @Provides + @Singleton + @Named("imageInserted") + fun getImageInsertedNotification(loaders: Loaders) = + ListNotification("inserted-images-notification", "images", loaders.loadTemplate("/templates/notify/inserted-images-notification.html"), dismissable = true) + private inline fun bind(): AnnotatedBindingBuilder = bind(T::class.java) private fun ScopedBindingBuilder.asSingleton() = `in`(Singleton::class.java) diff --git a/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt index 11e728d..1410ed3 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/notification/NotificationHandlerModuleTest.kt @@ -242,4 +242,78 @@ class NotificationHandlerModuleTest { injector.verifySingletonInstance() } + @Test + fun `inserting-image notification is created as singleton`() { + injector.verifySingletonInstance>(named("imageInserting")) + } + + @Test + fun `inserting-image notification has correct ID`() { + assertThat(injector.getInstance>(named("imageInserting")).id, equalTo("inserting-images-notification")) + } + + @Test + fun `inserting-image notification is dismissable`() { + assertThat(injector.getInstance>(named("imageInserting")).isDismissable, equalTo(true)) + } + + @Test + fun `inserting-image notification loads correct template`() { + loaders.templates += "/templates/notify/inserting-images-notification.html" to "<% images>".asTemplate() + val notification = injector.getInstance>(named("imageInserting")) + val images = listOf(ImageImpl(), ImageImpl()).onEach(notification::add) + assertThat(notification.render(), equalTo(images.toString())) + } + + @Test + fun `inserting-image-failed notification is created as singleton`() { + injector.verifySingletonInstance>(named("imageFailed")) + } + + @Test + fun `inserting-image-failed notification has correct ID`() { + assertThat(injector.getInstance>(named("imageFailed")).id, equalTo("image-insert-failed-notification")) + } + + @Test + fun `inserting-image-failed notification is dismissable`() { + assertThat(injector.getInstance>(named("imageFailed")).isDismissable, equalTo(true)) + } + + @Test + fun `inserting-image-failed notification loads correct template`() { + loaders.templates += "/templates/notify/image-insert-failed-notification.html" to "<% images>".asTemplate() + val notification = injector.getInstance>(named("imageFailed")) + val images = listOf(ImageImpl(), ImageImpl()).onEach(notification::add) + assertThat(notification.render(), equalTo(images.toString())) + } + + @Test + fun `inserted-image notification is created as singleton`() { + injector.verifySingletonInstance>(named("imageInserted")) + } + + @Test + fun `inserted-image notification has correct ID`() { + assertThat(injector.getInstance>(named("imageInserted")).id, equalTo("inserted-images-notification")) + } + + @Test + fun `inserted-image notification is dismissable`() { + assertThat(injector.getInstance>(named("imageInserted")).isDismissable, equalTo(true)) + } + + @Test + fun `inserted-image notification loads correct template`() { + loaders.templates += "/templates/notify/inserted-images-notification.html" to "<% images>".asTemplate() + val notification = injector.getInstance>(named("imageInserted")) + val images = listOf(ImageImpl(), ImageImpl()).onEach(notification::add) + assertThat(notification.render(), equalTo(images.toString())) + } + + @Test + fun `image insert handler is created as singleton`() { + injector.verifySingletonInstance() + } + } -- 2.7.4