mirror of
https://github.com/element-hq/synapse
synced 2024-09-04 06:40:06 +00:00
Merge pull request #2163 from matrix-org/erikj/fix_invite_state
Fix invite state to always include all events
This commit is contained in:
commit
25a96e0c63
3 changed files with 26 additions and 7 deletions
|
@ -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
|
||||||
|
@ -251,6 +266,12 @@ def serialize_event(e, time_now_ms, as_client_event=True,
|
||||||
if txn_id is not None:
|
if txn_id is not None:
|
||||||
d["unsigned"]["transaction_id"] = txn_id
|
d["unsigned"]["transaction_id"] = txn_id
|
||||||
|
|
||||||
|
# If this is an invite for somebody else, then we don't care about the
|
||||||
|
# invite_room_state as that's meant solely for the invitee. Other clients
|
||||||
|
# will already have the state since they're in the room.
|
||||||
|
if not is_invite:
|
||||||
|
d["unsigned"].pop("invite_room_state", None)
|
||||||
|
|
||||||
if as_client_event:
|
if as_client_event:
|
||||||
d = event_format(d)
|
d = event_format(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)
|
|
||||||
|
|
|
@ -253,6 +253,7 @@ class SyncRestServlet(RestServlet):
|
||||||
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 a new issue