X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ffcp%2FAbstractSoneCommand.java;h=4ad63898cbfc3c22e6a91f5454233498d31899c3;hb=2278f98a3c8f0c5ed0e5c249435ba8c394f80768;hp=567fe73fd13441e07fdf1745efb11dad4aa27396;hpb=4b39b87174c0ef2aa83b9ca4a13d33cc32227add;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java index 567fe73..4ad6389 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/AbstractSoneCommand.java @@ -21,11 +21,14 @@ import java.util.Collection; import net.pterodactylus.sone.core.Core; import net.pterodactylus.sone.data.Post; +import net.pterodactylus.sone.data.Reply; import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.freenet.SimpleFieldSetBuilder; import net.pterodactylus.sone.freenet.fcp.AbstractCommand; import net.pterodactylus.sone.freenet.fcp.Command; import net.pterodactylus.sone.freenet.fcp.FcpException; +import net.pterodactylus.sone.template.SoneAccessor; +import net.pterodactylus.util.filter.Filters; import freenet.node.FSParseException; import freenet.support.SimpleFieldSet; @@ -94,13 +97,39 @@ public abstract class AbstractSoneCommand extends AbstractCommand { } /** + * Creates a simple field set from the given collection of Sones. + * + * @param sones + * The Sones to encode + * @return The simple field set containing the given Sones + */ + protected SimpleFieldSet encodeSones(Collection sones) { + SimpleFieldSetBuilder soneBuilder = new SimpleFieldSetBuilder(); + + int soneIndex = 0; + soneBuilder.put("Sones.Count", sones.size()); + for (Sone sone : sones) { + String sonePrefix = "Sones." + soneIndex++; + soneBuilder.put(sonePrefix + ".ID", sone.getId()); + soneBuilder.put(sonePrefix + ".Name", sone.getName()); + soneBuilder.put(sonePrefix + ".NiceName", SoneAccessor.getNiceName(sone)); + soneBuilder.put(sonePrefix + ".Time", sone.getTime()); + } + + return soneBuilder.get(); + } + + /** * Creates a simple field set from the given collection of posts. * * @param posts * The posts to encode + * @param includeReplies + * {@code true} to include the replies, {@code false} to not + * include the replies * @return The simple field set containing the posts */ - public SimpleFieldSet encodePosts(Collection posts) { + public SimpleFieldSet encodePosts(Collection posts, boolean includeReplies) { SimpleFieldSetBuilder postBuilder = new SimpleFieldSetBuilder(); int postIndex = 0; @@ -114,9 +143,38 @@ public abstract class AbstractSoneCommand extends AbstractCommand { } postBuilder.put(postPrefix + ".Time", post.getTime()); postBuilder.put(postPrefix + ".Text", post.getText()); + if (includeReplies) { + postBuilder.put(encodeReplies(Filters.filteredList(core.getReplies(post), Reply.FUTURE_REPLIES_FILTER), postPrefix + ".")); + } } return postBuilder.get(); } + /** + * Creates a simple field set from the given collection of replies. + * + * @param replies + * The replies to encode + * @param prefix + * The prefix for the field names (may be empty, but not + * {@code null}) + * @return The simple field set containing the replies + */ + public SimpleFieldSet encodeReplies(Collection replies, String prefix) { + SimpleFieldSetBuilder replyBuilder = new SimpleFieldSetBuilder(); + + int replyIndex = 0; + replyBuilder.put(prefix + "Replies.Count", replies.size()); + for (Reply reply : replies) { + String replyPrefix = prefix + "Replies." + replyIndex++; + replyBuilder.put(replyPrefix + ".ID", reply.getId()); + replyBuilder.put(replyPrefix + ".Sone", reply.getSone().getId()); + replyBuilder.put(replyPrefix + ".Time", reply.getTime()); + replyBuilder.put(replyPrefix + ".Text", reply.getText()); + } + + return replyBuilder.get(); + } + }