X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FGetStatusAjaxPage.java;fp=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fajax%2FGetStatusAjaxPage.java;h=0000000000000000000000000000000000000000;hp=45c1cee98b5acb737b1ec13dc1eb856c317d778c;hb=787aa8a7839dcb32c07a8e2b6d982c7e2cb67244;hpb=ccc17ddce331a6c70e3e6a14df34ca73c05ed012 diff --git a/src/main/java/net/pterodactylus/sone/web/ajax/GetStatusAjaxPage.java b/src/main/java/net/pterodactylus/sone/web/ajax/GetStatusAjaxPage.java deleted file mode 100644 index 45c1cee..0000000 --- a/src/main/java/net/pterodactylus/sone/web/ajax/GetStatusAjaxPage.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Sone - GetStatusAjaxPage.java - Copyright © 2010–2016 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.web.ajax; - -import static com.fasterxml.jackson.databind.node.JsonNodeFactory.instance; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import net.pterodactylus.sone.data.Post; -import net.pterodactylus.sone.data.PostReply; -import net.pterodactylus.sone.data.Sone; -import net.pterodactylus.sone.freenet.L10nFilter; -import net.pterodactylus.sone.template.SoneAccessor; -import net.pterodactylus.sone.text.TimeText; -import net.pterodactylus.sone.text.TimeTextConverter; -import net.pterodactylus.sone.web.WebInterface; -import net.pterodactylus.sone.web.page.FreenetRequest; -import net.pterodactylus.util.notify.Notification; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * The “get status” AJAX handler returns all information that is necessary to - * update the web interface in real-time. - * - * @author David ‘Bombe’ Roden - */ -public class GetStatusAjaxPage extends JsonPage { - - /** Date formatter. */ - private static final DateFormat dateFormat = new SimpleDateFormat("MMM d, yyyy, HH:mm:ss"); - private final TimeTextConverter timeTextConverter; - private final L10nFilter l10nFilter; - - /** - * Creates a new “get status” AJAX handler. - * - * @param webInterface - * The Sone web interface - */ - public GetStatusAjaxPage(WebInterface webInterface, TimeTextConverter timeTextConverter, L10nFilter l10nFilter) { - super("getStatus.ajax", webInterface); - this.timeTextConverter = timeTextConverter; - this.l10nFilter = l10nFilter; - } - - /** - * {@inheritDoc} - */ - @Override - protected JsonReturnObject createJsonObject(FreenetRequest request) { - final Sone currentSone = getCurrentSoneWithoutCreatingSession(request.getToadletContext()); - /* load Sones. always return the status of the current Sone. */ - Set sones = new HashSet(Collections.singleton(currentSone)); - String loadSoneIds = request.getHttpRequest().getParam("soneIds"); - if (loadSoneIds.length() > 0) { - String[] soneIds = loadSoneIds.split(","); - for (String soneId : soneIds) { - /* just add it, we skip null further down. */ - sones.add(webInterface.getCore().getSone(soneId).orNull()); - } - } - ArrayNode jsonSones = new ArrayNode(instance); - for (Sone sone : sones) { - if (sone == null) { - continue; - } - jsonSones.add(createJsonSone(sone)); - } - /* load notifications. */ - List notifications = new ArrayList(webInterface.getNotifications(currentSone)); - Collections.sort(notifications, Notification.CREATED_TIME_SORTER); - /* load new posts. */ - Collection newPosts = webInterface.getNewPosts(currentSone); - - ArrayNode jsonPosts = new ArrayNode(instance); - for (Post post : newPosts) { - ObjectNode jsonPost = new ObjectNode(instance); - jsonPost.put("id", post.getId()); - jsonPost.put("sone", post.getSone().getId()); - jsonPost.put("recipient", post.getRecipientId().orNull()); - jsonPost.put("time", post.getTime()); - jsonPosts.add(jsonPost); - } - /* load new replies. */ - Collection newReplies = webInterface.getNewReplies(currentSone); - - ArrayNode jsonReplies = new ArrayNode(instance); - for (PostReply reply : newReplies) { - ObjectNode jsonReply = new ObjectNode(instance); - jsonReply.put("id", reply.getId()); - jsonReply.put("sone", reply.getSone().getId()); - jsonReply.put("post", reply.getPostId()); - jsonReply.put("postSone", reply.getPost().get().getSone().getId()); - jsonReplies.add(jsonReply); - } - return createSuccessJsonObject().put("loggedIn", currentSone != null).put("options", createJsonOptions(currentSone)).put("sones", jsonSones).put("notificationHash", notifications.hashCode()).put("newPosts", jsonPosts).put("newReplies", jsonReplies); - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean needsFormPassword() { - return false; - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean requiresLogin() { - return false; - } - - // - // PRIVATE METHODS - // - - /** - * Creates a JSON object from the given Sone. - * - * @param sone - * The Sone to convert to a JSON object - * @return The JSON representation of the given Sone - */ - private JsonNode createJsonSone(Sone sone) { - ObjectNode jsonSone = new ObjectNode(instance); - jsonSone.put("id", sone.getId()); - jsonSone.put("name", SoneAccessor.getNiceName(sone)); - jsonSone.put("local", sone.isLocal()); - jsonSone.put("status", sone.getStatus().name()); - jsonSone.put("modified", webInterface.getCore().isModifiedSone(sone)); - jsonSone.put("locked", webInterface.getCore().isLocked(sone)); - jsonSone.put("lastUpdatedUnknown", sone.getTime() == 0); - synchronized (dateFormat) { - jsonSone.put("lastUpdated", dateFormat.format(new Date(sone.getTime()))); - } - TimeText timeText = timeTextConverter.getTimeText(sone.getTime()); - jsonSone.put("lastUpdatedText", l10nFilter.format(null, timeText.getL10nText(), Collections.emptyMap())); - return jsonSone; - } - - /** - * Creates a JSON object that contains all options that are currently in - * effect for the given Sone (or overall, if the given Sone is {@code null} - * ). - * - * @param currentSone - * The current Sone (may be {@code null}) - * @return The current options - */ - private static JsonNode createJsonOptions(Sone currentSone) { - ObjectNode options = new ObjectNode(instance); - if (currentSone != null) { - options.put("ShowNotification/NewSones", currentSone.getOptions().isShowNewSoneNotifications()); - options.put("ShowNotification/NewPosts", currentSone.getOptions().isShowNewPostNotifications()); - options.put("ShowNotification/NewReplies", currentSone.getOptions().isShowNewReplyNotifications()); - } - return options; - } - -}