From 60fda3f6fd8cd72151338c831f509dd8d9d0f9ff Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Sun, 3 Feb 2013 23:07:54 +0100 Subject: [PATCH] Only use post IDs in post reply provider interface. --- .../java/net/pterodactylus/sone/core/Core.java | 6 +- .../sone/database/PostReplyProvider.java | 6 +- .../sone/database/memory/MemoryDatabase.java | 408 +++++++++++++++++++++ .../sone/database/memory/MemoryPostDatabase.java | 408 --------------------- .../sone/fcp/AbstractSoneCommand.java | 4 +- .../pterodactylus/sone/template/PostAccessor.java | 2 +- .../net/pterodactylus/sone/web/SearchPage.java | 2 +- .../net/pterodactylus/sone/web/ViewSonePage.java | 2 +- .../net/pterodactylus/sone/web/WebInterface.java | 2 +- 9 files changed, 420 insertions(+), 420 deletions(-) create mode 100644 src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java delete mode 100644 src/main/java/net/pterodactylus/sone/database/memory/MemoryPostDatabase.java diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 34d10bc..c684695 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -543,7 +543,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, * {@inheritDoc} */ @Override - public List getReplies(final Post post) { + public List getReplies(final String postId) { return Ordering.from(Reply.TIME_COMPARATOR).sortedCopy(FluentIterable.from(getSones()).transformAndConcat(new Function>() { @Override @@ -554,7 +554,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, @Override public boolean apply(PostReply reply) { - return post.getId().equals(reply.getPostId()); + return postId.equals(reply.getPostId()); } })); } @@ -1481,7 +1481,7 @@ public class Core extends AbstractService implements SoneProvider, PostProvider, post.setKnown(true); eventBus.post(new MarkPostKnownEvent(post)); touchConfiguration(); - for (PostReply reply : getReplies(post)) { + for (PostReply reply : getReplies(post.getId())) { markReplyKnown(reply); } } diff --git a/src/main/java/net/pterodactylus/sone/database/PostReplyProvider.java b/src/main/java/net/pterodactylus/sone/database/PostReplyProvider.java index 8098f1d..950012f 100644 --- a/src/main/java/net/pterodactylus/sone/database/PostReplyProvider.java +++ b/src/main/java/net/pterodactylus/sone/database/PostReplyProvider.java @@ -43,10 +43,10 @@ public interface PostReplyProvider { /** * Returns all replies for the given post, order ascending by time. * - * @param post - * The post to get all replies for + * @param postId + * The ID of the post to get all replies for * @return All replies for the given post */ - public List getReplies(Post post); + public List getReplies(String postId); } diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java new file mode 100644 index 0000000..eed00ea --- /dev/null +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -0,0 +1,408 @@ +/* + * Sone - MemoryPostDatabase.java - Copyright © 2013 David Roden + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.pterodactylus.sone.database.memory; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import net.pterodactylus.sone.data.Post; +import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.data.impl.AbstractPostBuilder; +import net.pterodactylus.sone.database.PostBuilder; +import net.pterodactylus.sone.database.PostDatabase; +import net.pterodactylus.sone.database.SoneProvider; +import net.pterodactylus.util.config.Configuration; +import net.pterodactylus.util.config.ConfigurationException; + +import com.google.common.base.Optional; +import com.google.inject.Inject; + +/** + * Memory-based {@link PostDatabase} implementation. + * + * @author David ‘Bombe’ Roden + */ +public class MemoryPostDatabase implements PostDatabase { + + /** The lock. */ + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + + /** The Sone provider. */ + private final SoneProvider soneProvider; + + /** All posts by their ID. */ + private final Map allPosts = new HashMap(); + + /** All posts by their Sones. */ + private final Map> sonePosts = new HashMap>(); + + /** All posts by their recipient. */ + private final Map> recipientPosts = new HashMap>(); + + /** Whether posts are known. */ + private final Set knownPosts = new HashSet(); + + /** + * Creates a new memory database. + * + * @param soneProvider + * The Sone provider + */ + @Inject + public MemoryPostDatabase(SoneProvider soneProvider) { + this.soneProvider = soneProvider; + } + + // + // POSTPROVIDER METHODS + // + + /** + * {@inheritDocs} + */ + @Override + public Optional getPost(String postId) { + lock.readLock().lock(); + try { + return Optional.fromNullable(allPosts.get(postId)); + } finally { + lock.readLock().unlock(); + } + } + + /** + * {@inheritDocs} + */ + @Override + public Collection getPosts(String soneId) { + return new HashSet(getPostsFrom(soneId)); + } + + /** + * {@inheritDocs} + */ + @Override + public Collection getDirectedPosts(String recipientId) { + lock.readLock().lock(); + try { + Collection posts = recipientPosts.get(recipientId); + return (posts == null) ? Collections. emptySet() : new HashSet(posts); + } finally { + lock.readLock().unlock(); + } + } + + // + // POSTBUILDERFACTORY METHODS + // + + /** + * {@inheritDocs} + */ + @Override + public PostBuilder newPostBuilder() { + return new MemoryPostBuilder(soneProvider); + } + + // + // POSTSTORE METHODS + // + + /** + * {@inheritDocs} + */ + @Override + public void storePost(Post post) { + checkNotNull(post, "post must not be null"); + lock.writeLock().lock(); + try { + allPosts.put(post.getId(), post); + getPostsFrom(post.getSone().getId()).add(post); + if (post.getRecipientId().isPresent()) { + getPostsTo(post.getRecipientId().get()).add(post); + } + } finally { + lock.writeLock().unlock(); + } + } + + /** + * {@inheritDocs} + */ + @Override + public void removePost(Post post) { + checkNotNull(post, "post must not be null"); + lock.writeLock().lock(); + try { + allPosts.remove(post.getId()); + getPostsFrom(post.getSone().getId()).remove(post); + if (post.getRecipientId().isPresent()) { + getPostsTo(post.getRecipientId().get()).remove(post); + } + post.getSone().removePost(post); + } finally { + lock.writeLock().unlock(); + } + } + + /** + * {@inheritDocs} + */ + @Override + public void storePosts(Sone sone, Collection posts) throws IllegalArgumentException { + checkNotNull(sone, "sone must not be null"); + /* verify that all posts are from the same Sone. */ + for (Post post : posts) { + if (!sone.equals(post.getSone())) { + throw new IllegalArgumentException(String.format("Post from different Sone found: %s", post)); + } + } + + lock.writeLock().lock(); + try { + /* remove all posts by the Sone. */ + getPostsFrom(sone.getId()).clear(); + for (Post post : posts) { + allPosts.remove(post.getId()); + if (post.getRecipientId().isPresent()) { + getPostsTo(post.getRecipientId().get()).remove(post); + } + } + + /* add new posts. */ + getPostsFrom(sone.getId()).addAll(posts); + for (Post post : posts) { + allPosts.put(post.getId(), post); + if (post.getRecipientId().isPresent()) { + getPostsTo(post.getRecipientId().get()).add(post); + } + } + } finally { + lock.writeLock().unlock(); + } + } + + /** + * {@inheritDocs} + */ + @Override + public void removePosts(Sone sone) { + checkNotNull(sone, "sone must not be null"); + lock.writeLock().lock(); + try { + /* remove all posts by the Sone. */ + getPostsFrom(sone.getId()).clear(); + for (Post post : sone.getPosts()) { + allPosts.remove(post.getId()); + if (post.getRecipientId().isPresent()) { + getPostsTo(post.getRecipientId().get()).remove(post); + } + } + } finally { + lock.writeLock().unlock(); + } + } + + // + // POSTDATABASE METHODS + // + + /** + * {@inheritDocs} + */ + @Override + public void loadKnownPosts(Configuration configuration, String prefix) { + lock.writeLock().lock(); + try { + int postCounter = 0; + while (true) { + String knownPostId = configuration.getStringValue(prefix + postCounter++ + "/ID").getValue(null); + if (knownPostId == null) { + break; + } + knownPosts.add(knownPostId); + } + } finally { + lock.writeLock().unlock(); + } + } + + /** + * {@inheritDocs} + */ + @Override + public void saveKnownPosts(Configuration configuration, String prefix) throws ConfigurationException { + lock.readLock().lock(); + try { + int postCounter = 0; + for (String knownPostId : knownPosts) { + configuration.getStringValue(prefix + postCounter++ + "/ID").setValue(knownPostId); + } + configuration.getStringValue(prefix + postCounter + "/ID").setValue(null); + } finally { + lock.readLock().unlock(); + } + } + + // + // PACKAGE-PRIVATE METHODS + // + + /** + * Returns whether the given post is known. + * + * @param post + * The post + * @return {@code true} if the post is known, {@code false} otherwise + */ + boolean isPostKnown(Post post) { + lock.readLock().lock(); + try { + return knownPosts.contains(post.getId()); + } finally { + lock.readLock().unlock(); + } + } + + /** + * Sets whether the given post is known. + * + * @param post + * The post + * @param known + * {@code true} if the post is known, {@code false} otherwise + */ + void setPostKnown(Post post, boolean known) { + lock.writeLock().lock(); + try { + if (known) { + knownPosts.add(post.getId()); + } else { + knownPosts.remove(post.getId()); + } + } finally { + lock.writeLock().unlock(); + } + } + + // + // PRIVATE METHODS + // + + /** + * Gets all posts for the given Sone, creating a new collection if there is + * none yet. + * + * @param soneId + * The ID of the Sone to get the posts for + * @return All posts + */ + private Collection getPostsFrom(String soneId) { + Collection posts = null; + lock.readLock().lock(); + try { + posts = sonePosts.get(soneId); + } finally { + lock.readLock().unlock(); + } + if (posts != null) { + return posts; + } + + posts = new HashSet(); + lock.writeLock().lock(); + try { + sonePosts.put(soneId, posts); + } finally { + lock.writeLock().unlock(); + } + + return posts; + } + + /** + * Gets all posts that are directed the given Sone, creating a new + * collection if there is none yet. + * + * @param recipientId + * The ID of the Sone to get the posts for + * @return All posts + */ + private Collection getPostsTo(String recipientId) { + Collection posts = null; + lock.readLock().lock(); + try { + posts = recipientPosts.get(recipientId); + } finally { + lock.readLock().unlock(); + } + if (posts != null) { + return posts; + } + + posts = new HashSet(); + lock.writeLock().lock(); + try { + recipientPosts.put(recipientId, posts); + } finally { + lock.writeLock().unlock(); + } + + return posts; + } + + /** + * {@link PostBuilder} implementation that creates a {@link MemoryPost}. + * + * @author David ‘Bombe’ Roden + */ + private class MemoryPostBuilder extends AbstractPostBuilder { + + /** + * Creates a new memory post builder. + * + * @param soneProvider + * The Sone provider + */ + public MemoryPostBuilder(SoneProvider soneProvider) { + super(soneProvider); + } + + /** + * {@inheritDocs} + */ + @Override + public Post build() throws IllegalStateException { + validate(); + Post post = new MemoryPost(MemoryPostDatabase.this, soneProvider, randomId ? UUID.randomUUID().toString() : id, senderId, recipientId, currentTime ? System.currentTimeMillis() : time, text); + post.setKnown(isPostKnown(post)); + return post; + } + + } + +} diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryPostDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryPostDatabase.java deleted file mode 100644 index eed00ea..0000000 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryPostDatabase.java +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Sone - MemoryPostDatabase.java - Copyright © 2013 David Roden - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.pterodactylus.sone.database.memory; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.locks.ReadWriteLock; -import java.util.concurrent.locks.ReentrantReadWriteLock; - -import net.pterodactylus.sone.data.Post; -import net.pterodactylus.sone.data.Sone; -import net.pterodactylus.sone.data.impl.AbstractPostBuilder; -import net.pterodactylus.sone.database.PostBuilder; -import net.pterodactylus.sone.database.PostDatabase; -import net.pterodactylus.sone.database.SoneProvider; -import net.pterodactylus.util.config.Configuration; -import net.pterodactylus.util.config.ConfigurationException; - -import com.google.common.base.Optional; -import com.google.inject.Inject; - -/** - * Memory-based {@link PostDatabase} implementation. - * - * @author David ‘Bombe’ Roden - */ -public class MemoryPostDatabase implements PostDatabase { - - /** The lock. */ - private final ReadWriteLock lock = new ReentrantReadWriteLock(); - - /** The Sone provider. */ - private final SoneProvider soneProvider; - - /** All posts by their ID. */ - private final Map allPosts = new HashMap(); - - /** All posts by their Sones. */ - private final Map> sonePosts = new HashMap>(); - - /** All posts by their recipient. */ - private final Map> recipientPosts = new HashMap>(); - - /** Whether posts are known. */ - private final Set knownPosts = new HashSet(); - - /** - * Creates a new memory database. - * - * @param soneProvider - * The Sone provider - */ - @Inject - public MemoryPostDatabase(SoneProvider soneProvider) { - this.soneProvider = soneProvider; - } - - // - // POSTPROVIDER METHODS - // - - /** - * {@inheritDocs} - */ - @Override - public Optional getPost(String postId) { - lock.readLock().lock(); - try { - return Optional.fromNullable(allPosts.get(postId)); - } finally { - lock.readLock().unlock(); - } - } - - /** - * {@inheritDocs} - */ - @Override - public Collection getPosts(String soneId) { - return new HashSet(getPostsFrom(soneId)); - } - - /** - * {@inheritDocs} - */ - @Override - public Collection getDirectedPosts(String recipientId) { - lock.readLock().lock(); - try { - Collection posts = recipientPosts.get(recipientId); - return (posts == null) ? Collections. emptySet() : new HashSet(posts); - } finally { - lock.readLock().unlock(); - } - } - - // - // POSTBUILDERFACTORY METHODS - // - - /** - * {@inheritDocs} - */ - @Override - public PostBuilder newPostBuilder() { - return new MemoryPostBuilder(soneProvider); - } - - // - // POSTSTORE METHODS - // - - /** - * {@inheritDocs} - */ - @Override - public void storePost(Post post) { - checkNotNull(post, "post must not be null"); - lock.writeLock().lock(); - try { - allPosts.put(post.getId(), post); - getPostsFrom(post.getSone().getId()).add(post); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).add(post); - } - } finally { - lock.writeLock().unlock(); - } - } - - /** - * {@inheritDocs} - */ - @Override - public void removePost(Post post) { - checkNotNull(post, "post must not be null"); - lock.writeLock().lock(); - try { - allPosts.remove(post.getId()); - getPostsFrom(post.getSone().getId()).remove(post); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).remove(post); - } - post.getSone().removePost(post); - } finally { - lock.writeLock().unlock(); - } - } - - /** - * {@inheritDocs} - */ - @Override - public void storePosts(Sone sone, Collection posts) throws IllegalArgumentException { - checkNotNull(sone, "sone must not be null"); - /* verify that all posts are from the same Sone. */ - for (Post post : posts) { - if (!sone.equals(post.getSone())) { - throw new IllegalArgumentException(String.format("Post from different Sone found: %s", post)); - } - } - - lock.writeLock().lock(); - try { - /* remove all posts by the Sone. */ - getPostsFrom(sone.getId()).clear(); - for (Post post : posts) { - allPosts.remove(post.getId()); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).remove(post); - } - } - - /* add new posts. */ - getPostsFrom(sone.getId()).addAll(posts); - for (Post post : posts) { - allPosts.put(post.getId(), post); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).add(post); - } - } - } finally { - lock.writeLock().unlock(); - } - } - - /** - * {@inheritDocs} - */ - @Override - public void removePosts(Sone sone) { - checkNotNull(sone, "sone must not be null"); - lock.writeLock().lock(); - try { - /* remove all posts by the Sone. */ - getPostsFrom(sone.getId()).clear(); - for (Post post : sone.getPosts()) { - allPosts.remove(post.getId()); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).remove(post); - } - } - } finally { - lock.writeLock().unlock(); - } - } - - // - // POSTDATABASE METHODS - // - - /** - * {@inheritDocs} - */ - @Override - public void loadKnownPosts(Configuration configuration, String prefix) { - lock.writeLock().lock(); - try { - int postCounter = 0; - while (true) { - String knownPostId = configuration.getStringValue(prefix + postCounter++ + "/ID").getValue(null); - if (knownPostId == null) { - break; - } - knownPosts.add(knownPostId); - } - } finally { - lock.writeLock().unlock(); - } - } - - /** - * {@inheritDocs} - */ - @Override - public void saveKnownPosts(Configuration configuration, String prefix) throws ConfigurationException { - lock.readLock().lock(); - try { - int postCounter = 0; - for (String knownPostId : knownPosts) { - configuration.getStringValue(prefix + postCounter++ + "/ID").setValue(knownPostId); - } - configuration.getStringValue(prefix + postCounter + "/ID").setValue(null); - } finally { - lock.readLock().unlock(); - } - } - - // - // PACKAGE-PRIVATE METHODS - // - - /** - * Returns whether the given post is known. - * - * @param post - * The post - * @return {@code true} if the post is known, {@code false} otherwise - */ - boolean isPostKnown(Post post) { - lock.readLock().lock(); - try { - return knownPosts.contains(post.getId()); - } finally { - lock.readLock().unlock(); - } - } - - /** - * Sets whether the given post is known. - * - * @param post - * The post - * @param known - * {@code true} if the post is known, {@code false} otherwise - */ - void setPostKnown(Post post, boolean known) { - lock.writeLock().lock(); - try { - if (known) { - knownPosts.add(post.getId()); - } else { - knownPosts.remove(post.getId()); - } - } finally { - lock.writeLock().unlock(); - } - } - - // - // PRIVATE METHODS - // - - /** - * Gets all posts for the given Sone, creating a new collection if there is - * none yet. - * - * @param soneId - * The ID of the Sone to get the posts for - * @return All posts - */ - private Collection getPostsFrom(String soneId) { - Collection posts = null; - lock.readLock().lock(); - try { - posts = sonePosts.get(soneId); - } finally { - lock.readLock().unlock(); - } - if (posts != null) { - return posts; - } - - posts = new HashSet(); - lock.writeLock().lock(); - try { - sonePosts.put(soneId, posts); - } finally { - lock.writeLock().unlock(); - } - - return posts; - } - - /** - * Gets all posts that are directed the given Sone, creating a new - * collection if there is none yet. - * - * @param recipientId - * The ID of the Sone to get the posts for - * @return All posts - */ - private Collection getPostsTo(String recipientId) { - Collection posts = null; - lock.readLock().lock(); - try { - posts = recipientPosts.get(recipientId); - } finally { - lock.readLock().unlock(); - } - if (posts != null) { - return posts; - } - - posts = new HashSet(); - lock.writeLock().lock(); - try { - recipientPosts.put(recipientId, posts); - } finally { - lock.writeLock().unlock(); - } - - return posts; - } - - /** - * {@link PostBuilder} implementation that creates a {@link MemoryPost}. - * - * @author David ‘Bombe’ Roden - */ - private class MemoryPostBuilder extends AbstractPostBuilder { - - /** - * Creates a new memory post builder. - * - * @param soneProvider - * The Sone provider - */ - public MemoryPostBuilder(SoneProvider soneProvider) { - super(soneProvider); - } - - /** - * {@inheritDocs} - */ - @Override - public Post build() throws IllegalStateException { - validate(); - Post post = new MemoryPost(MemoryPostDatabase.this, soneProvider, randomId ? UUID.randomUUID().toString() : id, senderId, recipientId, currentTime ? System.currentTimeMillis() : time, text); - post.setKnown(isPostKnown(post)); - return post; - } - - } - -} diff --git a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java index 8601a52..d71ffc4 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java @@ -309,7 +309,7 @@ public abstract class AbstractSoneCommand extends AbstractCommand { postBuilder.put(encodeLikes(core.getLikes(post), prefix + "Likes.")); if (includeReplies) { - List replies = core.getReplies(post); + List replies = core.getReplies(post.getId()); postBuilder.put(encodeReplies(replies, prefix)); } @@ -338,7 +338,7 @@ public abstract class AbstractSoneCommand extends AbstractCommand { String postPrefix = prefix + postIndex++; postBuilder.put(encodePost(post, postPrefix + ".", includeReplies)); if (includeReplies) { - postBuilder.put(encodeReplies(Collections2.filter(core.getReplies(post), Reply.FUTURE_REPLY_FILTER), postPrefix + ".")); + postBuilder.put(encodeReplies(Collections2.filter(core.getReplies(post.getId()), Reply.FUTURE_REPLY_FILTER), postPrefix + ".")); } } diff --git a/src/main/java/net/pterodactylus/sone/template/PostAccessor.java b/src/main/java/net/pterodactylus/sone/template/PostAccessor.java index 7cf88f8..d593b51 100644 --- a/src/main/java/net/pterodactylus/sone/template/PostAccessor.java +++ b/src/main/java/net/pterodactylus/sone/template/PostAccessor.java @@ -57,7 +57,7 @@ public class PostAccessor extends ReflectionAccessor { public Object get(TemplateContext templateContext, Object object, String member) { Post post = (Post) object; if ("replies".equals(member)) { - return Collections2.filter(core.getReplies(post), Reply.FUTURE_REPLY_FILTER); + return Collections2.filter(core.getReplies(post.getId()), Reply.FUTURE_REPLY_FILTER); } else if (member.equals("likes")) { return core.getLikes(post); } else if (member.equals("liked")) { diff --git a/src/main/java/net/pterodactylus/sone/web/SearchPage.java b/src/main/java/net/pterodactylus/sone/web/SearchPage.java index 01a5ed0..4348434 100644 --- a/src/main/java/net/pterodactylus/sone/web/SearchPage.java +++ b/src/main/java/net/pterodactylus/sone/web/SearchPage.java @@ -467,7 +467,7 @@ public class SearchPage extends SoneTemplatePage { if (post.getRecipient().isPresent()) { postString.append(' ').append(SoneStringGenerator.NAME_GENERATOR.generateString(post.getRecipient().get())); } - for (PostReply reply : Collections2.filter(webInterface.getCore().getReplies(post), Reply.FUTURE_REPLY_FILTER)) { + for (PostReply reply : Collections2.filter(webInterface.getCore().getReplies(post.getId()), Reply.FUTURE_REPLY_FILTER)) { postString.append(' ').append(SoneStringGenerator.NAME_GENERATOR.generateString(reply.getSone())); postString.append(' ').append(reply.getText()); } diff --git a/src/main/java/net/pterodactylus/sone/web/ViewSonePage.java b/src/main/java/net/pterodactylus/sone/web/ViewSonePage.java index e120e92..a94b4af 100644 --- a/src/main/java/net/pterodactylus/sone/web/ViewSonePage.java +++ b/src/main/java/net/pterodactylus/sone/web/ViewSonePage.java @@ -101,7 +101,7 @@ public class ViewSonePage extends SoneTemplatePage { if (!post.isPresent() || repliedPosts.containsKey(post.get()) || sone.get().equals(post.get().getSone()) || (sone.get().getId().equals(post.get().getRecipientId().orNull()))) { continue; } - repliedPosts.put(post.get(), webInterface.getCore().getReplies(post.get())); + repliedPosts.put(post.get(), webInterface.getCore().getReplies(post.get().getId())); } List posts = new ArrayList(repliedPosts.keySet()); Collections.sort(posts, new Comparator() { diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index faba61f..593193c 100644 --- a/src/main/java/net/pterodactylus/sone/web/WebInterface.java +++ b/src/main/java/net/pterodactylus/sone/web/WebInterface.java @@ -940,7 +940,7 @@ public class WebInterface { localReplyNotification.remove(reply); if (!getMentionedSones(reply.getText()).isEmpty() && reply.getPost().isPresent()) { boolean isMentioned = false; - for (PostReply existingReply : getCore().getReplies(reply.getPost().get())) { + for (PostReply existingReply : getCore().getReplies(reply.getPostId())) { isMentioned |= !reply.isKnown() && !getMentionedSones(existingReply.getText()).isEmpty(); } if (!isMentioned) { -- 2.7.4