diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 6229ee9bfa..5489de841f 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,21 +258,38 @@ 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 = {
"room_id": event.room_id,
"membership": event.membership,
}
- ret.append(d)
+
+ if event.membership == Membership.INVITE:
+ d["inviter"] = event.user_id
+
+ 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"] = {
@@ -279,10 +297,17 @@ class MessageHandler(BaseHandler):
"start": token[0],
"end": token[1],
}
+
+ current_state = yield self.store.get_current_state(event.room_id)
+ d["state"] = [c.get_dict() for c in current_state]
except:
logger.exception("Failed to get snapshot")
- logger.debug("snapshot_all_rooms returning: %s", ret)
+ 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)
@@ -374,7 +399,7 @@ class RoomCreationHandler(BaseHandler):
content = {"membership": Membership.JOIN}
join_event = self.event_factory.create_event(
etype=RoomMemberEvent.TYPE,
- target_user_id=user_id,
+ state_key=user_id,
room_id=room_id,
user_id=user_id,
membership=Membership.JOIN,
@@ -502,9 +527,10 @@ class RoomMemberHandler(BaseHandler):
Raises:
SynapseError if there was a problem changing the membership.
"""
+ target_user_id = event.state_key
prev_state = yield self.store.get_room_member(
- event.target_user_id, event.room_id
+ target_user_id, event.room_id
)
if prev_state:
@@ -530,7 +556,7 @@ class RoomMemberHandler(BaseHandler):
yield self.auth.check(event, raises=True)
prev_state = yield self.store.get_room_member(
- event.target_user_id, event.room_id
+ target_user_id, event.room_id
)
if prev_state and prev_state.membership == event.membership:
# double same action, treat this event as a NOOP.
@@ -563,7 +589,7 @@ class RoomMemberHandler(BaseHandler):
content.update({"membership": Membership.JOIN})
new_event = self.event_factory.create_event(
etype=RoomMemberEvent.TYPE,
- target_user_id=joinee.to_string(),
+ state_key=joinee.to_string(),
room_id=room_id,
user_id=joinee.to_string(),
membership=Membership.JOIN,
@@ -576,7 +602,7 @@ class RoomMemberHandler(BaseHandler):
@defer.inlineCallbacks
def _do_join(self, event, room_host=None, do_auth=True):
- joinee = self.hs.parse_userid(event.target_user_id)
+ joinee = self.hs.parse_userid(event.state_key)
# room_id = RoomID.from_string(event.room_id, self.hs)
room_id = event.room_id
@@ -685,16 +711,17 @@ class RoomMemberHandler(BaseHandler):
# If we're inviting someone, then we should also send it to that
# HS.
+ target_user_id = event.state_key
if membership == Membership.INVITE:
host = UserID.from_string(
- event.target_user_id, self.hs
+ target_user_id, self.hs
).domain
destinations.append(host)
# If we are joining a remote HS, include that.
if membership == Membership.JOIN:
host = UserID.from_string(
- event.target_user_id, self.hs
+ target_user_id, self.hs
).domain
destinations.append(host)
|