X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneInserter.java;h=f654d09fa81ad0ff11cadd47d31bb8922f99a35f;hp=cc5f6894d8c201957289ed6540bf6c940c86c597;hb=89a905395984ec35e313b07594e21773ffd3d9d8;hpb=e5647042f01e94a78f6411216cf77a67f52e1b7a diff --git a/src/main/java/net/pterodactylus/sone/core/SoneInserter.java b/src/main/java/net/pterodactylus/sone/core/SoneInserter.java index cc5f689..f654d09 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneInserter.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneInserter.java @@ -83,6 +83,9 @@ public class SoneInserter extends AbstractService { /** The Sone to insert. */ private final Sone sone; + /** The insert listener manager. */ + private SoneInsertListenerManager soneInsertListenerManager; + /** Whether a modification has been detected. */ private volatile boolean modified = false; @@ -104,6 +107,31 @@ public class SoneInserter extends AbstractService { this.core = core; this.freenetInterface = freenetInterface; this.sone = sone; + this.soneInsertListenerManager = new SoneInsertListenerManager(sone); + } + + // + // LISTENER MANAGEMENT + // + + /** + * Adds a listener for Sone insert events. + * + * @param soneInsertListener + * The Sone insert listener + */ + public void addSoneInsertListener(SoneInsertListener soneInsertListener) { + soneInsertListenerManager.addListener(soneInsertListener); + } + + /** + * Removes a listener for Sone insert events. + * + * @param soneInsertListener + * The Sone insert listener + */ + public void removeSoneInsertListener(SoneInsertListener soneInsertListener) { + soneInsertListenerManager.removeListener(soneInsertListener); } // @@ -206,7 +234,9 @@ public class SoneInserter extends AbstractService { core.setSoneStatus(sone, SoneStatus.inserting); long insertTime = System.currentTimeMillis(); insertInformation.setTime(insertTime); + soneInsertListenerManager.fireInsertStarted(); FreenetURI finalUri = freenetInterface.insertDirectory(insertInformation.getInsertUri(), insertInformation.generateManifestEntries(), "index.html"); + soneInsertListenerManager.fireInsertFinished(System.currentTimeMillis() - insertTime); /* at this point we might already be stopped. */ if (shouldStop()) { /* if so, bail out, don’t change anything. */ @@ -214,10 +244,11 @@ public class SoneInserter extends AbstractService { } sone.setTime(insertTime); sone.setLatestEdition(finalUri.getEdition()); - core.saveSone(sone); + core.touchConfiguration(); success = true; logger.log(Level.INFO, "Inserted Sone “%s” at %s.", new Object[] { sone.getName(), finalUri }); } catch (SoneException se1) { + soneInsertListenerManager.fireInsertAborted(se1); logger.log(Level.WARNING, "Could not insert Sone “" + sone.getName() + "”!", se1); } finally { core.setSoneStatus(sone, SoneStatus.idle); @@ -347,6 +378,7 @@ public class SoneInserter extends AbstractService { } TemplateContext templateContext = templateContextFactory.createTemplateContext(); + templateContext.set("core", core); templateContext.set("currentSone", soneProperties); templateContext.set("currentEdition", core.getUpdateChecker().getLatestEdition()); templateContext.set("version", SonePlugin.VERSION);