Home Reference Source

src/contacts/PresenceCollection.js

/**
 * A local collection of presences
 * @private
 */
export class PresenceCollection {

	/**
	 * Constructs a local presence collection
	 * @protected
	 * @param {Array<Object>} presences initial presences to be stored.
	 */
	constructor(presences = []) {

		/**
		 * Presence objects indexed by address.
		 * @private
		 * @type {Object}
		 */
		this._presenceByAddress = {};

		presences.forEach((presence) => {
			this._presenceByAddress[presence.address] = presence;
		});
	}

	/**
	 * Store a new presence or update an existing one.
	 * @protected
	 * @param {Object} presence The presence to be stored.
	 */
	updatePresence(presence) {
		this._presenceByAddress[presence.address] = presence;
	}

	/**
	 * Get an stored presence.
	 * @protected
	 * @param {String} address The address of the requested presence.
	 * @return {Object|undefined} found presence or undefined if such address
	 * is not stored.
	 */
	getPresence(address) {
		return this._presenceByAddress[address];
	}

	/**
	 * Remove a presence from this collection.
	 * @protected
	 * @param {String} address The address of the presence to be removed.
	 */
	removePresence(address) {
		delete this._presenceByAddress[address];
	}
}