X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=f5d695cb9112c64211971e57834ccafc32e3634b;hb=102382a92bd1fda430a0bd882b2e065426a48e64;hp=8a6236a1713a39f3d767a26387e6c4600bb43f1e;hpb=41ad88e59a3249031c6b546c8189204d99596e26;p=Sone.git
diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java
index 8a6236a..f5d695c 100644
--- a/src/main/java/net/pterodactylus/sone/core/Core.java
+++ b/src/main/java/net/pterodactylus/sone/core/Core.java
@@ -60,7 +60,7 @@ import freenet.keys.FreenetURI;
*
* @author David âBombeâ Roden
*/
-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 topLevelAlbums = new ArrayList();
+ 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;
@@ -1842,6 +1847,29 @@ public class Core implements IdentityListener, UpdateListener {
}
/**
+ * Deletes the given album. The owner of the album has to be a local Sone,
+ * and the album has to be {@link Album#isEmpty() empty} to be deleted.
+ *
+ * @param album
+ * The album to remove
+ */
+ public void deleteAlbum(Album album) {
+ Validation.begin().isNotNull("Album", album).check().is("Local Sone", isLocalSone(album.getSone())).check();
+ if (!album.isEmpty()) {
+ return;
+ }
+ if (album.getParent() == null) {
+ album.getSone().removeAlbum(album);
+ } else {
+ album.getParent().removeAlbum(album);
+ }
+ synchronized (albums) {
+ albums.remove(album.getId());
+ }
+ saveSone(album.getSone());
+ }
+
+ /**
* Creates a new image.
*
* @param sone
@@ -1859,10 +1887,29 @@ public class Core implements IdentityListener, UpdateListener {
synchronized (images) {
images.put(image.getId(), image);
}
+ imageInserter.insertImage(temporaryImage, image);
return image;
}
/**
+ * Deletes the given image. This method will also delete a matching
+ * temporary image.
+ *
+ * @see #deleteTemporaryImage(TemporaryImage)
+ * @param image
+ * The image to delete
+ */
+ public void deleteImage(Image image) {
+ Validation.begin().isNotNull("Image", image).check().is("Local Sone", isLocalSone(image.getSone())).check();
+ deleteTemporaryImage(image.getId());
+ image.getAlbum().removeImage(image);
+ synchronized (images) {
+ images.remove(image.getId());
+ }
+ saveSone(image.getSone());
+ }
+
+ /**
* Creates a new temporary image.
*
* @param mimeType
@@ -1886,7 +1933,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());
}
@@ -1902,6 +1949,10 @@ public class Core implements IdentityListener, UpdateListener {
synchronized (temporaryImages) {
temporaryImages.remove(imageId);
}
+ Image image = getImage(imageId, false);
+ if (image != null) {
+ imageInserter.cancelImageInsert(image);
+ }
}
/**
@@ -2182,6 +2233,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.