summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-08-21 16:40:21 +0100
committerErik Johnston <erik@matrix.org>2014-08-21 16:40:21 +0100
commite7ee0b9fc113b1fd29b8cb96eea7a00641e56887 (patch)
treee9395d60f826d57838b86ea0f263840a47a0c07a
parentstop hammering the HS for displayname and avatar URLs (diff)
downloadsynapse-e7ee0b9fc113b1fd29b8cb96eea7a00641e56887.tar.xz
Change IM sync api to also return the current presence list.
-rw-r--r--synapse/handlers/room.py24
-rw-r--r--synapse/storage/stream.py5
2 files changed, 23 insertions, 6 deletions
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index d9809bd6de..899b653fb7 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -24,6 +24,7 @@ from synapse.api.events.room import (
     RoomConfigEvent
 )
 from synapse.api.streams.event import EventStream, EventsStreamData
+from synapse.handlers.presence import PresenceStreamData
 from synapse.util import stringutils
 from ._base import BaseHandler
 
@@ -257,7 +258,19 @@ class MessageHandler(BaseHandler):
             membership_list=[Membership.INVITE, Membership.JOIN]
         )
 
-        ret = []
+        rooms_ret = []
+
+        now_rooms_token = yield self.store.get_room_events_max_id()
+
+        # FIXME (erikj): Fix this.
+        presence_stream = PresenceStreamData(self.hs)
+        now_presence_token = yield presence_stream.max_token()
+        presence = yield presence_stream.get_rows(
+            user_id, 0, now_presence_token, None, None
+        )
+
+        # FIXME (erikj): We need to not generate this token,
+        now_token = "%s_%s" % (now_rooms_token, now_presence_token)
 
         for event in room_list:
             d = {
@@ -268,14 +281,15 @@ class MessageHandler(BaseHandler):
             if event.membership == Membership.INVITE:
                 d["inviter"] = event.user_id
 
-            ret.append(d)
+            rooms_ret.append(d)
 
             if event.membership != Membership.JOIN:
                 continue
             try:
                 messages, token = yield self.store.get_recent_events_for_room(
                     event.room_id,
-                    limit=50,
+                    limit=10,
+                    end_token=now_rooms_token,
                 )
 
                 d["messages"] = {
@@ -289,6 +303,10 @@ class MessageHandler(BaseHandler):
             except:
                 logger.exception("Failed to get snapshot")
 
+        user = self.hs.parse_userid(user_id)
+
+        ret = {"rooms": rooms_ret, "presence": presence[0], "end": now_token}
+
         logger.debug("snapshot_all_rooms returning: %s", ret)
 
         defer.returnValue(ret)
diff --git a/synapse/storage/stream.py b/synapse/storage/stream.py
index e994017bf2..8bc502483a 100644
--- a/synapse/storage/stream.py
+++ b/synapse/storage/stream.py
@@ -249,11 +249,10 @@ class StreamStore(SQLBaseStore):
         )
 
     @defer.inlineCallbacks
-    def get_recent_events_for_room(self, room_id, limit, with_feedback=False):
+    def get_recent_events_for_room(self, room_id, limit, end_token,
+                                   with_feedback=False):
         # TODO (erikj): Handle compressed feedback
 
-        end_token = yield self.get_room_events_max_id()
-
         sql = (
             "SELECT * FROM events "
             "WHERE room_id = ? AND stream_ordering <= ? "