X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=e08acd136f1ec212732c879bd98d7407a9e470e6;hp=87add90bf26568d0b54020cd6cb433d47dd2b5cb;hb=ffb2ea1773cf7e3d1b7fc41ab0e9c3c1eed514e0;hpb=11f3457415c9122b5d11840d24186971af28add9 diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 87add90..e08acd1 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -20,6 +20,7 @@ package net.pterodactylus.sone.core; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Predicates.not; +import static java.lang.String.format; import static net.pterodactylus.sone.data.Sone.LOCAL_SONE_FILTER; import java.net.MalformedURLException; @@ -38,7 +39,10 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; +import net.pterodactylus.sone.core.ConfigurationSoneParser.InvalidAlbumFound; +import net.pterodactylus.sone.core.ConfigurationSoneParser.InvalidParentAlbumFound; import net.pterodactylus.sone.core.ConfigurationSoneParser.InvalidPostFound; +import net.pterodactylus.sone.core.ConfigurationSoneParser.InvalidPostReplyFound; import net.pterodactylus.sone.core.Options.DefaultOption; import net.pterodactylus.sone.core.SoneInserter.SetInsertionDelay; import net.pterodactylus.sone.core.event.ImageInsertFinishedEvent; @@ -66,6 +70,7 @@ import net.pterodactylus.sone.data.Sone.ShowCustomAvatars; import net.pterodactylus.sone.data.Sone.SoneStatus; import net.pterodactylus.sone.data.SoneImpl; import net.pterodactylus.sone.data.TemporaryImage; +import net.pterodactylus.sone.database.AlbumBuilder; import net.pterodactylus.sone.database.Database; import net.pterodactylus.sone.database.DatabaseException; import net.pterodactylus.sone.database.PostBuilder; @@ -583,16 +588,8 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, return posts; } - /** - * Returns the album with the given ID, creating a new album if no album - * with the given ID can be found. - * - * @param albumId - * The ID of the album - * @return The album with the given ID - */ - public Album getOrCreateAlbum(String albumId) { - return getAlbum(albumId, true); + public AlbumBuilder albumBuilder() { + return database.newAlbumBuilder(); } /** @@ -601,23 +598,11 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * * @param albumId * The ID of the album - * @param create - * {@code true} to create a new album if none exists for the - * given ID * @return The album with the given ID, or {@code null} if no album with the - * given ID exists and {@code create} is {@code false} + * given ID exists */ - public Album getAlbum(String albumId, boolean create) { - Optional album = database.getAlbum(albumId); - if (album.isPresent()) { - return album.get(); - } - if (!create) { - return null; - } - Album newAlbum = database.newAlbumBuilder().withId(albumId).build(); - database.storeAlbum(newAlbum); - return newAlbum; + public Album getAlbum(String albumId) { + return database.getAlbum(albumId).orNull(); } /** @@ -1122,84 +1107,37 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, } /* load replies. */ - Set replies = new HashSet(); - while (true) { - String replyPrefix = sonePrefix + "/Replies/" + replies.size(); - String replyId = configuration.getStringValue(replyPrefix + "/ID").getValue(null); - if (replyId == null) { - break; - } - String postId = configuration.getStringValue(replyPrefix + "/Post/ID").getValue(null); - long replyTime = configuration.getLongValue(replyPrefix + "/Time").getValue((long) 0); - String replyText = configuration.getStringValue(replyPrefix + "/Text").getValue(null); - if ((postId == null) || (replyTime == 0) || (replyText == null)) { - logger.log(Level.WARNING, "Invalid reply found, aborting load!"); - return; - } - PostReplyBuilder postReplyBuilder = postReplyBuilder().withId(replyId).from(sone.getId()).to(postId).withTime(replyTime).withText(replyText); - replies.add(postReplyBuilder.build()); + Collection replies; + try { + replies = configurationSoneParser.parsePostReplies(database); + } catch (InvalidPostReplyFound iprf) { + logger.log(Level.WARNING, "Invalid reply found, aborting load!"); + return; } /* load post likes. */ - Set likedPostIds = new HashSet(); - while (true) { - String likedPostId = configuration.getStringValue(sonePrefix + "/Likes/Post/" + likedPostIds.size() + "/ID").getValue(null); - if (likedPostId == null) { - break; - } - likedPostIds.add(likedPostId); - } + Set likedPostIds = + configurationSoneParser.parseLikedPostIds(); /* load reply likes. */ - Set likedReplyIds = new HashSet(); - while (true) { - String likedReplyId = configuration.getStringValue(sonePrefix + "/Likes/Reply/" + likedReplyIds.size() + "/ID").getValue(null); - if (likedReplyId == null) { - break; - } - likedReplyIds.add(likedReplyId); - } + Set likedReplyIds = + configurationSoneParser.parseLikedPostReplyIds(); /* load friends. */ - Set friends = new HashSet(); - while (true) { - String friendId = configuration.getStringValue(sonePrefix + "/Friends/" + friends.size() + "/ID").getValue(null); - if (friendId == null) { - break; - } - friends.add(friendId); - } + Set friends = configurationSoneParser.parseFriends(); /* load albums. */ - List topLevelAlbums = new ArrayList(); - int albumCounter = 0; - while (true) { - String albumPrefix = sonePrefix + "/Albums/" + albumCounter++; - String albumId = configuration.getStringValue(albumPrefix + "/ID").getValue(null); - if (albumId == null) { - break; - } - String albumTitle = configuration.getStringValue(albumPrefix + "/Title").getValue(null); - String albumDescription = configuration.getStringValue(albumPrefix + "/Description").getValue(null); - String albumParentId = configuration.getStringValue(albumPrefix + "/Parent").getValue(null); - String albumImageId = configuration.getStringValue(albumPrefix + "/AlbumImage").getValue(null); - if ((albumTitle == null) || (albumDescription == null)) { - logger.log(Level.WARNING, "Invalid album found, aborting load!"); - return; - } - Album album = getOrCreateAlbum(albumId).setSone(sone).modify().setTitle(albumTitle).setDescription(albumDescription).setAlbumImage(albumImageId).update(); - if (albumParentId != null) { - Album parentAlbum = getAlbum(albumParentId, false); - if (parentAlbum == null) { - logger.log(Level.WARNING, String.format("Invalid parent album ID: %s", albumParentId)); - return; - } - parentAlbum.addAlbum(album); - } else { - if (!topLevelAlbums.contains(album)) { - topLevelAlbums.add(album); - } - } + List topLevelAlbums; + try { + topLevelAlbums = + configurationSoneParser.parseTopLevelAlbums(database); + } catch (InvalidAlbumFound iaf) { + logger.log(Level.WARNING, "Invalid album found, aborting load!"); + return; + } catch (InvalidParentAlbumFound ipaf) { + logger.log(Level.WARNING, format("Invalid parent album ID: %s", + ipaf.getAlbumParentId())); + return; } /* load images. */ @@ -1221,7 +1159,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, logger.log(Level.WARNING, "Invalid image found, aborting load!"); return; } - Album album = getAlbum(albumId, false); + Album album = getAlbum(albumId); if (album == null) { logger.log(Level.WARNING, "Invalid album image encountered, aborting load!"); return; @@ -1472,9 +1410,8 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * @return The new album */ public Album createAlbum(Sone sone, Album parent) { - Album album = database.newAlbumBuilder().randomId().build(); + Album album = database.newAlbumBuilder().randomId().by(sone).build(); database.storeAlbum(album); - album.setSone(sone); parent.addAlbum(album); return album; }