Merge branch 'reduce-loading' into next
[Sone.git] / src / main / java / net / pterodactylus / sone / web / ajax / GetStatusAjaxPage.java
index 831bb6f..a358fb1 100644 (file)
@@ -22,9 +22,12 @@ 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.Post;
+import net.pterodactylus.sone.data.Reply;
 import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.template.SoneAccessor;
 import net.pterodactylus.sone.web.WebInterface;
@@ -50,7 +53,7 @@ public class GetStatusAjaxPage extends JsonPage {
         *            The Sone web interface
         */
        public GetStatusAjaxPage(WebInterface webInterface) {
-               super("ajax/getStatus.ajax", webInterface);
+               super("getStatus.ajax", webInterface);
        }
 
        /**
@@ -60,9 +63,15 @@ public class GetStatusAjaxPage extends JsonPage {
        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);
                }
@@ -78,7 +87,29 @@ public class GetStatusAjaxPage extends JsonPage {
                for (Notification notification : removedNotifications) {
                        jsonRemovedNotifications.add(createJsonNotification(notification));
                }
-               return createSuccessJsonObject().put("sones", jsonSones).put("notifications", jsonNotifications).put("removedNotifications", jsonRemovedNotifications);
+               /* load new posts. */
+               Set<Post> newPosts = webInterface.getNewPosts();
+               JsonArray jsonPosts = new JsonArray();
+               for (Post post : newPosts) {
+                       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. */
+               Set<Reply> newReplies = webInterface.getNewReplies();
+               JsonArray jsonReplies = new JsonArray();
+               for (Reply reply : newReplies) {
+                       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);
        }
 
        /**