diff --git a/src/room/persister.js b/src/room/persister.js index fe4f7563..aed18474 100644 --- a/src/room/persister.js +++ b/src/room/persister.js @@ -19,12 +19,6 @@ class RoomPersister { } async persistSync(roomResponse, txn) { - // persist state - const state = roomResponse.state; - if (state.events) { - const promises = state.events.map((event) => txn.state.setStateEventAt(this._lastSortKey, event)); - await Promise.all(promises); - } let nextKey; const timeline = roomResponse.timeline; @@ -34,6 +28,7 @@ class RoomPersister { txn.timeline.appendGap(this._roomId, nextKey, {prev_batch: timeline.prev_batch}); } nextKey = this._lastSortKey.nextKey(); + const startOfChunkSortKey = nextKey; if (timeline.events) { for(const event of timeline.events) { @@ -43,5 +38,14 @@ class RoomPersister { } // what happens here when the txn fails? this._lastSortKey = nextKey; + + // persist state + const state = roomResponse.state; + if (state.events) { + const promises = state.events.map((event) => { + txn.state.setStateEventAt(startOfChunkSortKey, event) + }); + await Promise.all(promises); + } } } \ No newline at end of file diff --git a/src/sync.js b/src/sync.js index b6c707d6..2cbfcfa5 100644 --- a/src/sync.js +++ b/src/sync.js @@ -75,7 +75,7 @@ export class Sync { parseRooms(response.rooms, async (roomId, roomResponse, membership) => { let room = session.getRoom(roomId); if (!room) { - room = session.createRoom(roomId, txn); + room = session.createRoom(roomId); } room.applySync(roomResponse, membership, txn); });