X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FWebInterface.java;h=d9a9dfbdb273490eb187114e3c9868df8d42da9e;hb=9161c1d7f558fee1cde877b8179463b113671d07;hp=0863fee9cb159ce0acc7786a817e32180abc052b;hpb=b3071020f22e1af7226809351a5dbea2a44ebc16;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index 0863fee..d9a9dfb 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 @@ -32,6 +32,10 @@ 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; @@ -142,7 +146,6 @@ 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.web.RedirectPage; import net.pterodactylus.util.web.StaticPage; import net.pterodactylus.util.web.TemplatePage; @@ -213,7 +216,7 @@ public class WebInterface { 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; @@ -230,6 +233,9 @@ public class WebInterface { /** 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. * @@ -554,17 +560,17 @@ public class WebInterface { 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")); 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") @@ -574,10 +580,9 @@ public class WebInterface { } else { notificationManager.addNotification(wotMissingNotification); } - Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000), this, "Sone WoT Connector Checker"); } - }, "Sone WoT Connector Checker"); + }, 15, 15, TimeUnit.SECONDS); } /** @@ -585,7 +590,7 @@ public class WebInterface { */ public void stop() { unregisterToadlets(); - Ticker.getInstance().stop(); + ticker.shutdownNow(); } // @@ -953,16 +958,15 @@ public class WebInterface { @Subscribe public void soneLocked(SoneLockedEvent soneLockedEvent) { final Sone sone = soneLockedEvent.sone(); - Object tickerObject = Ticker.getInstance().registerEvent(System.currentTimeMillis() + (5 * 60) * 1000, new Runnable() { + 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); } @@ -975,7 +979,7 @@ public class WebInterface { @Subscribe public void soneUnlocked(SoneUnlockedEvent soneUnlockedEvent) { lockedSonesNotification.remove(soneUnlockedEvent.sone()); - Ticker.getInstance().deregisterEvent(lockedSonesTickerObjects.remove(soneUnlockedEvent.sone())); + lockedSonesTickerObjects.remove(soneUnlockedEvent.sone()).cancel(false); } /**