033babfbfc
* WIP support for reading groups from sync stream Only does invites currently * More support for parsing groups in the sync stream * Fix jsdoc
96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
/*
|
|
Copyright 2017 New Vector Ltd
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
/**
|
|
* @module models/group
|
|
*/
|
|
const EventEmitter = require("events").EventEmitter;
|
|
|
|
const utils = require("../utils");
|
|
|
|
/**
|
|
* Construct a new Group.
|
|
*
|
|
* @param {string} groupId The ID of this group.
|
|
*
|
|
* @prop {string} groupId The ID of this group.
|
|
* @prop {string} name The human-readable display name for this group.
|
|
* @prop {string} avatarUrl The mxc URL for this group's avatar.
|
|
* @prop {string} myMembership The logged in user's membership of this group
|
|
* @prop {Object} inviter Infomation about the user who invited the logged in user
|
|
* to the group, if myMembership is 'invite'.
|
|
* @prop {string} inviter.userId The user ID of the inviter
|
|
*/
|
|
function Group(groupId) {
|
|
this.groupId = groupId;
|
|
this.name = null;
|
|
this.avatarUrl = null;
|
|
this.myMembership = null;
|
|
this.inviter = null;
|
|
}
|
|
utils.inherits(Group, EventEmitter);
|
|
|
|
Group.prototype.setProfile = function(name, avatarUrl) {
|
|
if (this.name === name && this.avatarUrl === avatarUrl) return;
|
|
|
|
this.name = name || this.groupId;
|
|
this.avatarUrl = avatarUrl;
|
|
|
|
this.emit("Group.profile", this);
|
|
};
|
|
|
|
Group.prototype.setMyMembership = function(membership) {
|
|
if (this.myMembership === membership) return;
|
|
|
|
this.myMembership = membership;
|
|
|
|
this.emit("Group.myMembership", this);
|
|
};
|
|
|
|
/**
|
|
* Sets the 'inviter' property. This does not emit an event (the inviter
|
|
* will only change when the user is revited / reinvited to a room),
|
|
* so set this before setting myMembership.
|
|
* @param {Object} inviter Infomation about who invited us to the room
|
|
*/
|
|
Group.prototype.setInviter = function(inviter) {
|
|
this.inviter = inviter;
|
|
};
|
|
|
|
module.exports = Group;
|
|
|
|
/**
|
|
* Fires whenever a group's profile information is updated.
|
|
* This means the 'name' and 'avatarUrl' properties.
|
|
* @event module:client~MatrixClient#"Group.profile"
|
|
* @param {Group} group The group whose profile was updated.
|
|
* @example
|
|
* matrixClient.on("Group.profile", function(group){
|
|
* var name = group.name;
|
|
* });
|
|
*/
|
|
|
|
/**
|
|
* Fires whenever the logged in user's membership status of
|
|
* the group is updated.
|
|
* @event module:client~MatrixClient#"Group.myMembership"
|
|
* @param {Group} group The group in which the user's membership changed
|
|
* @example
|
|
* matrixClient.on("Group.myMembership", function(group){
|
|
* var myMembership = group.myMembership;
|
|
* });
|
|
*/
|