diff --git a/examples/node/app.js b/examples/node/app.js index dc86d58eb..9b1fd6136 100644 --- a/examples/node/app.js +++ b/examples/node/app.js @@ -147,8 +147,13 @@ function printMemberList() { } function printLine(event) { - // TODO: Update with event.sender when implemented. - console.log("%s :: %s", event.getSender(), event.getContent().body); + var name = event.sender ? event.sender.name : event.getSender(); + var separator = "<<<"; + if (event.getSender() === myUserId) { + name = "Me"; + separator = ">>>"; + } + console.log("%s %s %s", name, separator, event.getContent().body); } matrixClient.startClient(numMessagesToShow); // messages for each room. \ No newline at end of file diff --git a/lib/models/room-state.js b/lib/models/room-state.js index a42660c66..894e3068d 100644 --- a/lib/models/room-state.js +++ b/lib/models/room-state.js @@ -37,6 +37,15 @@ RoomState.prototype.getMembers = function() { return utils.values(this.members); }; +/** + * Get a room member by their user ID. + * @param {string} userId The room member's user ID. + * @return {RoomMember} The member or null if they do not exist. + */ +RoomState.prototype.getMember = function(userId) { + return this.members[userId] || null; +}; + /** * Get state events from the state of the room. * @param {string} eventType The event type of the state event. diff --git a/lib/models/room.js b/lib/models/room.js index 71379540a..1256b8834 100644 --- a/lib/models/room.js +++ b/lib/models/room.js @@ -45,6 +45,10 @@ utils.inherits(Room, EventEmitter); return member; }; +/** + * Get a list of members whose membership state is "join". + * @return {RoomMember[]} A list of currently joined members. + */ Room.prototype.getJoinedMembers = function() { return utils.filter(this.currentState.getMembers(), function(m) { return m.membership === "join"; @@ -61,7 +65,13 @@ utils.inherits(Room, EventEmitter); * @fires module:client~MatrixClient#event:"Room.timeline" */ Room.prototype.addEventsToTimeline = function(events, toStartOfTimeline) { + var stateContext = toStartOfTimeline ? this.oldState : this.currentState; + for (var i = 0; i < events.length; i++) { + events[i].sender = stateContext.getMember(events[i].getSender()); + if (events[i].getType() === "m.room.member") { + events[i].target = stateContext.getMember(events[i].getStateKey()); + } if (toStartOfTimeline) { this.timeline.unshift(events[i]); }