UNPKG

matrix-react-sdk

Version:
84 lines (80 loc) 11.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.VoiceBroadcastResumer = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _matrix = require("matrix-js-sdk/src/matrix"); var _ = require(".."); var _findRoomLiveVoiceBroadcastFromUserAndDevice = require("./findRoomLiveVoiceBroadcastFromUserAndDevice"); /* Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ /** * Handles voice broadcasts on app resume (after logging in, reload, crash…). */ class VoiceBroadcastResumer { constructor(client) { (0, _defineProperty2.default)(this, "onClientSync", () => { if (this.client.getSyncState() === _matrix.SyncState.Syncing) { this.client.off(_matrix.ClientEvent.Sync, this.onClientSync); this.resume(); } }); this.client = client; if (client.isInitialSyncComplete()) { this.resume(); } else { // wait for initial sync client.on(_matrix.ClientEvent.Sync, this.onClientSync); } } resume() { const userId = this.client.getUserId(); const deviceId = this.client.getDeviceId(); if (!userId || !deviceId) { // Resuming a voice broadcast only makes sense if there is a user. return; } this.client.getRooms().forEach(room => { const infoEvent = (0, _findRoomLiveVoiceBroadcastFromUserAndDevice.findRoomLiveVoiceBroadcastFromUserAndDevice)(room, userId, deviceId); if (infoEvent) { // Found a live broadcast event from current device; stop it. // Stopping it is a temporary solution (see PSF-1669). this.sendStopVoiceBroadcastStateEvent(infoEvent); return false; } }); } sendStopVoiceBroadcastStateEvent(infoEvent) { const userId = this.client.getUserId(); const deviceId = this.client.getDeviceId(); const roomId = infoEvent.getRoomId(); if (!userId || !deviceId || !roomId) { // We can only send a state event if we know all the IDs. return; } const content = { device_id: deviceId, state: _.VoiceBroadcastInfoState.Stopped }; // all events should reference the started event const referencedEventId = infoEvent.getContent()?.state === _.VoiceBroadcastInfoState.Started ? infoEvent.getId() : infoEvent.getContent()?.["m.relates_to"]?.event_id; if (referencedEventId) { content["m.relates_to"] = { rel_type: _matrix.RelationType.Reference, event_id: referencedEventId }; } this.client.sendStateEvent(roomId, _.VoiceBroadcastInfoEventType, content, userId); } destroy() { this.client.off(_matrix.ClientEvent.Sync, this.onClientSync); } } exports.VoiceBroadcastResumer = VoiceBroadcastResumer; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl8iLCJfZmluZFJvb21MaXZlVm9pY2VCcm9hZGNhc3RGcm9tVXNlckFuZERldmljZSIsIlZvaWNlQnJvYWRjYXN0UmVzdW1lciIsImNvbnN0cnVjdG9yIiwiY2xpZW50IiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJnZXRTeW5jU3RhdGUiLCJTeW5jU3RhdGUiLCJTeW5jaW5nIiwib2ZmIiwiQ2xpZW50RXZlbnQiLCJTeW5jIiwib25DbGllbnRTeW5jIiwicmVzdW1lIiwiaXNJbml0aWFsU3luY0NvbXBsZXRlIiwib24iLCJ1c2VySWQiLCJnZXRVc2VySWQiLCJkZXZpY2VJZCIsImdldERldmljZUlkIiwiZ2V0Um9vbXMiLCJmb3JFYWNoIiwicm9vbSIsImluZm9FdmVudCIsImZpbmRSb29tTGl2ZVZvaWNlQnJvYWRjYXN0RnJvbVVzZXJBbmREZXZpY2UiLCJzZW5kU3RvcFZvaWNlQnJvYWRjYXN0U3RhdGVFdmVudCIsInJvb21JZCIsImdldFJvb21JZCIsImNvbnRlbnQiLCJkZXZpY2VfaWQiLCJzdGF0ZSIsIlZvaWNlQnJvYWRjYXN0SW5mb1N0YXRlIiwiU3RvcHBlZCIsInJlZmVyZW5jZWRFdmVudElkIiwiZ2V0Q29udGVudCIsIlN0YXJ0ZWQiLCJnZXRJZCIsImV2ZW50X2lkIiwicmVsX3R5cGUiLCJSZWxhdGlvblR5cGUiLCJSZWZlcmVuY2UiLCJzZW5kU3RhdGVFdmVudCIsIlZvaWNlQnJvYWRjYXN0SW5mb0V2ZW50VHlwZSIsImRlc3Ryb3kiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZvaWNlLWJyb2FkY2FzdC91dGlscy9Wb2ljZUJyb2FkY2FzdFJlc3VtZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgQ2xpZW50RXZlbnQsIE1hdHJpeENsaWVudCwgTWF0cml4RXZlbnQsIFJlbGF0aW9uVHlwZSwgUm9vbSwgU3luY1N0YXRlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBWb2ljZUJyb2FkY2FzdEluZm9FdmVudENvbnRlbnQsIFZvaWNlQnJvYWRjYXN0SW5mb0V2ZW50VHlwZSwgVm9pY2VCcm9hZGNhc3RJbmZvU3RhdGUgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IElEZXN0cm95YWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy9JRGVzdHJveWFibGVcIjtcbmltcG9ydCB7IGZpbmRSb29tTGl2ZVZvaWNlQnJvYWRjYXN0RnJvbVVzZXJBbmREZXZpY2UgfSBmcm9tIFwiLi9maW5kUm9vbUxpdmVWb2ljZUJyb2FkY2FzdEZyb21Vc2VyQW5kRGV2aWNlXCI7XG5cbi8qKlxuICogSGFuZGxlcyB2b2ljZSBicm9hZGNhc3RzIG9uIGFwcCByZXN1bWUgKGFmdGVyIGxvZ2dpbmcgaW4sIHJlbG9hZCwgY3Jhc2jigKYpLlxuICovXG5leHBvcnQgY2xhc3MgVm9pY2VCcm9hZGNhc3RSZXN1bWVyIGltcGxlbWVudHMgSURlc3Ryb3lhYmxlIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBjbGllbnQ6IE1hdHJpeENsaWVudCkge1xuICAgICAgICBpZiAoY2xpZW50LmlzSW5pdGlhbFN5bmNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VtZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gd2FpdCBmb3IgaW5pdGlhbCBzeW5jXG4gICAgICAgICAgICBjbGllbnQub24oQ2xpZW50RXZlbnQuU3luYywgdGhpcy5vbkNsaWVudFN5bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNsaWVudFN5bmMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNsaWVudC5nZXRTeW5jU3RhdGUoKSA9PT0gU3luY1N0YXRlLlN5bmNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpZW50Lm9mZihDbGllbnRFdmVudC5TeW5jLCB0aGlzLm9uQ2xpZW50U3luYyk7XG4gICAgICAgICAgICB0aGlzLnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVzdW1lKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB1c2VySWQgPSB0aGlzLmNsaWVudC5nZXRVc2VySWQoKTtcbiAgICAgICAgY29uc3QgZGV2aWNlSWQgPSB0aGlzLmNsaWVudC5nZXREZXZpY2VJZCgpO1xuXG4gICAgICAgIGlmICghdXNlcklkIHx8ICFkZXZpY2VJZCkge1xuICAgICAgICAgICAgLy8gUmVzdW1pbmcgYSB2b2ljZSBicm9hZGNhc3Qgb25seSBtYWtlcyBzZW5zZSBpZiB0aGVyZSBpcyBhIHVzZXIuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsaWVudC5nZXRSb29tcygpLmZvckVhY2goKHJvb206IFJvb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZm9FdmVudCA9IGZpbmRSb29tTGl2ZVZvaWNlQnJvYWRjYXN0RnJvbVVzZXJBbmREZXZpY2Uocm9vbSwgdXNlcklkLCBkZXZpY2VJZCk7XG5cbiAgICAgICAgICAgIGlmIChpbmZvRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIGxpdmUgYnJvYWRjYXN0IGV2ZW50IGZyb20gY3VycmVudCBkZXZpY2U7IHN0b3AgaXQuXG4gICAgICAgICAgICAgICAgLy8gU3RvcHBpbmcgaXQgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gKHNlZSBQU0YtMTY2OSkuXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kU3RvcFZvaWNlQnJvYWRjYXN0U3RhdGVFdmVudChpbmZvRXZlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZW5kU3RvcFZvaWNlQnJvYWRjYXN0U3RhdGVFdmVudChpbmZvRXZlbnQ6IE1hdHJpeEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMuY2xpZW50LmdldFVzZXJJZCgpO1xuICAgICAgICBjb25zdCBkZXZpY2VJZCA9IHRoaXMuY2xpZW50LmdldERldmljZUlkKCk7XG4gICAgICAgIGNvbnN0IHJvb21JZCA9IGluZm9FdmVudC5nZXRSb29tSWQoKTtcblxuICAgICAgICBpZiAoIXVzZXJJZCB8fCAhZGV2aWNlSWQgfHwgIXJvb21JZCkge1xuICAgICAgICAgICAgLy8gV2UgY2FuIG9ubHkgc2VuZCBhIHN0YXRlIGV2ZW50IGlmIHdlIGtub3cgYWxsIHRoZSBJRHMuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZW50OiBWb2ljZUJyb2FkY2FzdEluZm9FdmVudENvbnRlbnQgPSB7XG4gICAgICAgICAgICBkZXZpY2VfaWQ6IGRldmljZUlkLFxuICAgICAgICAgICAgc3RhdGU6IFZvaWNlQnJvYWRjYXN0SW5mb1N0YXRlLlN0b3BwZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYWxsIGV2ZW50cyBzaG91bGQgcmVmZXJlbmNlIHRoZSBzdGFydGVkIGV2ZW50XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZWRFdmVudElkID1cbiAgICAgICAgICAgIGluZm9FdmVudC5nZXRDb250ZW50KCk/LnN0YXRlID09PSBWb2ljZUJyb2FkY2FzdEluZm9TdGF0ZS5TdGFydGVkXG4gICAgICAgICAgICAgICAgPyBpbmZvRXZlbnQuZ2V0SWQoKVxuICAgICAgICAgICAgICAgIDogaW5mb0V2ZW50LmdldENvbnRlbnQoKT8uW1wibS5yZWxhdGVzX3RvXCJdPy5ldmVudF9pZDtcblxuICAgICAgICBpZiAocmVmZXJlbmNlZEV2ZW50SWQpIHtcbiAgICAgICAgICAgIGNvbnRlbnRbXCJtLnJlbGF0ZXNfdG9cIl0gPSB7XG4gICAgICAgICAgICAgICAgcmVsX3R5cGU6IFJlbGF0aW9uVHlwZS5SZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IHJlZmVyZW5jZWRFdmVudElkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpZW50LnNlbmRTdGF0ZUV2ZW50KHJvb21JZCwgVm9pY2VCcm9hZGNhc3RJbmZvRXZlbnRUeXBlLCBjb250ZW50LCB1c2VySWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsaWVudC5vZmYoQ2xpZW50RXZlbnQuU3luYywgdGhpcy5vbkNsaWVudFN5bmMpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFRQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxDQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSw0Q0FBQSxHQUFBRixPQUFBO0FBWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBUUE7QUFDQTtBQUNBO0FBQ08sTUFBTUcscUJBQXFCLENBQXlCO0VBQ2hEQyxXQUFXQSxDQUFTQyxNQUFvQixFQUFFO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSx3QkFTMUIsTUFBWTtNQUMvQixJQUFJLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxZQUFZLENBQUMsQ0FBQyxLQUFLQyxpQkFBUyxDQUFDQyxPQUFPLEVBQUU7UUFDbEQsSUFBSSxDQUFDTCxNQUFNLENBQUNNLEdBQUcsQ0FBQ0MsbUJBQVcsQ0FBQ0MsSUFBSSxFQUFFLElBQUksQ0FBQ0MsWUFBWSxDQUFDO1FBQ3BELElBQUksQ0FBQ0MsTUFBTSxDQUFDLENBQUM7TUFDakI7SUFDSixDQUFDO0lBQUEsS0FkMEJWLE1BQW9CLEdBQXBCQSxNQUFvQjtJQUMzQyxJQUFJQSxNQUFNLENBQUNXLHFCQUFxQixDQUFDLENBQUMsRUFBRTtNQUNoQyxJQUFJLENBQUNELE1BQU0sQ0FBQyxDQUFDO0lBQ2pCLENBQUMsTUFBTTtNQUNIO01BQ0FWLE1BQU0sQ0FBQ1ksRUFBRSxDQUFDTCxtQkFBVyxDQUFDQyxJQUFJLEVBQUUsSUFBSSxDQUFDQyxZQUFZLENBQUM7SUFDbEQ7RUFDSjtFQVNRQyxNQUFNQSxDQUFBLEVBQVM7SUFDbkIsTUFBTUcsTUFBTSxHQUFHLElBQUksQ0FBQ2IsTUFBTSxDQUFDYyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNQyxRQUFRLEdBQUcsSUFBSSxDQUFDZixNQUFNLENBQUNnQixXQUFXLENBQUMsQ0FBQztJQUUxQyxJQUFJLENBQUNILE1BQU0sSUFBSSxDQUFDRSxRQUFRLEVBQUU7TUFDdEI7TUFDQTtJQUNKO0lBRUEsSUFBSSxDQUFDZixNQUFNLENBQUNpQixRQUFRLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUVDLElBQVUsSUFBSztNQUMzQyxNQUFNQyxTQUFTLEdBQUcsSUFBQUMsd0ZBQTJDLEVBQUNGLElBQUksRUFBRU4sTUFBTSxFQUFFRSxRQUFRLENBQUM7TUFFckYsSUFBSUssU0FBUyxFQUFFO1FBQ1g7UUFDQTtRQUNBLElBQUksQ0FBQ0UsZ0NBQWdDLENBQUNGLFNBQVMsQ0FBQztRQUNoRCxPQUFPLEtBQUs7TUFDaEI7SUFDSixDQUFDLENBQUM7RUFDTjtFQUVRRSxnQ0FBZ0NBLENBQUNGLFNBQXNCLEVBQVE7SUFDbkUsTUFBTVAsTUFBTSxHQUFHLElBQUksQ0FBQ2IsTUFBTSxDQUFDYyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNQyxRQUFRLEdBQUcsSUFBSSxDQUFDZixNQUFNLENBQUNnQixXQUFXLENBQUMsQ0FBQztJQUMxQyxNQUFNTyxNQUFNLEdBQUdILFNBQVMsQ0FBQ0ksU0FBUyxDQUFDLENBQUM7SUFFcEMsSUFBSSxDQUFDWCxNQUFNLElBQUksQ0FBQ0UsUUFBUSxJQUFJLENBQUNRLE1BQU0sRUFBRTtNQUNqQztNQUNBO0lBQ0o7SUFFQSxNQUFNRSxPQUF1QyxHQUFHO01BQzVDQyxTQUFTLEVBQUVYLFFBQVE7TUFDbkJZLEtBQUssRUFBRUMseUJBQXVCLENBQUNDO0lBQ25DLENBQUM7O0lBRUQ7SUFDQSxNQUFNQyxpQkFBaUIsR0FDbkJWLFNBQVMsQ0FBQ1csVUFBVSxDQUFDLENBQUMsRUFBRUosS0FBSyxLQUFLQyx5QkFBdUIsQ0FBQ0ksT0FBTyxHQUMzRFosU0FBUyxDQUFDYSxLQUFLLENBQUMsQ0FBQyxHQUNqQmIsU0FBUyxDQUFDVyxVQUFVLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFRyxRQUFRO0lBRTVELElBQUlKLGlCQUFpQixFQUFFO01BQ25CTCxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUc7UUFDdEJVLFFBQVEsRUFBRUMsb0JBQVksQ0FBQ0MsU0FBUztRQUNoQ0gsUUFBUSxFQUFFSjtNQUNkLENBQUM7SUFDTDtJQUVBLElBQUksQ0FBQzlCLE1BQU0sQ0FBQ3NDLGNBQWMsQ0FBQ2YsTUFBTSxFQUFFZ0IsNkJBQTJCLEVBQUVkLE9BQU8sRUFBRVosTUFBTSxDQUFDO0VBQ3BGO0VBRU8yQixPQUFPQSxDQUFBLEVBQVM7SUFDbkIsSUFBSSxDQUFDeEMsTUFBTSxDQUFDTSxHQUFHLENBQUNDLG1CQUFXLENBQUNDLElBQUksRUFBRSxJQUFJLENBQUNDLFlBQVksQ0FBQztFQUN4RDtBQUNKO0FBQUNnQyxPQUFBLENBQUEzQyxxQkFBQSxHQUFBQSxxQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==