Insert image after creating it.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index 8a6236a..c30aef6 100644 (file)
@@ -60,7 +60,7 @@ import freenet.keys.FreenetURI;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
-public class Core implements IdentityListener, UpdateListener {
+public class Core implements IdentityListener, UpdateListener, ImageInsertListener {
 
        /**
         * Enumeration for the possible states of a {@link Sone}.
@@ -109,6 +109,9 @@ public class Core implements IdentityListener, UpdateListener {
        /** The Sone downloader. */
        private final SoneDownloader soneDownloader;
 
+       /** The image inserter. */
+       private final ImageInserter imageInserter;
+
        /** The update checker. */
        private final UpdateChecker updateChecker;
 
@@ -192,6 +195,7 @@ public class Core implements IdentityListener, UpdateListener {
                this.freenetInterface = freenetInterface;
                this.identityManager = identityManager;
                this.soneDownloader = new SoneDownloader(this, freenetInterface);
+               this.imageInserter = new ImageInserter(this, freenetInterface);
                this.updateChecker = new UpdateChecker(freenetInterface);
        }
 
@@ -1339,8 +1343,9 @@ public class Core implements IdentityListener, UpdateListener {
 
                /* load albums. */
                List<Album> topLevelAlbums = new ArrayList<Album>();
+               int albumCounter = 0;
                while (true) {
-                       String albumPrefix = sonePrefix + "/Albums/" + albums.size();
+                       String albumPrefix = sonePrefix + "/Albums/" + albumCounter++;
                        String albumId = configuration.getStringValue(albumPrefix + "/ID").getValue(null);
                        if (albumId == null) {
                                break;
@@ -1859,6 +1864,7 @@ public class Core implements IdentityListener, UpdateListener {
                synchronized (images) {
                        images.put(image.getId(), image);
                }
+               imageInserter.insertImage(temporaryImage, image);
                return image;
        }
 
@@ -1886,7 +1892,7 @@ public class Core implements IdentityListener, UpdateListener {
         * @param temporaryImage
         *            The temporary image to delete
         */
-       public void deteleTemporaryImage(TemporaryImage temporaryImage) {
+       public void deleteTemporaryImage(TemporaryImage temporaryImage) {
                Validation.begin().isNotNull("Temporary Image", temporaryImage).check();
                deleteTemporaryImage(temporaryImage.getId());
        }
@@ -2182,6 +2188,49 @@ public class Core implements IdentityListener, UpdateListener {
                coreListenerManager.fireUpdateFound(version, releaseTime, latestEdition);
        }
 
+       //
+       // INTERFACE ImageInsertListener
+       //
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void imageInsertStarted(Image image) {
+               logger.log(Level.WARNING, "Image insert started for " + image);
+               coreListenerManager.fireImageInsertStarted(image);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void imageInsertAborted(Image image) {
+               logger.log(Level.WARNING, "Image insert aborted for " + image);
+               coreListenerManager.fireImageInsertAborted(image);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void imageInsertFinished(Image image, FreenetURI key) {
+               logger.log(Level.WARNING, "Image insert finished for " + image + ": " + key);
+               image.setKey(key.toString());
+               deleteTemporaryImage(image.getId());
+               saveSone(image.getSone());
+               coreListenerManager.fireImageInsertFinished(image);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void imageInsertFailed(Image image, Throwable cause) {
+               logger.log(Level.WARNING, "Image insert failed for " + image, cause);
+               coreListenerManager.fireImageInsertFailed(image, cause);
+       }
+
        /**
         * Convenience interface for external classes that want to access the core’s
         * configuration.