|
@@ -203,25 +203,27 @@ class StateHandler(object):
|
|
|
# If this is an outlier, then we know it shouldn't have any current
|
|
|
# state. Certainly store.get_current_state won't return any, and
|
|
|
# persisting the event won't store the state group.
|
|
|
- context = EventContext()
|
|
|
if old_state:
|
|
|
- context.prev_state_ids = {
|
|
|
+ prev_state_ids = {
|
|
|
(s.type, s.state_key): s.event_id for s in old_state
|
|
|
}
|
|
|
if event.is_state():
|
|
|
- context.current_state_ids = dict(context.prev_state_ids)
|
|
|
+ current_state_ids = dict(prev_state_ids)
|
|
|
key = (event.type, event.state_key)
|
|
|
- context.current_state_ids[key] = event.event_id
|
|
|
+ current_state_ids[key] = event.event_id
|
|
|
else:
|
|
|
- context.current_state_ids = context.prev_state_ids
|
|
|
+ current_state_ids = prev_state_ids
|
|
|
else:
|
|
|
- context.current_state_ids = {}
|
|
|
- context.prev_state_ids = {}
|
|
|
- context.prev_state_events = []
|
|
|
+ current_state_ids = {}
|
|
|
+ prev_state_ids = {}
|
|
|
|
|
|
# We don't store state for outliers, so we don't generate a state
|
|
|
- # froup for it.
|
|
|
- context.state_group = None
|
|
|
+ # group for it.
|
|
|
+ context = EventContext(
|
|
|
+ state_group=None,
|
|
|
+ current_state_ids=current_state_ids,
|
|
|
+ prev_state_ids=prev_state_ids,
|
|
|
+ )
|
|
|
|
|
|
defer.returnValue(context)
|
|
|
|
|
@@ -230,31 +232,35 @@ class StateHandler(object):
|
|
|
# Let's just correctly fill out the context and create a
|
|
|
# new state group for it.
|
|
|
|
|
|
- context = EventContext()
|
|
|
- context.prev_state_ids = {
|
|
|
+ prev_state_ids = {
|
|
|
(s.type, s.state_key): s.event_id for s in old_state
|
|
|
}
|
|
|
|
|
|
if event.is_state():
|
|
|
key = (event.type, event.state_key)
|
|
|
- if key in context.prev_state_ids:
|
|
|
- replaces = context.prev_state_ids[key]
|
|
|
+ if key in prev_state_ids:
|
|
|
+ replaces = prev_state_ids[key]
|
|
|
if replaces != event.event_id: # Paranoia check
|
|
|
event.unsigned["replaces_state"] = replaces
|
|
|
- context.current_state_ids = dict(context.prev_state_ids)
|
|
|
- context.current_state_ids[key] = event.event_id
|
|
|
+ current_state_ids = dict(prev_state_ids)
|
|
|
+ current_state_ids[key] = event.event_id
|
|
|
else:
|
|
|
- context.current_state_ids = context.prev_state_ids
|
|
|
+ current_state_ids = prev_state_ids
|
|
|
|
|
|
- context.state_group = yield self.store.store_state_group(
|
|
|
+ state_group = yield self.store.store_state_group(
|
|
|
event.event_id,
|
|
|
event.room_id,
|
|
|
prev_group=None,
|
|
|
delta_ids=None,
|
|
|
- current_state_ids=context.current_state_ids,
|
|
|
+ current_state_ids=current_state_ids,
|
|
|
+ )
|
|
|
+
|
|
|
+ context = EventContext(
|
|
|
+ state_group=state_group,
|
|
|
+ current_state_ids=current_state_ids,
|
|
|
+ prev_state_ids=prev_state_ids,
|
|
|
)
|
|
|
|
|
|
- context.prev_state_events = []
|
|
|
defer.returnValue(context)
|
|
|
|
|
|
logger.debug("calling resolve_state_groups from compute_event_context")
|
|
@@ -262,47 +268,47 @@ class StateHandler(object):
|
|
|
event.room_id, [e for e, _ in event.prev_events],
|
|
|
)
|
|
|
|
|
|
- curr_state = entry.state
|
|
|
+ prev_state_ids = entry.state
|
|
|
+ prev_group = None
|
|
|
+ delta_ids = None
|
|
|
|
|
|
- context = EventContext()
|
|
|
- context.prev_state_ids = curr_state
|
|
|
if event.is_state():
|
|
|
# If this is a state event then we need to create a new state
|
|
|
# group for the state after this event.
|
|
|
|
|
|
key = (event.type, event.state_key)
|
|
|
- if key in context.prev_state_ids:
|
|
|
- replaces = context.prev_state_ids[key]
|
|
|
+ if key in prev_state_ids:
|
|
|
+ replaces = prev_state_ids[key]
|
|
|
event.unsigned["replaces_state"] = replaces
|
|
|
|
|
|
- context.current_state_ids = dict(context.prev_state_ids)
|
|
|
- context.current_state_ids[key] = event.event_id
|
|
|
+ current_state_ids = dict(prev_state_ids)
|
|
|
+ current_state_ids[key] = event.event_id
|
|
|
|
|
|
if entry.state_group:
|
|
|
# If the state at the event has a state group assigned then
|
|
|
# we can use that as the prev group
|
|
|
- context.prev_group = entry.state_group
|
|
|
- context.delta_ids = {
|
|
|
+ prev_group = entry.state_group
|
|
|
+ delta_ids = {
|
|
|
key: event.event_id
|
|
|
}
|
|
|
elif entry.prev_group:
|
|
|
# If the state at the event only has a prev group, then we can
|
|
|
# use that as a prev group too.
|
|
|
- context.prev_group = entry.prev_group
|
|
|
- context.delta_ids = dict(entry.delta_ids)
|
|
|
- context.delta_ids[key] = event.event_id
|
|
|
+ prev_group = entry.prev_group
|
|
|
+ delta_ids = dict(entry.delta_ids)
|
|
|
+ delta_ids[key] = event.event_id
|
|
|
|
|
|
- context.state_group = yield self.store.store_state_group(
|
|
|
+ state_group = yield self.store.store_state_group(
|
|
|
event.event_id,
|
|
|
event.room_id,
|
|
|
- prev_group=context.prev_group,
|
|
|
- delta_ids=context.delta_ids,
|
|
|
- current_state_ids=context.current_state_ids,
|
|
|
+ prev_group=prev_group,
|
|
|
+ delta_ids=delta_ids,
|
|
|
+ current_state_ids=current_state_ids,
|
|
|
)
|
|
|
else:
|
|
|
- context.current_state_ids = context.prev_state_ids
|
|
|
- context.prev_group = entry.prev_group
|
|
|
- context.delta_ids = entry.delta_ids
|
|
|
+ current_state_ids = prev_state_ids
|
|
|
+ prev_group = entry.prev_group
|
|
|
+ delta_ids = entry.delta_ids
|
|
|
|
|
|
if entry.state_group is None:
|
|
|
entry.state_group = yield self.store.store_state_group(
|
|
@@ -310,13 +316,20 @@ class StateHandler(object):
|
|
|
event.room_id,
|
|
|
prev_group=entry.prev_group,
|
|
|
delta_ids=entry.delta_ids,
|
|
|
- current_state_ids=context.current_state_ids,
|
|
|
+ current_state_ids=current_state_ids,
|
|
|
)
|
|
|
entry.state_id = entry.state_group
|
|
|
|
|
|
- context.state_group = entry.state_group
|
|
|
+ state_group = entry.state_group
|
|
|
+
|
|
|
+ context = EventContext(
|
|
|
+ state_group=state_group,
|
|
|
+ current_state_ids=current_state_ids,
|
|
|
+ prev_state_ids=prev_state_ids,
|
|
|
+ prev_group=prev_group,
|
|
|
+ delta_ids=delta_ids,
|
|
|
+ )
|
|
|
|
|
|
- context.prev_state_events = []
|
|
|
defer.returnValue(context)
|
|
|
|
|
|
@defer.inlineCallbacks
|