diff --git a/lib/sync.js b/lib/sync.js index 7ec080ae6..7416e8408 100644 --- a/lib/sync.js +++ b/lib/sync.js @@ -719,14 +719,28 @@ SyncApi.prototype._processSyncResponse = function(syncToken, data) { accountDataEvents.forEach(function(e) { client.emit("event", e); }); }); - // Handle leaves + // Handle leaves (e.g. kicked rooms) leaveRooms.forEach(function(leaveObj) { - // Do the bear minimum to register rejected invites / you leaving rooms var room = leaveObj.room; + var stateEvents = + self._mapSyncEventsFormat(leaveObj.state, room); var timelineEvents = self._mapSyncEventsFormat(leaveObj.timeline, room); - room.addEvents(timelineEvents); + var accountDataEvents = + self._mapSyncEventsFormat(leaveObj.account_data); + + self._processRoomEvents(room, stateEvents, timelineEvents); + room.addAccountData(accountDataEvents); + + room.recalculate(client.credentials.userId); + if (leaveObj.isBrandNewRoom) { + client.store.storeRoom(room); + client.emit("Room", room); + } + + stateEvents.forEach(function(e) { client.emit("event", e); }); timelineEvents.forEach(function(e) { client.emit("event", e); }); + accountDataEvents.forEach(function(e) { client.emit("event", e); }); }); };