UNPKG

matrix-react-sdk

Version:
102 lines (96 loc) 11.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _logger = require("matrix-js-sdk/src/logger"); var _matrix = require("matrix-js-sdk/src/matrix"); var _MatrixClientPeg = require("./MatrixClientPeg"); var _dispatcher = _interopRequireDefault(require("./dispatcher/dispatcher")); var _Timer = _interopRequireDefault(require("./utils/Timer")); /* Copyright 2024 New Vector Ltd. Copyright 2019 The Matrix.org Foundation C.I.C. Copyright 2018 New Vector Ltd Copyright 2015, 2016 OpenMarket Ltd SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ // Time in ms after that a user is considered as unavailable/away const UNAVAILABLE_TIME_MS = 3 * 60 * 1000; // 3 mins class Presence { constructor() { (0, _defineProperty2.default)(this, "unavailableTimer", null); (0, _defineProperty2.default)(this, "dispatcherRef", null); (0, _defineProperty2.default)(this, "state", null); (0, _defineProperty2.default)(this, "onAction", payload => { if (payload.action === "user_activity") { this.setState(_matrix.SetPresence.Online); this.unavailableTimer?.restart(); } }); } /** * Start listening the user activity to evaluate his presence state. * Any state change will be sent to the homeserver. */ async start() { this.unavailableTimer = new _Timer.default(UNAVAILABLE_TIME_MS); // the user_activity_start action starts the timer this.dispatcherRef = _dispatcher.default.register(this.onAction); while (this.unavailableTimer) { try { await this.unavailableTimer.finished(); this.setState(_matrix.SetPresence.Unavailable); } catch (e) { /* aborted, stop got called */ } } } /** * Stop tracking user activity */ stop() { if (this.dispatcherRef) { _dispatcher.default.unregister(this.dispatcherRef); this.dispatcherRef = null; } if (this.unavailableTimer) { this.unavailableTimer.abort(); this.unavailableTimer = null; } } /** * Get the current presence state. * @returns {string} the presence state (see PRESENCE enum) */ getState() { return this.state; } /** * Set the presence state. * If the state has changed, the homeserver will be notified. * @param {string} newState the new presence state (see PRESENCE enum) */ async setState(newState) { if (newState === this.state) { return; } const oldState = this.state; this.state = newState; if (_MatrixClientPeg.MatrixClientPeg.safeGet().isGuest()) { return; // don't try to set presence when a guest; it won't work. } try { await _MatrixClientPeg.MatrixClientPeg.safeGet().setSyncPresence(this.state); _logger.logger.debug("Presence:", newState); } catch (err) { _logger.logger.error("Failed to set presence:", err); this.state = oldState; } } } var _default = exports.default = new Presence(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfTWF0cml4Q2xpZW50UGVnIiwiX2Rpc3BhdGNoZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1RpbWVyIiwiVU5BVkFJTEFCTEVfVElNRV9NUyIsIlByZXNlbmNlIiwiY29uc3RydWN0b3IiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsInBheWxvYWQiLCJhY3Rpb24iLCJzZXRTdGF0ZSIsIlNldFByZXNlbmNlIiwiT25saW5lIiwidW5hdmFpbGFibGVUaW1lciIsInJlc3RhcnQiLCJzdGFydCIsIlRpbWVyIiwiZGlzcGF0Y2hlclJlZiIsImRpcyIsInJlZ2lzdGVyIiwib25BY3Rpb24iLCJmaW5pc2hlZCIsIlVuYXZhaWxhYmxlIiwiZSIsInN0b3AiLCJ1bnJlZ2lzdGVyIiwiYWJvcnQiLCJnZXRTdGF0ZSIsInN0YXRlIiwibmV3U3RhdGUiLCJvbGRTdGF0ZSIsIk1hdHJpeENsaWVudFBlZyIsInNhZmVHZXQiLCJpc0d1ZXN0Iiwic2V0U3luY1ByZXNlbmNlIiwibG9nZ2VyIiwiZGVidWciLCJlcnIiLCJlcnJvciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9QcmVzZW5jZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAxOSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuQ29weXJpZ2h0IDIwMTggTmV3IFZlY3RvciBMdGRcbkNvcHlyaWdodCAyMDE1LCAyMDE2IE9wZW5NYXJrZXQgTHRkXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcbmltcG9ydCB7IFNldFByZXNlbmNlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tIFwiLi9NYXRyaXhDbGllbnRQZWdcIjtcbmltcG9ydCBkaXMgZnJvbSBcIi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgVGltZXIgZnJvbSBcIi4vdXRpbHMvVGltZXJcIjtcbmltcG9ydCB7IEFjdGlvblBheWxvYWQgfSBmcm9tIFwiLi9kaXNwYXRjaGVyL3BheWxvYWRzXCI7XG5cbi8vIFRpbWUgaW4gbXMgYWZ0ZXIgdGhhdCBhIHVzZXIgaXMgY29uc2lkZXJlZCBhcyB1bmF2YWlsYWJsZS9hd2F5XG5jb25zdCBVTkFWQUlMQUJMRV9USU1FX01TID0gMyAqIDYwICogMTAwMDsgLy8gMyBtaW5zXG5cbmNsYXNzIFByZXNlbmNlIHtcbiAgICBwcml2YXRlIHVuYXZhaWxhYmxlVGltZXI6IFRpbWVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBkaXNwYXRjaGVyUmVmOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHN0YXRlOiBTZXRQcmVzZW5jZSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU3RhcnQgbGlzdGVuaW5nIHRoZSB1c2VyIGFjdGl2aXR5IHRvIGV2YWx1YXRlIGhpcyBwcmVzZW5jZSBzdGF0ZS5cbiAgICAgKiBBbnkgc3RhdGUgY2hhbmdlIHdpbGwgYmUgc2VudCB0byB0aGUgaG9tZXNlcnZlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMudW5hdmFpbGFibGVUaW1lciA9IG5ldyBUaW1lcihVTkFWQUlMQUJMRV9USU1FX01TKTtcbiAgICAgICAgLy8gdGhlIHVzZXJfYWN0aXZpdHlfc3RhcnQgYWN0aW9uIHN0YXJ0cyB0aGUgdGltZXJcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyUmVmID0gZGlzLnJlZ2lzdGVyKHRoaXMub25BY3Rpb24pO1xuICAgICAgICB3aGlsZSAodGhpcy51bmF2YWlsYWJsZVRpbWVyKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudW5hdmFpbGFibGVUaW1lci5maW5pc2hlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoU2V0UHJlc2VuY2UuVW5hdmFpbGFibGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8qIGFib3J0ZWQsIHN0b3AgZ290IGNhbGxlZCAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcCB0cmFja2luZyB1c2VyIGFjdGl2aXR5XG4gICAgICovXG4gICAgcHVibGljIHN0b3AoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc3BhdGNoZXJSZWYpIHtcbiAgICAgICAgICAgIGRpcy51bnJlZ2lzdGVyKHRoaXMuZGlzcGF0Y2hlclJlZik7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXJSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVuYXZhaWxhYmxlVGltZXIpIHtcbiAgICAgICAgICAgIHRoaXMudW5hdmFpbGFibGVUaW1lci5hYm9ydCgpO1xuICAgICAgICAgICAgdGhpcy51bmF2YWlsYWJsZVRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgY3VycmVudCBwcmVzZW5jZSBzdGF0ZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgcHJlc2VuY2Ugc3RhdGUgKHNlZSBQUkVTRU5DRSBlbnVtKVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdGF0ZSgpOiBTZXRQcmVzZW5jZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQWN0aW9uID0gKHBheWxvYWQ6IEFjdGlvblBheWxvYWQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQuYWN0aW9uID09PSBcInVzZXJfYWN0aXZpdHlcIikge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShTZXRQcmVzZW5jZS5PbmxpbmUpO1xuICAgICAgICAgICAgdGhpcy51bmF2YWlsYWJsZVRpbWVyPy5yZXN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwcmVzZW5jZSBzdGF0ZS5cbiAgICAgKiBJZiB0aGUgc3RhdGUgaGFzIGNoYW5nZWQsIHRoZSBob21lc2VydmVyIHdpbGwgYmUgbm90aWZpZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1N0YXRlIHRoZSBuZXcgcHJlc2VuY2Ugc3RhdGUgKHNlZSBQUkVTRU5DRSBlbnVtKVxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgc2V0U3RhdGUobmV3U3RhdGU6IFNldFByZXNlbmNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChuZXdTdGF0ZSA9PT0gdGhpcy5zdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2xkU3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cbiAgICAgICAgaWYgKE1hdHJpeENsaWVudFBlZy5zYWZlR2V0KCkuaXNHdWVzdCgpKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIGRvbid0IHRyeSB0byBzZXQgcHJlc2VuY2Ugd2hlbiBhIGd1ZXN0OyBpdCB3b24ndCB3b3JrLlxuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IE1hdHJpeENsaWVudFBlZy5zYWZlR2V0KCkuc2V0U3luY1ByZXNlbmNlKHRoaXMuc3RhdGUpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiUHJlc2VuY2U6XCIsIG5ld1N0YXRlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJGYWlsZWQgdG8gc2V0IHByZXNlbmNlOlwiLCBlcnIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG9sZFN0YXRlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUHJlc2VuY2UoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFVQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxnQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FBZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQVVBO0FBQ0EsTUFBTU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQzs7QUFFM0MsTUFBTUMsUUFBUSxDQUFDO0VBQUFDLFlBQUE7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBLDRCQUM4QixJQUFJO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSx5QkFDTixJQUFJO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSxpQkFDUCxJQUFJO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSxvQkEwQ3BCQyxPQUFzQixJQUFXO01BQ2pELElBQUlBLE9BQU8sQ0FBQ0MsTUFBTSxLQUFLLGVBQWUsRUFBRTtRQUNwQyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsbUJBQVcsQ0FBQ0MsTUFBTSxDQUFDO1FBQ2pDLElBQUksQ0FBQ0MsZ0JBQWdCLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO01BQ3BDO0lBQ0osQ0FBQztFQUFBO0VBN0NEO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksTUFBYUMsS0FBS0EsQ0FBQSxFQUFrQjtJQUNoQyxJQUFJLENBQUNGLGdCQUFnQixHQUFHLElBQUlHLGNBQUssQ0FBQ2IsbUJBQW1CLENBQUM7SUFDdEQ7SUFDQSxJQUFJLENBQUNjLGFBQWEsR0FBR0MsbUJBQUcsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ0MsUUFBUSxDQUFDO0lBQ2hELE9BQU8sSUFBSSxDQUFDUCxnQkFBZ0IsRUFBRTtNQUMxQixJQUFJO1FBQ0EsTUFBTSxJQUFJLENBQUNBLGdCQUFnQixDQUFDUSxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUNYLFFBQVEsQ0FBQ0MsbUJBQVcsQ0FBQ1csV0FBVyxDQUFDO01BQzFDLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7UUFDUjtNQUFBO0lBRVI7RUFDSjs7RUFFQTtBQUNKO0FBQ0E7RUFDV0MsSUFBSUEsQ0FBQSxFQUFTO0lBQ2hCLElBQUksSUFBSSxDQUFDUCxhQUFhLEVBQUU7TUFDcEJDLG1CQUFHLENBQUNPLFVBQVUsQ0FBQyxJQUFJLENBQUNSLGFBQWEsQ0FBQztNQUNsQyxJQUFJLENBQUNBLGFBQWEsR0FBRyxJQUFJO0lBQzdCO0lBQ0EsSUFBSSxJQUFJLENBQUNKLGdCQUFnQixFQUFFO01BQ3ZCLElBQUksQ0FBQ0EsZ0JBQWdCLENBQUNhLEtBQUssQ0FBQyxDQUFDO01BQzdCLElBQUksQ0FBQ2IsZ0JBQWdCLEdBQUcsSUFBSTtJQUNoQztFQUNKOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0VBQ1djLFFBQVFBLENBQUEsRUFBdUI7SUFDbEMsT0FBTyxJQUFJLENBQUNDLEtBQUs7RUFDckI7RUFTQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0ksTUFBY2xCLFFBQVFBLENBQUNtQixRQUFxQixFQUFpQjtJQUN6RCxJQUFJQSxRQUFRLEtBQUssSUFBSSxDQUFDRCxLQUFLLEVBQUU7TUFDekI7SUFDSjtJQUVBLE1BQU1FLFFBQVEsR0FBRyxJQUFJLENBQUNGLEtBQUs7SUFDM0IsSUFBSSxDQUFDQSxLQUFLLEdBQUdDLFFBQVE7SUFFckIsSUFBSUUsZ0NBQWUsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsRUFBRTtNQUNyQyxPQUFPLENBQUM7SUFDWjtJQUVBLElBQUk7TUFDQSxNQUFNRixnQ0FBZSxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDRSxlQUFlLENBQUMsSUFBSSxDQUFDTixLQUFLLENBQUM7TUFDM0RPLGNBQU0sQ0FBQ0MsS0FBSyxDQUFDLFdBQVcsRUFBRVAsUUFBUSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxPQUFPUSxHQUFHLEVBQUU7TUFDVkYsY0FBTSxDQUFDRyxLQUFLLENBQUMseUJBQXlCLEVBQUVELEdBQUcsQ0FBQztNQUM1QyxJQUFJLENBQUNULEtBQUssR0FBR0UsUUFBUTtJQUN6QjtFQUNKO0FBQ0o7QUFBQyxJQUFBUyxRQUFBLEdBQUFDLE9BQUEsQ0FBQWpDLE9BQUEsR0FFYyxJQUFJSCxRQUFRLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==