1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-28 05:03:59 +03:00

Support for updating members in RoomState from lazily loaded members

This commit is contained in:
Bruno Windels
2018-07-10 17:16:27 +02:00
parent f012ada2c4
commit 2b5925b893

View File

@@ -228,15 +228,7 @@ RoomState.prototype.setStateEvents = function(stateEvents) {
}
member.setMembershipEvent(event, self);
// this member may have a power level already, so set it.
const pwrLvlEvent = self.getStateEvents("m.room.power_levels", "");
if (pwrLvlEvent) {
member.setPowerLevelEvent(pwrLvlEvent);
}
// blow away the sentinel which is now outdated
delete self._sentinels[userId];
self._updateMember(member);
self.emit("RoomState.members", event, self, member);
} else if (event.getType() === "m.room.power_levels") {
const members = utils.values(self.members);
@@ -251,6 +243,35 @@ RoomState.prototype.setStateEvents = function(stateEvents) {
});
};
RoomState.prototype._updateMember = function(member) {
// this member may have a power level already, so set it.
const pwrLvlEvent = this.getStateEvents("m.room.power_levels", "");
if (pwrLvlEvent) {
member.setPowerLevelEvent(pwrLvlEvent);
}
// blow away the sentinel which is now outdated
delete this._sentinels[member.userId];
this.members[member.userId] = member;
this._joinedMemberCount = null;
}
RoomState.prototype.setJoinedMembers = function(joinedMembers) {
const joinedRoomMembers = Object.entries(joinedMembers).map(([userId, details]) => {
const displayName = details.display_name;
const avatarUrl = details.avatar_url;
const member = new RoomMember(this.roomId, userId);
member.setAsJoinedMember(displayName, avatarUrl, this);
return member;
});
joinedRoomMembers.forEach(member => {
_updateDisplayNameCache(this, member.userId, member.name);
this._updateMember(member);
});
this.emit("Room");
}
/**
* Set the current typing event for this room.
* @param {MatrixEvent} event The typing event