Fix invite state to always include all events
This commit is contained in:
parent
7239258ae6
commit
34e682d385
|
@ -225,7 +225,22 @@ def format_event_for_client_v2_without_room_id(d):
|
||||||
|
|
||||||
def serialize_event(e, time_now_ms, as_client_event=True,
|
def serialize_event(e, time_now_ms, as_client_event=True,
|
||||||
event_format=format_event_for_client_v1,
|
event_format=format_event_for_client_v1,
|
||||||
token_id=None, only_event_fields=None):
|
token_id=None, only_event_fields=None, is_invite=False):
|
||||||
|
"""Serialize event for clients
|
||||||
|
|
||||||
|
Args:
|
||||||
|
e (EventBase)
|
||||||
|
time_now_ms (int)
|
||||||
|
as_client_event (bool)
|
||||||
|
event_format
|
||||||
|
token_id
|
||||||
|
only_event_fields
|
||||||
|
is_invite (bool): Whether this is an invite that is being sent to the
|
||||||
|
invitee
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict
|
||||||
|
"""
|
||||||
# FIXME(erikj): To handle the case of presence events and the like
|
# FIXME(erikj): To handle the case of presence events and the like
|
||||||
if not isinstance(e, EventBase):
|
if not isinstance(e, EventBase):
|
||||||
return e
|
return e
|
||||||
|
@ -260,4 +275,7 @@ def serialize_event(e, time_now_ms, as_client_event=True,
|
||||||
raise TypeError("only_event_fields must be a list of strings")
|
raise TypeError("only_event_fields must be a list of strings")
|
||||||
d = only_fields(d, only_event_fields)
|
d = only_fields(d, only_event_fields)
|
||||||
|
|
||||||
|
if not is_invite:
|
||||||
|
d["unsigned"].pop("invite_room_state", None)
|
||||||
|
|
||||||
return d
|
return d
|
||||||
|
|
|
@ -531,9 +531,9 @@ class MessageHandler(BaseHandler):
|
||||||
|
|
||||||
state_to_include_ids = [
|
state_to_include_ids = [
|
||||||
e_id
|
e_id
|
||||||
for k, e_id in context.current_state_ids.items()
|
for k, e_id in context.current_state_ids.iteritems()
|
||||||
if k[0] in self.hs.config.room_invite_state_types
|
if k[0] in self.hs.config.room_invite_state_types
|
||||||
or k[0] == EventTypes.Member and k[1] == event.sender
|
or k == (EventTypes.Member, event.sender)
|
||||||
]
|
]
|
||||||
|
|
||||||
state_to_include = yield self.store.get_events(state_to_include_ids)
|
state_to_include = yield self.store.get_events(state_to_include_ids)
|
||||||
|
@ -545,7 +545,7 @@ class MessageHandler(BaseHandler):
|
||||||
"content": e.content,
|
"content": e.content,
|
||||||
"sender": e.sender,
|
"sender": e.sender,
|
||||||
}
|
}
|
||||||
for e in state_to_include.values()
|
for e in state_to_include.itervalues()
|
||||||
]
|
]
|
||||||
|
|
||||||
invitee = UserID.from_string(event.state_key)
|
invitee = UserID.from_string(event.state_key)
|
||||||
|
@ -618,6 +618,3 @@ class MessageHandler(BaseHandler):
|
||||||
)
|
)
|
||||||
|
|
||||||
preserve_fn(_notify)()
|
preserve_fn(_notify)()
|
||||||
|
|
||||||
# If invite, remove room_state from unsigned before sending.
|
|
||||||
event.unsigned.pop("invite_room_state", None)
|
|
||||||
|
|
|
@ -250,9 +250,11 @@ class SyncRestServlet(RestServlet):
|
||||||
"""
|
"""
|
||||||
invited = {}
|
invited = {}
|
||||||
for room in rooms:
|
for room in rooms:
|
||||||
|
logger.info("invite: %r", room.invite)
|
||||||
invite = serialize_event(
|
invite = serialize_event(
|
||||||
room.invite, time_now, token_id=token_id,
|
room.invite, time_now, token_id=token_id,
|
||||||
event_format=format_event_for_client_v2_without_room_id,
|
event_format=format_event_for_client_v2_without_room_id,
|
||||||
|
is_invite=True,
|
||||||
)
|
)
|
||||||
unsigned = dict(invite.get("unsigned", {}))
|
unsigned = dict(invite.get("unsigned", {}))
|
||||||
invite["unsigned"] = unsigned
|
invite["unsigned"] = unsigned
|
||||||
|
|
Loading…
Reference in New Issue