package net.pterodactylus.sone.web.ajax;
-import java.io.StringWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
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.Sone;
import net.pterodactylus.sone.template.SoneAccessor;
import net.pterodactylus.sone.web.WebInterface;
-import net.pterodactylus.util.io.Closer;
import net.pterodactylus.util.json.JsonArray;
import net.pterodactylus.util.json.JsonObject;
import net.pterodactylus.util.notify.Notification;
-import net.pterodactylus.util.template.Template;
-import net.pterodactylus.util.template.TemplateException;
/**
* The “get status” AJAX handler returns all information that is necessary to
/** Date formatter. */
private static final DateFormat dateFormat = new SimpleDateFormat("MMM d, yyyy, HH:mm:ss");
- /** The template to render posts. */
- private final Template postTemplate;
-
- /** The template to render replies. */
- private final Template replyTemplate;
-
/**
* Creates a new “get status” AJAX handler.
*
* @param webInterface
* The Sone web interface
- * @param postTemplate
- * The template to render for posts
- * @param replyTemplate
- * The template to render for replies
*/
- public GetStatusAjaxPage(WebInterface webInterface, Template postTemplate, Template replyTemplate) {
- super("ajax/getStatus.ajax", webInterface);
- this.postTemplate = postTemplate;
- this.replyTemplate = replyTemplate;
+ public GetStatusAjaxPage(WebInterface webInterface) {
+ super("getStatus.ajax", webInterface);
}
/**
protected JsonObject createJsonObject(Request request) {
/* load Sones. */
boolean loadAllSones = Boolean.parseBoolean(request.getHttpRequest().getParam("loadAllSones", "true"));
- Set<Sone> sones = loadAllSones ? webInterface.getCore().getSones() : Collections.singleton(getCurrentSone(request.getToadletContext()));
+ Set<Sone> sones = new HashSet<Sone>(Collections.singleton(getCurrentSone(request.getToadletContext(), false)));
+ if (loadAllSones) {
+ sones.addAll(webInterface.getCore().getSones());
+ }
JsonArray jsonSones = new JsonArray();
for (Sone sone : sones) {
+ if (sone == null) {
+ continue;
+ }
JsonObject jsonSone = createJsonSone(sone);
jsonSones.add(jsonSone);
}
jsonRemovedNotifications.add(createJsonNotification(notification));
}
/* load new posts. */
- postTemplate.set("currentSone", getCurrentSone(request.getToadletContext()));
Set<Post> newPosts = webInterface.getNewPosts();
JsonArray jsonPosts = new JsonArray();
for (Post post : newPosts) {
- jsonPosts.add(createJsonPost(post));
+ JsonObject jsonPost = new JsonObject();
+ jsonPost.put("id", post.getId());
+ jsonPost.put("sone", post.getSone().getId());
+ jsonPost.put("recipient", (post.getRecipient() != null) ? post.getRecipient().getId() : null);
+ jsonPost.put("time", post.getTime());
+ jsonPosts.add(jsonPost);
}
/* load new replies. */
- replyTemplate.set("currentSone", getCurrentSone(request.getToadletContext()));
Set<Reply> newReplies = webInterface.getNewReplies();
JsonArray jsonReplies = new JsonArray();
for (Reply reply : newReplies) {
- jsonReplies.add(createJsonReply(reply));
+ JsonObject jsonReply = new JsonObject();
+ jsonReply.put("id", reply.getId());
+ jsonReply.put("sone", reply.getSone().getId());
+ jsonReply.put("post", reply.getPost().getId());
+ jsonReply.put("postSone", reply.getPost().getSone().getId());
+ jsonReplies.add(jsonReply);
}
return createSuccessJsonObject().put("sones", jsonSones).put("notifications", jsonNotifications).put("removedNotifications", jsonRemovedNotifications).put("newPosts", jsonPosts).put("newReplies", jsonReplies);
}
return false;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected boolean requiresLogin() {
+ return false;
+ }
+
//
// PRIVATE METHODS
//
jsonSone.put("status", webInterface.getCore().getSoneStatus(sone).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())));
}
}
/**
- * Creates a JSON object from the given post. The JSON object will only
- * contain the ID of the post, its time, and its rendered HTML code.
- *
- * @param post
- * The post to create a JSON object from
- * @return The JSON representation of the post
- */
- private JsonObject createJsonPost(Post post) {
- JsonObject jsonPost = new JsonObject();
- jsonPost.put("id", post.getId());
- jsonPost.put("time", post.getTime());
- StringWriter stringWriter = new StringWriter();
- postTemplate.set("post", post);
- try {
- postTemplate.render(stringWriter);
- } catch (TemplateException te1) {
- /* TODO - shouldn’t happen. */
- } finally {
- Closer.close(stringWriter);
- }
- return jsonPost.put("html", stringWriter.toString());
- }
-
- /**
- * Creates a JSON object from the given reply. The JSON object will only
- * contain the ID of the reply, the ID of its post, its time, and its
- * rendered HTML code.
- *
- * @param reply
- * The reply to create a JSON object from
- * @return The JSON representation of the reply
- */
- private JsonObject createJsonReply(Reply reply) {
- JsonObject jsonPost = new JsonObject();
- jsonPost.put("postId", reply.getPost().getId());
- jsonPost.put("id", reply.getId());
- jsonPost.put("time", reply.getTime());
- StringWriter stringWriter = new StringWriter();
- replyTemplate.set("reply", reply);
- try {
- replyTemplate.render(stringWriter);
- } catch (TemplateException te1) {
- /* TODO - shouldn’t happen. */
- } finally {
- Closer.close(stringWriter);
- }
- return jsonPost.put("html", stringWriter.toString());
- }
-
- /**
* Creates a JSON object from the given notification.
*
* @param notification