1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-09-01 21:21:58 +03:00
Files
matrix-js-sdk/lib/models/room-member.js
2015-06-10 14:42:40 +01:00

81 lines
2.5 KiB
JavaScript

"use strict";
/**
* @module models/room-member
*/
var utils = require("../utils");
/**
* Construct a new room member.
* @constructor
* @param {MatrixEvent} event The <code>m.room.member</code> event.
* @prop {string} roomId The room ID for this member.
* @prop {string} userId The user ID of this member.
* @prop {MatrixEvent} event The <code>m.room.member</code> event.
* @prop {boolean} typing True if the room member is currently typing.
* @prop {string} name The human-readable name for this room member.
* @prop {Number} powerLevel The power level for this room member.
* @prop {Number} powerLevelNorm The normalised power level (0-100) for this
* room member.
* @prop {User} user The User object for this room member, if one exists.
* @throws If the event provided is not <code>m.room.member</code>
*/
function RoomMember(event) {
if (event.getType() !== "m.room.member") {
throw new Error("Invalid event type: " + event.getType());
}
this.roomId = event.getRoomId();
this.userId = event.getStateKey();
this.event = event;
this.typing = false;
this.name = this.calculateDisplayName();
this.powerLevel = 0;
this.powerLevelNorm = 0;
this.user = null;
}
RoomMember.prototype = {
/**
* Get the membership state of this room member.
* @return {string} The membership state e.g. 'join'.
*/
getMembershipState: function() {
return this.event.getContent().membership;
},
/**
* Calculates the display name for this room member.
* @param {RoomState} roomState Optional. The room state to take into
* account when calculating (e.g. for disambiguating users with the same
* name).
* @return {string} The calculated display name.
*/
calculateDisplayName: function(roomState) {
var displayName = this.event.getContent().displayname;
var selfUserId = this.userId;
if (!displayName) {
return selfUserId;
}
if (!roomState) {
return displayName;
}
var stateEvents = utils.filter(
roomState.getStateEvents("m.room.member"),
function(event) {
return event.getContent().displayname === displayName &&
event.getSender() !== selfUserId;
}
);
if (stateEvents.length > 1) {
return displayName + " (" + selfUserId + ")";
}
return displayName;
}
};
/**
* The RoomMember class.
*/
module.exports = RoomMember;