Add Sone-following times.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index aa5b820..d0898f1 100644 (file)
@@ -136,6 +136,9 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
        /* synchronize access on itself. */
        private final Map<Sone, SoneStatus> soneStatuses = new HashMap<Sone, SoneStatus>();
 
+       /** The times Sones were followed. */
+       private final Map<Sone, Long> soneFollowingTimes = new HashMap<Sone, Long>();
+
        /** Locked local Sones. */
        /* synchronize on itself. */
        private final Set<Sone> lockedSones = new HashSet<Sone>();
@@ -1008,6 +1011,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                }
                Sone sone = addLocalSone(ownIdentity);
                sone.getOptions().addBooleanOption("AutoFollow", new DefaultOption<Boolean>(false));
+               sone.getOptions().addBooleanOption("EnableSoneInsertNotifications", new DefaultOption<Boolean>(false));
                sone.getOptions().addBooleanOption("ShowNotification/NewSones", new DefaultOption<Boolean>(true));
                sone.getOptions().addBooleanOption("ShowNotification/NewPosts", new DefaultOption<Boolean>(true));
                sone.getOptions().addBooleanOption("ShowNotification/NewReplies", new DefaultOption<Boolean>(true));
@@ -1511,6 +1515,9 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                /* load options. */
                sone.getOptions().getBooleanOption("AutoFollow").set(configuration.getBooleanValue(sonePrefix + "/Options/AutoFollow").getValue(null));
                sone.getOptions().getBooleanOption("EnableSoneInsertNotifications").set(configuration.getBooleanValue(sonePrefix + "/Options/EnableSoneInsertNotifications").getValue(null));
+               sone.getOptions().getBooleanOption("ShowNotification/NewSones").set(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewSones").getValue(null));
+               sone.getOptions().getBooleanOption("ShowNotification/NewPosts").set(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewPosts").getValue(null));
+               sone.getOptions().getBooleanOption("ShowNotification/NewReplies").set(configuration.getBooleanValue(sonePrefix + "/Options/ShowNotification/NewReplies").getValue(null));
 
                /* if we’re still here, Sone was loaded successfully. */
                synchronized (sone) {
@@ -2192,6 +2199,17 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                                configuration.getStringValue("KnownSone/" + soneCounter + "/ID").setValue(null);
                        }
 
+                       /* save Sone following times. */
+                       soneCounter = 0;
+                       synchronized (soneFollowingTimes) {
+                               for (Entry<Sone, Long> soneFollowingTime : soneFollowingTimes.entrySet()) {
+                                       configuration.getStringValue("SoneFollowingTimes/" + soneCounter + "/Sone").setValue(soneFollowingTime.getKey().getId());
+                                       configuration.getLongValue("SoneFollowingTimes/" + soneCounter + "/Time").setValue(soneFollowingTime.getValue());
+                                       ++soneCounter;
+                               }
+                               configuration.getStringValue("SoneFollowingTimes/" + soneCounter + "/Sone").setValue(null);
+                       }
+
                        /* save known posts. */
                        int postCounter = 0;
                        synchronized (newPosts) {
@@ -2308,6 +2326,20 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis
                        }
                }
 
+               /* load Sone following times. */
+               soneCounter = 0;
+               while (true) {
+                       String soneId = configuration.getStringValue("SoneFollowingTimes/" + soneCounter + "/Sone").getValue(null);
+                       if (soneId == null) {
+                               break;
+                       }
+                       long time = configuration.getLongValue("SoneFollowingTimes/" + soneCounter + "/Time").getValue(Long.MAX_VALUE);
+                       synchronized (soneFollowingTimes) {
+                               soneFollowingTimes.put(getSone(soneId), time);
+                       }
+                       ++soneCounter;
+               }
+
                /* load known posts. */
                int postCounter = 0;
                while (true) {