X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FConfigurationLoader.java;h=e471f0d4a4a0db54c5556cbe0721a9477f224880;hp=fe231539d6f19ed420e46ebb8ce80f934c2cd139;hb=b91623458a0059ec31e6f57768b5814df97c093a;hpb=723de3522aa5c04634932f05bf4075304979c7a9 diff --git a/src/main/java/net/pterodactylus/sone/database/memory/ConfigurationLoader.java b/src/main/java/net/pterodactylus/sone/database/memory/ConfigurationLoader.java index fe23153..e471f0d 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/ConfigurationLoader.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/ConfigurationLoader.java @@ -2,10 +2,17 @@ package net.pterodactylus.sone.database.memory; import static java.util.logging.Level.WARNING; +import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.logging.Logger; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + import net.pterodactylus.util.config.Configuration; import net.pterodactylus.util.config.ConfigurationException; @@ -16,14 +23,21 @@ import net.pterodactylus.util.config.ConfigurationException; */ public class ConfigurationLoader { - private static final Logger logger = - Logger.getLogger(ConfigurationLoader.class.getName()); + private static final Logger logger = Logger.getLogger(ConfigurationLoader.class.getName()); private final Configuration configuration; public ConfigurationLoader(Configuration configuration) { this.configuration = configuration; } + public synchronized Set loadFriends(String localSoneId) { + return loadIds("Sone/" + localSoneId + "/Friends"); + } + + public void saveFriends(String soneId, Collection friends) { + saveIds("Sone/" + soneId + "/Friends", friends); + } + public synchronized Set loadKnownPosts() { return loadIds("KnownPosts"); } @@ -36,6 +50,50 @@ public class ConfigurationLoader { return loadIds("Bookmarks/Post"); } + @Nullable + public synchronized Long getSoneFollowingTime(@Nonnull String soneId) { + return loadSoneFollowingTimes().get(soneId); + } + + public synchronized void removeSoneFollowingTime(@Nonnull String soneId) { + Map soneFollowingTimes = loadSoneFollowingTimes(); + soneFollowingTimes.remove(soneId); + storeSoneFollowingTimes(soneFollowingTimes); + } + + public synchronized void setSoneFollowingTime(@Nonnull String soneId, long time) { + Map soneFollowingTimes = loadSoneFollowingTimes(); + soneFollowingTimes.put(soneId, time); + storeSoneFollowingTimes(soneFollowingTimes); + } + + private synchronized Map loadSoneFollowingTimes() { + Map soneFollowingTimes = new HashMap<>(); + int soneCounter = 0; + while (true) { + String soneId = configuration.getStringValue("SoneFollowingTimes/" + soneCounter + "/Sone").getValue(null); + if (soneId == null) { + break; + } + soneFollowingTimes.put(soneId, configuration.getLongValue("SoneFollowingTimes/" + soneCounter++ + "/Time").getValue(null)); + } + return soneFollowingTimes; + } + + private synchronized void storeSoneFollowingTimes(Map soneFollowingTimes) { + int soneCounter = 0; + try { + for (Entry soneFollowingTime : soneFollowingTimes.entrySet()) { + configuration.getStringValue("SoneFollowingTimes/" + soneCounter + "/Sone").setValue(soneFollowingTime.getKey()); + configuration.getLongValue("SoneFollowingTimes/" + soneCounter + "/Time").setValue(soneFollowingTime.getValue()); + ++soneCounter; + } + configuration.getStringValue("SoneFollowingTimes/" + soneCounter + "/Sone").setValue(null); + } catch (ConfigurationException ce1) { + logger.log(WARNING, "Could not save Sone following times!", ce1); + } + } + private Set loadIds(String prefix) { Set ids = new HashSet(); int idCounter = 0; @@ -56,10 +114,10 @@ public class ConfigurationLoader { saveIds("Bookmarks/Post", bookmarkedPosts); } - private void saveIds(String prefix, Set bookmarkedPosts) { + private void saveIds(String prefix, Collection ids) { try { int idCounter = 0; - for (String id : bookmarkedPosts) { + for (String id : ids) { configuration .getStringValue(prefix + "/" + idCounter++ + "/ID") .setValue(id);