X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=6a90c7afe2148864d9a5a4d0b38ebcce323501e2;hb=4448c88ba0401366f4566eb42a850ded674f8ceb;hp=7f901846d8eccb6db5956777302d22ee23abfb5f;hpb=44c19966b15e377eb446aff94468d2e4457e89e5;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 7f90184..6a90c7a 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -731,7 +731,6 @@ public class Core implements IdentityListener, UpdateListener { } /** - * * Returns the album with the given ID, creating a new album if no album * with the given ID can be found. * @@ -1320,6 +1319,40 @@ public class Core implements IdentityListener, UpdateListener { friends.add(friendId); } + /* load albums. */ + Map albums = new HashMap(); + List topLevelAlbums = new ArrayList(); + while (true) { + String albumPrefix = sonePrefix + "/Albums/" + albums.size(); + String albumId = configuration.getStringValue(albumPrefix + "/ID").getValue(null); + if (albumId == null) { + break; + } + String albumName = configuration.getStringValue(albumPrefix + "/Name").getValue(null); + String albumDescription = configuration.getStringValue(albumPrefix + "/Description").getValue(null); + String albumParentId = configuration.getStringValue(albumPrefix + "/Parent").getValue(null); + if ((albumName == null) || (albumDescription == null)) { + logger.log(Level.WARNING, "Invalid album found, aborting load!"); + return; + } + Album album = new Album(albumId).setSone(sone).setName(albumName).setDescription(albumDescription); + albums.put(albumId, album); + if (albumParentId != null) { + Album parentAlbum = albums.get(albumParentId); + if (parentAlbum == null) { + logger.log(Level.WARNING, "Invalid parent album ID: " + albumParentId); + return; + } + parentAlbum.addAlbum(album); + } else { + topLevelAlbums.add(album); + } + } + + /* load options. */ + sone.getOptions().addBooleanOption("AutoFollow", new DefaultOption(false)); + sone.getOptions().getBooleanOption("AutoFollow").set(configuration.getBooleanValue(sonePrefix + "/Options/AutoFollow").getValue(null)); + /* if we’re still here, Sone was loaded successfully. */ synchronized (sone) { sone.setTime(soneTime); @@ -1329,6 +1362,7 @@ public class Core implements IdentityListener, UpdateListener { sone.setLikePostIds(likedPostIds); sone.setLikeReplyIds(likedReplyIds); sone.setFriends(friends); + sone.setAlbums(topLevelAlbums); soneInserters.get(sone).setLastInsertFingerprint(lastInsertFingerprint); } synchronized (newSones) { @@ -1435,6 +1469,31 @@ public class Core implements IdentityListener, UpdateListener { } configuration.getStringValue(sonePrefix + "/Friends/" + friendCounter + "/ID").setValue(null); + /* save albums. first, collect in a flat structure, top-level first. */ + List albums = new ArrayList(); + albums.addAll(sone.getAlbums()); + int lastAlbumIndex = 0; + while (lastAlbumIndex < albums.size()) { + int previousAlbumCount = albums.size(); + for (Album album : new ArrayList(albums.subList(lastAlbumIndex, albums.size()))) { + albums.addAll(album.getAlbums()); + } + lastAlbumIndex = previousAlbumCount; + } + + int albumCounter = 0; + for (Album album : albums) { + String albumPrefix = sonePrefix + "/Albums/" + albumCounter++; + configuration.getStringValue(albumPrefix + "/ID").setValue(album.getId()); + configuration.getStringValue(albumPrefix + "/Name").setValue(album.getName()); + configuration.getStringValue(albumPrefix + "/Description").setValue(album.getDescription()); + configuration.getStringValue(albumPrefix + "/Parent").setValue(album.getParent() == null ? null : album.getParent().getId()); + } + configuration.getStringValue(sonePrefix + "/Albums/" + albumCounter + "/ID").setValue(null); + + /* save options. */ + configuration.getBooleanValue(sonePrefix + "/Options/AutoFollow").setValue(sone.getOptions().getBooleanOption("AutoFollow").getReal()); + configuration.save(); logger.log(Level.INFO, "Sone %s saved.", sone); } catch (ConfigurationException ce1) { @@ -1711,8 +1770,9 @@ public class Core implements IdentityListener, UpdateListener { album.setSone(sone); if (parent != null) { parent.addAlbum(album); + } else { + sone.addAlbum(album); } - sone.addAlbum(album); return album; }