1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-26 17:03:12 +03:00

make sure we show display names & avatars on parts, and use the right type of content for displaynames for member events in general. fixes https://github.com/vector-im/vector-web/issues/1140 and https://github.com/vector-im/vector-web/issues/873 and a bunch more

This commit is contained in:
Matthew Hodgson
2016-03-16 13:51:55 +00:00
parent 2c277f7d96
commit de864c489a
3 changed files with 19 additions and 1 deletions

View File

@@ -143,6 +143,8 @@ module.exports.MatrixEvent.prototype = {
/** /**
* Get either 'content' or 'prev_content' depending on if this event is * Get either 'content' or 'prev_content' depending on if this event is
* 'forward-looking' or not. This can be modified via event.forwardLooking. * 'forward-looking' or not. This can be modified via event.forwardLooking.
* In practice, this means we get the chronologically earlier content value
* for this event (this method should surely be called getEarlierContent)
* <strong>This method is experimental and may change.</strong> * <strong>This method is experimental and may change.</strong>
* @return {Object} event.content if this event is forward-looking, else * @return {Object} event.content if this event is forward-looking, else
* event.prev_content. * event.prev_content.

View File

@@ -203,7 +203,10 @@ RoomMember.prototype.getAvatarUrl =
}; };
function calculateDisplayName(member, event, roomState) { function calculateDisplayName(member, event, roomState) {
var displayName = event.getDirectionalContent().displayname; // N.B. getContent() not getDirectionalContent() at this point
// as we don't care about the chronologically earlier content
// but its current content!
var displayName = event.getContent().displayname;
var selfUserId = member.userId; var selfUserId = member.userId;
/* /*

View File

@@ -145,6 +145,19 @@ RoomState.prototype.setStateEvents = function(stateEvents) {
if (event.getType() === "m.room.member") { if (event.getType() === "m.room.member") {
var userId = event.getStateKey(); var userId = event.getStateKey();
// leave events apparently elide the displayname or avatar_url,
// so let's fake one up so that we don't leak user ids
// into the timeline
if (event.getContent().membership === "leave" ||
event.getContent().membership === "ban")
{
event.getContent().avatar_url =
event.getPrevContent().avatar_url;
event.getContent().displayname =
event.getPrevContent().displayname;
}
var member = self.members[userId]; var member = self.members[userId];
if (!member) { if (!member) {
member = new RoomMember(event.getRoomId(), userId); member = new RoomMember(event.getRoomId(), userId);