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

Add more events to User

There was no way of observing changes to fields like currentlyActive, so add this and add one for lastPresenceTs that will be fired whenever we get a presence event.
This commit is contained in:
David Baker
2016-07-14 09:38:50 +01:00
parent cee9a954ec
commit ecb31b5aaf
2 changed files with 35 additions and 4 deletions

View File

@@ -87,8 +87,15 @@ User.prototype.setPresenceEvent = function(event) {
{ {
eventsToFire.push("User.displayName"); eventsToFire.push("User.displayName");
} }
if (event.getContent().currently_active &&
event.getContent().currently_active !== this.currentlyActive)
{
eventsToFire.push("User.currentlyActive");
}
this.presence = event.getContent().presence; this.presence = event.getContent().presence;
eventsToFire.push("User.lastPresenceTs");
if (event.getContent().displayname) { if (event.getContent().displayname) {
this.displayName = event.getContent().displayname; this.displayName = event.getContent().displayname;
} }
@@ -99,9 +106,7 @@ User.prototype.setPresenceEvent = function(event) {
this.lastPresenceTs = Date.now(); this.lastPresenceTs = Date.now();
this.currentlyActive = event.getContent().currently_active; this.currentlyActive = event.getContent().currently_active;
if (eventsToFire.length > 0) { this._updateModifiedTime();
this._updateModifiedTime();
}
for (var i = 0; i < eventsToFire.length; i++) { for (var i = 0; i < eventsToFire.length; i++) {
this.emit(eventsToFire[i], event, this); this.emit(eventsToFire[i], event, this);
@@ -165,6 +170,18 @@ User.prototype.getLastActiveTs = function() {
*/ */
module.exports = User; module.exports = User;
/**
* Fires whenever any user's lastPresenceTs changes,
* ie. whenever any presence event is received for a user.
* @event module:client~MatrixClient#"User.lastPresenceTs"
* @param {MatrixEvent} event The matrix event which caused this event to fire.
* @param {User} user The user whose User.lastPresenceTs changed.
* @example
* matrixClient.on("User.lastPresenceTs", function(event, user){
* var newlastPresenceTs = user.lastPresenceTs;
* });
*/
/** /**
* Fires whenever any user's presence changes. * Fires whenever any user's presence changes.
* @event module:client~MatrixClient#"User.presence" * @event module:client~MatrixClient#"User.presence"
@@ -176,6 +193,17 @@ module.exports = User;
* }); * });
*/ */
/**
* Fires whenever any user's currentlyActive changes.
* @event module:client~MatrixClient#"User.currentlyActive"
* @param {MatrixEvent} event The matrix event which caused this event to fire.
* @param {User} user The user whose User.currentlyActive changed.
* @example
* matrixClient.on("User.currentlyActive", function(event, user){
* var newCurrentlyActive = user.currentlyActive;
* });
*/
/** /**
* Fires whenever any user's display name changes. * Fires whenever any user's display name changes.
* @event module:client~MatrixClient#"User.displayName" * @event module:client~MatrixClient#"User.displayName"

View File

@@ -1040,7 +1040,10 @@ SyncApi.prototype._onOnline = function() {
function createNewUser(client, userId) { function createNewUser(client, userId) {
var user = new User(userId); var user = new User(userId);
reEmit(client, user, ["User.avatarUrl", "User.displayName", "User.presence"]); reEmit(client, user, [
"User.avatarUrl", "User.displayName", "User.presence",
"User.currentlyActive", "User.lastPresenceTs"
]);
return user; return user;
} }