diff --git a/lib/sync.js b/lib/sync.js index a1a5e7614..957a66a0e 100644 --- a/lib/sync.js +++ b/lib/sync.js @@ -277,10 +277,18 @@ SyncApi.prototype._sync = function(syncOptions, attempt) { var room = joinObj.room; var stateEvents = self._mapSyncEventsFormat(joinObj.state, room); var timelineEvents = self._mapSyncEventsFormat(joinObj.timeline, room); + var ephemeralEvents = self._mapSyncEventsFormat(joinObj.ephemeral); + var accountDataEvents = self._mapSyncEventsFormat(joinObj.account_data); + + if (joinObj.timeline.limited) { + // nuke the timeline so we don't get holes + room.timeline = []; + } self._processRoomEvents( room, stateEvents, timelineEvents, joinObj.timeline.prev_batch ); - // TODO: Receipts, Typing, Tags from ephermeral + account_data + room.addEvents(ephemeralEvents); + room.addEvents(accountDataEvents); room.recalculate(client.credentials.userId); if (joinObj.isBrandNewRoom) { client.store.storeRoom(room); @@ -296,57 +304,6 @@ SyncApi.prototype._sync = function(syncOptions, attempt) { console.error("Caught /sync error:"); console.error(e); } - - /* - var i, j; - // intercept the results and put them into our store - if (!(client.store instanceof StubStore)) { - // group receipts by room ID. - var receiptsByRoom = {}; - data.receipts = data.receipts || []; - utils.forEach(data.receipts.map(client.getEventMapper()), - function(receiptEvent) { - if (!receiptsByRoom[receiptEvent.getRoomId()]) { - receiptsByRoom[receiptEvent.getRoomId()] = []; - } - receiptsByRoom[receiptEvent.getRoomId()].push(receiptEvent); - } - ); - - for (i = 0; i < data.rooms.length; i++) { - - _processRoomEvents( - client, room, data.rooms[i].state, data.rooms[i].messages - ); - - var receipts = receiptsByRoom[room.roomId] || []; - for (j = 0; j < receipts.length; j++) { - room.addReceipt(receipts[j]); - } - - var privateUserData = data.rooms[i].account_data || []; - var privateUserDataEvents = - utils.map(privateUserData, client.getEventMapper()); - for (j = 0; j < privateUserDataEvents.length; j++) { - var event = privateUserDataEvents[j]; - if (event.getType() === "m.tag") { - room.addTags(event); - } - // XXX: unhandled private user data event - we should probably - // put it somewhere useful once the API has settled - } - - // cache the name/summary/etc prior to storage since we don't - // know how the store will serialise the Room. - room.recalculate(client.credentials.userId); - - client.store.storeRoom(room); - client.emit("Room", room); - } - } - - */ - // emit synced events if (!syncOptions.hasSyncedBefore) {