From: David ‘Bombe’ Roden Date: Thu, 2 Jan 2020 19:53:19 +0000 (+0100) Subject: 🎨 Replace post accessor with Kotlin version X-Git-Tag: v81^2~10 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=3ab186664b53925d8f9ee7a50a8dd9da2d9da172 🎨 Replace post accessor with Kotlin version --- diff --git a/src/main/java/net/pterodactylus/sone/template/PostAccessor.java b/src/main/java/net/pterodactylus/sone/template/PostAccessor.java deleted file mode 100644 index 4025c7b..0000000 --- a/src/main/java/net/pterodactylus/sone/template/PostAccessor.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Sone - PostAccessor.java - Copyright © 2010–2019 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.template; - -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.util.template.ReflectionAccessor; -import net.pterodactylus.util.template.TemplateContext; - -import com.google.common.collect.Collections2; - -/** - * Accessor for {@link Post} objects that adds additional properties: - *
- *
replies
- *
All replies to this post, sorted by time, oldest first
- *
- */ -public class PostAccessor extends ReflectionAccessor { - - /** The core to get the replies from. */ - private final Core core; - - /** - * Creates a new post accessor. - * - * @param core - * The core to get the replies from - */ - public PostAccessor(Core core) { - this.core = core; - } - - /** - * {@inheritDoc} - */ - @Override - public Object get(TemplateContext templateContext, Object object, String member) { - Post post = (Post) object; - if ("replies".equals(member)) { - 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")) { - Sone currentSone = (Sone) templateContext.get("currentSone"); - return (currentSone != null) && (currentSone.isLikedPostId(post.getId())); - } else if (member.equals("new")) { - return !post.isKnown(); - } else if (member.equals("bookmarked")) { - return core.isBookmarked(post); - } - return super.get(templateContext, object, member); - } - -} diff --git a/src/main/kotlin/net/pterodactylus/sone/template/PostAccessor.kt b/src/main/kotlin/net/pterodactylus/sone/template/PostAccessor.kt new file mode 100644 index 0000000..db26866 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/template/PostAccessor.kt @@ -0,0 +1,46 @@ +/* + * Sone - PostAccessor.java - Copyright © 2010–2019 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.template + +import net.pterodactylus.sone.core.* +import net.pterodactylus.sone.data.* +import net.pterodactylus.util.template.* + +/** + * Accessor for [Post] objects that adds additional properties: + * + * * `replies`: All replies to this post, sorted by time, oldest first + * * `likes`: All Sones that have liked the post + * * `liked`: `true` if the current Sone from the [template context][TemplateContext] has liked the post + * * `new`: `true` if the post is not known + * * `bookmarked`: `true` if the post is bookmarked + */ +class PostAccessor(private val core: Core) : ReflectionAccessor() { + + override fun get(templateContext: TemplateContext?, `object`: Any?, member: String): Any? = + (`object` as Post).let { post -> + when (member) { + "replies" -> core.getReplies(post.id).filter { Reply.FUTURE_REPLY_FILTER.apply(it) } + "likes" -> core.getLikes(post) + "liked" -> (templateContext?.get("currentSone") as? Sone)?.isLikedPostId(post.id) ?: false + "new" -> !post.isKnown + "bookmarked" -> core.isBookmarked(post) + else -> super.get(templateContext, `object`, member) + } + } + +}