Handle input.StateEventIDs inside processRoomEvent

Rather than inside calculateAndStoreState
This commit is contained in:
Mark Haines 2017-02-14 16:21:22 +00:00
parent 632162f9e1
commit 548ba1fd1f

View file

@ -65,8 +65,24 @@ func processRoomEvent(db RoomEventDatabase, input api.InputRoomEvent) error {
if stateAtEvent.BeforeStateSnapshotNID == 0 { if stateAtEvent.BeforeStateSnapshotNID == 0 {
// We haven't calculated a state for this event yet. // We haven't calculated a state for this event yet.
// Lets calculate one. // Lets calculate one.
if stateAtEvent.BeforeStateSnapshotNID, err = calculateAndStoreState(db, event, roomNID, input.StateEventIDs); err != nil { if input.StateEventIDs != nil {
return err // We've been told what the state at the event is so we don't need to calculate it.
// Check that those state events are in the database and store the state.
entries, err := db.StateEntriesForEventIDs(input.StateEventIDs)
if err != nil {
return err
}
if stateAtEvent.BeforeStateSnapshotNID, err = db.AddState(roomNID, nil, entries); err != nil {
return nil
}
} else {
// We haven't been told what the state at the event is so we need to calculate it from the prev_events
if stateAtEvent.BeforeStateSnapshotNID, err = calculateAndStoreState(
db, event, roomNID, input.StateEventIDs,
); err != nil {
return err
}
} }
db.SetState(stateAtEvent.EventNID, stateAtEvent.BeforeStateSnapshotNID) db.SetState(stateAtEvent.EventNID, stateAtEvent.BeforeStateSnapshotNID)
} }