X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FConfigurationSoneParser.java;h=7b7be9ff421107bd366dfb4bad3ba88c19cb3385;hp=39dcd12d9cb58f801fa5b4a2ab5cb3702f1ec716;hb=ffb2ea1773cf7e3d1b7fc41ab0e9c3c1eed514e0;hpb=ec06ae64c86f0b06bb0cf9f8b289e7907e81dffa diff --git a/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java b/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java index 39dcd12..7b7be9f 100644 --- a/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java +++ b/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java @@ -1,14 +1,20 @@ package net.pterodactylus.sone.core; +import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; import javax.annotation.Nullable; +import net.pterodactylus.sone.data.Album; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.database.AlbumBuilderFactory; import net.pterodactylus.sone.database.PostBuilder; import net.pterodactylus.sone.database.PostBuilderFactory; import net.pterodactylus.sone.database.PostReplyBuilder; @@ -175,8 +181,67 @@ public class ConfigurationSoneParser { return friends; } + public List parseTopLevelAlbums( + AlbumBuilderFactory albumBuilderFactory) { + Map albums = new HashMap(); + List topLevelAlbums = new ArrayList(); + int albumCounter = 0; + while (true) { + String albumPrefix = "/Albums/" + albumCounter++; + String albumId = getString(albumPrefix + "/ID", null); + if (albumId == null) { + break; + } + String albumTitle = getString(albumPrefix + "/Title", null); + String albumDescription = + getString(albumPrefix + "/Description", null); + String albumParentId = getString(albumPrefix + "/Parent", null); + String albumImageId = + getString(albumPrefix + "/AlbumImage", null); + if ((albumTitle == null) || (albumDescription == null)) { + throw new InvalidAlbumFound(); + } + Album album = albumBuilderFactory.newAlbumBuilder() + .withId(albumId) + .by(sone) + .build() + .modify() + .setTitle(albumTitle) + .setDescription(albumDescription) + .setAlbumImage(albumImageId) + .update(); + if (albumParentId != null) { + Album parentAlbum = albums.get(albumParentId); + if (parentAlbum == null) { + throw new InvalidParentAlbumFound(albumParentId); + } + parentAlbum.addAlbum(album); + } else { + topLevelAlbums.add(album); + } + albums.put(albumId, album); + } + return topLevelAlbums; + } + public static class InvalidPostFound extends RuntimeException { } public static class InvalidPostReplyFound extends RuntimeException { } + public static class InvalidAlbumFound extends RuntimeException { } + + public static class InvalidParentAlbumFound extends RuntimeException { + + private final String albumParentId; + + public InvalidParentAlbumFound(String albumParentId) { + this.albumParentId = albumParentId; + } + + public String getAlbumParentId() { + return albumParentId; + } + + } + }