Fire events when locking and unlocking Sones.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index 24f1209..2ef2d57 100644 (file)
@@ -710,7 +710,9 @@ public class Core implements IdentityListener {
         */
        public void lockSone(Sone sone) {
                synchronized (lockedSones) {
-                       lockedSones.add(sone);
+                       if (lockedSones.add(sone)) {
+                               coreListenerManager.fireSoneLocked(sone);
+                       }
                }
        }
 
@@ -723,7 +725,9 @@ public class Core implements IdentityListener {
         */
        public void unlockSone(Sone sone) {
                synchronized (lockedSones) {
-                       lockedSones.remove(sone);
+                       if (lockedSones.remove(sone)) {
+                               coreListenerManager.fireSoneUnlocked(sone);
+                       }
                }
        }
 
@@ -885,6 +889,9 @@ public class Core implements IdentityListener {
                                if (!soneRescueMode) {
                                        for (Post post : storedSone.getPosts()) {
                                                posts.remove(post.getId());
+                                               if (!sone.getPosts().contains(post)) {
+                                                       coreListenerManager.firePostRemoved(post);
+                                               }
                                        }
                                }
                                synchronized (newPosts) {
@@ -902,6 +909,9 @@ public class Core implements IdentityListener {
                                if (!soneRescueMode) {
                                        for (Reply reply : storedSone.getReplies()) {
                                                replies.remove(reply.getId());
+                                               if (!sone.getReplies().contains(reply)) {
+                                                       coreListenerManager.fireReplyRemoved(reply);
+                                               }
                                        }
                                }
                                synchronized (newReplies) {
@@ -1111,7 +1121,7 @@ public class Core implements IdentityListener {
         * @param sone
         *            The Sone to save
         */
-       public void saveSone(Sone sone) {
+       public synchronized void saveSone(Sone sone) {
                if (!isLocalSone(sone)) {
                        logger.log(Level.FINE, "Tried to save non-local Sone: %s", sone);
                        return;
@@ -1143,9 +1153,7 @@ public class Core implements IdentityListener {
                        for (Post post : sone.getPosts()) {
                                String postPrefix = sonePrefix + "/Posts/" + postCounter++;
                                configuration.getStringValue(postPrefix + "/ID").setValue(post.getId());
-                               if (post.getRecipient() != null) {
-                                       configuration.getStringValue(postPrefix + "/Recipient").setValue(post.getRecipient().getId());
-                               }
+                               configuration.getStringValue(postPrefix + "/Recipient").setValue((post.getRecipient() != null) ? post.getRecipient().getId() : null);
                                configuration.getLongValue(postPrefix + "/Time").setValue(post.getTime());
                                configuration.getStringValue(postPrefix + "/Text").setValue(post.getText());
                        }
@@ -1183,6 +1191,7 @@ public class Core implements IdentityListener {
                        }
                        configuration.getStringValue(sonePrefix + "/Friends/" + friendCounter + "/ID").setValue(null);
 
+                       configuration.save();
                        logger.log(Level.INFO, "Sone %s saved.", sone);
                } catch (ConfigurationException ce1) {
                        logger.log(Level.WARNING, "Could not save Sone: " + sone, ce1);
@@ -1404,7 +1413,7 @@ public class Core implements IdentityListener {
        /**
         * Saves the current options.
         */
-       public void saveConfiguration() {
+       public synchronized void saveConfiguration() {
                /* store the options first. */
                try {
                        configuration.getIntValue("Option/InsertionDelay").setValue(options.getIntegerOption("InsertionDelay").getReal());