X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=e3fd103d73495c230eaa7fa0314617ef673c1310;hb=df37c71a5b53af746f2c0c8b7ce8c1d4ae33486f;hp=90fc3142ac0b86ef9e3567cf0d3b97d9ef0329e9;hpb=9359e98d853739ec57c24ef0ff2d69c8ce29847d;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 90fc314..e3fd103 100644
--- a/src/main/java/net/pterodactylus/sone/core/Core.java
+++ b/src/main/java/net/pterodactylus/sone/core/Core.java
@@ -73,6 +73,7 @@ import net.pterodactylus.sone.data.Sone.ShowCustomAvatars;
import net.pterodactylus.sone.data.Sone.SoneStatus;
import net.pterodactylus.sone.data.TemporaryImage;
import net.pterodactylus.sone.database.AlbumBuilder;
+import net.pterodactylus.sone.database.AlbumProvider;
import net.pterodactylus.sone.database.Database;
import net.pterodactylus.sone.database.DatabaseException;
import net.pterodactylus.sone.database.ImageBuilder;
@@ -99,10 +100,14 @@ import net.pterodactylus.util.thread.NamedThreadFactory;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
+import com.google.common.collect.Ordering;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
@@ -114,7 +119,7 @@ import com.google.inject.Singleton;
* @author David âBombeâ Roden
*/
@Singleton
-public class Core extends AbstractService implements SoneProvider, PostProvider, PostReplyProvider {
+public class Core extends AbstractService implements SoneProvider, PostProvider, PostReplyProvider, AlbumProvider {
/** The logger. */
private static final Logger logger = getLogger(Core.class.getName());
@@ -435,8 +440,17 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
* {@inheritDoc}
*/
@Override
- public Optional getPost(String postId) {
- return database.getPost(postId);
+ public Optional getPost(final String postId) {
+ Optional post = database.getPost(postId);
+ if (post.isPresent() || !isCompatibilityMode(CompatibilityMode.oldElementIds)) {
+ return post;
+ }
+ return FluentIterable.from(getSones()).transformAndConcat(Sone.toAllPosts).filter(new Predicate() {
+ @Override
+ public boolean apply(Post input) {
+ return (input != null) && input.getInternalId().equals(postId);
+ }
+ }).first();
}
/**
@@ -478,7 +492,14 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
*/
@Override
public List getReplies(final String postId) {
- return database.getReplies(postId);
+ Builder postReplies = ImmutableList.builder().addAll(database.getReplies(postId));
+ if (isCompatibilityMode(CompatibilityMode.oldElementIds)) {
+ Optional post = getPost(postId);
+ if (post.isPresent()) {
+ postReplies.addAll(database.getReplies(post.get().getInternalId()));
+ }
+ }
+ return Ordering.from(Reply.TIME_COMPARATOR).sortedCopy(postReplies.build());
}
/**
@@ -494,6 +515,11 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
if (sone.getLikedPostIds().contains(post.getId())) {
sones.add(sone);
}
+ if (isCompatibilityMode(CompatibilityMode.oldElementIds)) {
+ if (sone.getLikedPostIds().contains(post.getInternalId())) {
+ sones.add(sone);
+ }
+ }
}
return sones;
}
@@ -511,6 +537,11 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
if (sone.getLikedReplyIds().contains(reply.getId())) {
sones.add(sone);
}
+ if (isCompatibilityMode(CompatibilityMode.oldElementIds)) {
+ if (sone.getLikedReplyIds().contains(reply.getInternalId())) {
+ sones.add(sone);
+ }
+ }
}
return sones;
}
@@ -549,8 +580,8 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
* @return The album with the given ID, or {@code null} if no album with the
* given ID exists
*/
- public Album getAlbum(String albumId) {
- return database.getAlbum(albumId).orNull();
+ public Optional getAlbum(String albumId) {
+ return database.getAlbum(albumId);
}
public ImageBuilder imageBuilder() {
@@ -1502,7 +1533,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
int replyCounter = 0;
for (PostReply reply : sone.getReplies()) {
String replyPrefix = sonePrefix + "/Replies/" + replyCounter++;
- configuration.getStringValue(replyPrefix + "/ID").setValue(reply.getId());
+ configuration.getStringValue(replyPrefix + "/ID").setValue(reply.getInternalId());
configuration.getStringValue(replyPrefix + "/Post/ID").setValue(reply.getPostId());
configuration.getLongValue(replyPrefix + "/Time").setValue(reply.getTime());
configuration.getStringValue(replyPrefix + "/Text").setValue(reply.getText());
@@ -1611,6 +1642,9 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
configuration.getStringValue("SoneFollowingTimes/" + soneCounter + "/Sone").setValue(null);
}
+ /* save compatibility modes. */
+ configuration.getBooleanValue("CompatibilityModes/OldElementIds").setValue(compatibilityModes.contains(CompatibilityMode.oldElementIds));
+
/* save known posts. */
database.save();
@@ -1659,6 +1693,11 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
}
++soneCounter;
}
+
+ /* load compatibility modes. */
+ if (configuration.getBooleanValue("CompatibilityModes/OldElementIds").getValue(false)) {
+ setCompatibilityMode(CompatibilityMode.oldElementIds);
+ }
}
/**