matrix-react-sdk
Version:
SDK for matrix.org using React
71 lines (65 loc) • 10 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.startNewVoiceBroadcastRecording = void 0;
var _matrix = require("matrix-js-sdk/src/matrix");
var _utils = require("matrix-js-sdk/src/utils");
var _ = require("..");
var _checkVoiceBroadcastPreConditions = require("./checkVoiceBroadcastPreConditions");
/*
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.
*/
const startBroadcast = async (room, client, recordingsStore) => {
const {
promise,
resolve,
reject
} = (0, _utils.defer)();
const userId = client.getUserId();
if (!userId) {
reject("unable to start voice broadcast if current user is unknown");
return promise;
}
let result = null;
const onRoomStateEvents = () => {
if (!result) return;
const voiceBroadcastEvent = room.currentState.getStateEvents(_.VoiceBroadcastInfoEventType, userId);
if (voiceBroadcastEvent?.getId() === result.event_id) {
room.off(_matrix.RoomStateEvent.Events, onRoomStateEvents);
const recording = new _.VoiceBroadcastRecording(voiceBroadcastEvent, client);
recordingsStore.setCurrent(recording);
recording.start();
resolve(recording);
}
};
room.on(_matrix.RoomStateEvent.Events, onRoomStateEvents);
// XXX Michael W: refactor to live event
result = await client.sendStateEvent(room.roomId, _.VoiceBroadcastInfoEventType, {
device_id: client.getDeviceId(),
state: _.VoiceBroadcastInfoState.Started,
chunk_length: (0, _.getChunkLength)()
}, userId);
return promise;
};
/**
* Starts a new Voice Broadcast Recording, if
* - the user has the permissions to do so in the room
* - the user is not already recording a voice broadcast
* - there is no other broadcast being recorded in the room, yet
* Sends a voice_broadcast_info state event and waits for the event to actually appear in the room state.
*/
const startNewVoiceBroadcastRecording = async (room, client, playbacksStore, recordingsStore) => {
if (!(await (0, _checkVoiceBroadcastPreConditions.checkVoiceBroadcastPreConditions)(room, client, recordingsStore))) {
return null;
}
// pause and clear current playback (if any)
playbacksStore.getCurrent()?.pause();
playbacksStore.clearCurrent();
return startBroadcast(room, client, recordingsStore);
};
exports.startNewVoiceBroadcastRecording = startNewVoiceBroadcastRecording;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl91dGlscyIsIl8iLCJfY2hlY2tWb2ljZUJyb2FkY2FzdFByZUNvbmRpdGlvbnMiLCJzdGFydEJyb2FkY2FzdCIsInJvb20iLCJjbGllbnQiLCJyZWNvcmRpbmdzU3RvcmUiLCJwcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImRlZmVyIiwidXNlcklkIiwiZ2V0VXNlcklkIiwicmVzdWx0Iiwib25Sb29tU3RhdGVFdmVudHMiLCJ2b2ljZUJyb2FkY2FzdEV2ZW50IiwiY3VycmVudFN0YXRlIiwiZ2V0U3RhdGVFdmVudHMiLCJWb2ljZUJyb2FkY2FzdEluZm9FdmVudFR5cGUiLCJnZXRJZCIsImV2ZW50X2lkIiwib2ZmIiwiUm9vbVN0YXRlRXZlbnQiLCJFdmVudHMiLCJyZWNvcmRpbmciLCJWb2ljZUJyb2FkY2FzdFJlY29yZGluZyIsInNldEN1cnJlbnQiLCJzdGFydCIsIm9uIiwic2VuZFN0YXRlRXZlbnQiLCJyb29tSWQiLCJkZXZpY2VfaWQiLCJnZXREZXZpY2VJZCIsInN0YXRlIiwiVm9pY2VCcm9hZGNhc3RJbmZvU3RhdGUiLCJTdGFydGVkIiwiY2h1bmtfbGVuZ3RoIiwiZ2V0Q2h1bmtMZW5ndGgiLCJzdGFydE5ld1ZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nIiwicGxheWJhY2tzU3RvcmUiLCJjaGVja1ZvaWNlQnJvYWRjYXN0UHJlQ29uZGl0aW9ucyIsImdldEN1cnJlbnQiLCJwYXVzZSIsImNsZWFyQ3VycmVudCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdm9pY2UtYnJvYWRjYXN0L3V0aWxzL3N0YXJ0TmV3Vm9pY2VCcm9hZGNhc3RSZWNvcmRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgSVNlbmRFdmVudFJlc3BvbnNlLCBNYXRyaXhDbGllbnQsIFJvb20sIFJvb21TdGF0ZUV2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgZGVmZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvdXRpbHNcIjtcblxuaW1wb3J0IHtcbiAgICBWb2ljZUJyb2FkY2FzdEluZm9FdmVudENvbnRlbnQsXG4gICAgVm9pY2VCcm9hZGNhc3RJbmZvRXZlbnRUeXBlLFxuICAgIFZvaWNlQnJvYWRjYXN0SW5mb1N0YXRlLFxuICAgIFZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nc1N0b3JlLFxuICAgIFZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nLFxuICAgIGdldENodW5rTGVuZ3RoLFxuICAgIFZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmUsXG59IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgY2hlY2tWb2ljZUJyb2FkY2FzdFByZUNvbmRpdGlvbnMgfSBmcm9tIFwiLi9jaGVja1ZvaWNlQnJvYWRjYXN0UHJlQ29uZGl0aW9uc1wiO1xuXG5jb25zdCBzdGFydEJyb2FkY2FzdCA9IGFzeW5jIChcbiAgICByb29tOiBSb29tLFxuICAgIGNsaWVudDogTWF0cml4Q2xpZW50LFxuICAgIHJlY29yZGluZ3NTdG9yZTogVm9pY2VCcm9hZGNhc3RSZWNvcmRpbmdzU3RvcmUsXG4pOiBQcm9taXNlPFZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nPiA9PiB7XG4gICAgY29uc3QgeyBwcm9taXNlLCByZXNvbHZlLCByZWplY3QgfSA9IGRlZmVyPFZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nPigpO1xuXG4gICAgY29uc3QgdXNlcklkID0gY2xpZW50LmdldFVzZXJJZCgpO1xuXG4gICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgcmVqZWN0KFwidW5hYmxlIHRvIHN0YXJ0IHZvaWNlIGJyb2FkY2FzdCBpZiBjdXJyZW50IHVzZXIgaXMgdW5rbm93blwiKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogSVNlbmRFdmVudFJlc3BvbnNlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCBvblJvb21TdGF0ZUV2ZW50cyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB2b2ljZUJyb2FkY2FzdEV2ZW50ID0gcm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoVm9pY2VCcm9hZGNhc3RJbmZvRXZlbnRUeXBlLCB1c2VySWQpO1xuXG4gICAgICAgIGlmICh2b2ljZUJyb2FkY2FzdEV2ZW50Py5nZXRJZCgpID09PSByZXN1bHQuZXZlbnRfaWQpIHtcbiAgICAgICAgICAgIHJvb20ub2ZmKFJvb21TdGF0ZUV2ZW50LkV2ZW50cywgb25Sb29tU3RhdGVFdmVudHMpO1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkaW5nID0gbmV3IFZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nKHZvaWNlQnJvYWRjYXN0RXZlbnQsIGNsaWVudCk7XG4gICAgICAgICAgICByZWNvcmRpbmdzU3RvcmUuc2V0Q3VycmVudChyZWNvcmRpbmcpO1xuICAgICAgICAgICAgcmVjb3JkaW5nLnN0YXJ0KCk7XG4gICAgICAgICAgICByZXNvbHZlKHJlY29yZGluZyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcm9vbS5vbihSb29tU3RhdGVFdmVudC5FdmVudHMsIG9uUm9vbVN0YXRlRXZlbnRzKTtcblxuICAgIC8vIFhYWCBNaWNoYWVsIFc6IHJlZmFjdG9yIHRvIGxpdmUgZXZlbnRcbiAgICByZXN1bHQgPSBhd2FpdCBjbGllbnQuc2VuZFN0YXRlRXZlbnQoXG4gICAgICAgIHJvb20ucm9vbUlkLFxuICAgICAgICBWb2ljZUJyb2FkY2FzdEluZm9FdmVudFR5cGUsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRldmljZV9pZDogY2xpZW50LmdldERldmljZUlkKCksXG4gICAgICAgICAgICBzdGF0ZTogVm9pY2VCcm9hZGNhc3RJbmZvU3RhdGUuU3RhcnRlZCxcbiAgICAgICAgICAgIGNodW5rX2xlbmd0aDogZ2V0Q2h1bmtMZW5ndGgoKSxcbiAgICAgICAgfSBhcyBWb2ljZUJyb2FkY2FzdEluZm9FdmVudENvbnRlbnQsXG4gICAgICAgIHVzZXJJZCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG59O1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBWb2ljZSBCcm9hZGNhc3QgUmVjb3JkaW5nLCBpZlxuICogLSB0aGUgdXNlciBoYXMgdGhlIHBlcm1pc3Npb25zIHRvIGRvIHNvIGluIHRoZSByb29tXG4gKiAtIHRoZSB1c2VyIGlzIG5vdCBhbHJlYWR5IHJlY29yZGluZyBhIHZvaWNlIGJyb2FkY2FzdFxuICogLSB0aGVyZSBpcyBubyBvdGhlciBicm9hZGNhc3QgYmVpbmcgcmVjb3JkZWQgaW4gdGhlIHJvb20sIHlldFxuICogU2VuZHMgYSB2b2ljZV9icm9hZGNhc3RfaW5mbyBzdGF0ZSBldmVudCBhbmQgd2FpdHMgZm9yIHRoZSBldmVudCB0byBhY3R1YWxseSBhcHBlYXIgaW4gdGhlIHJvb20gc3RhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFydE5ld1ZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nID0gYXN5bmMgKFxuICAgIHJvb206IFJvb20sXG4gICAgY2xpZW50OiBNYXRyaXhDbGllbnQsXG4gICAgcGxheWJhY2tzU3RvcmU6IFZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmUsXG4gICAgcmVjb3JkaW5nc1N0b3JlOiBWb2ljZUJyb2FkY2FzdFJlY29yZGluZ3NTdG9yZSxcbik6IFByb21pc2U8Vm9pY2VCcm9hZGNhc3RSZWNvcmRpbmcgfCBudWxsPiA9PiB7XG4gICAgaWYgKCEoYXdhaXQgY2hlY2tWb2ljZUJyb2FkY2FzdFByZUNvbmRpdGlvbnMocm9vbSwgY2xpZW50LCByZWNvcmRpbmdzU3RvcmUpKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBwYXVzZSBhbmQgY2xlYXIgY3VycmVudCBwbGF5YmFjayAoaWYgYW55KVxuICAgIHBsYXliYWNrc1N0b3JlLmdldEN1cnJlbnQoKT8ucGF1c2UoKTtcbiAgICBwbGF5YmFja3NTdG9yZS5jbGVhckN1cnJlbnQoKTtcblxuICAgIHJldHVybiBzdGFydEJyb2FkY2FzdChyb29tLCBjbGllbnQsIHJlY29yZGluZ3NTdG9yZSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxDQUFBLEdBQUFGLE9BQUE7QUFTQSxJQUFBRyxpQ0FBQSxHQUFBSCxPQUFBO0FBcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWdCQSxNQUFNSSxjQUFjLEdBQUcsTUFBQUEsQ0FDbkJDLElBQVUsRUFDVkMsTUFBb0IsRUFDcEJDLGVBQThDLEtBQ1g7RUFDbkMsTUFBTTtJQUFFQyxPQUFPO0lBQUVDLE9BQU87SUFBRUM7RUFBTyxDQUFDLEdBQUcsSUFBQUMsWUFBSyxFQUEwQixDQUFDO0VBRXJFLE1BQU1DLE1BQU0sR0FBR04sTUFBTSxDQUFDTyxTQUFTLENBQUMsQ0FBQztFQUVqQyxJQUFJLENBQUNELE1BQU0sRUFBRTtJQUNURixNQUFNLENBQUMsNERBQTRELENBQUM7SUFDcEUsT0FBT0YsT0FBTztFQUNsQjtFQUVBLElBQUlNLE1BQWlDLEdBQUcsSUFBSTtFQUU1QyxNQUFNQyxpQkFBaUIsR0FBR0EsQ0FBQSxLQUFZO0lBQ2xDLElBQUksQ0FBQ0QsTUFBTSxFQUFFO0lBRWIsTUFBTUUsbUJBQW1CLEdBQUdYLElBQUksQ0FBQ1ksWUFBWSxDQUFDQyxjQUFjLENBQUNDLDZCQUEyQixFQUFFUCxNQUFNLENBQUM7SUFFakcsSUFBSUksbUJBQW1CLEVBQUVJLEtBQUssQ0FBQyxDQUFDLEtBQUtOLE1BQU0sQ0FBQ08sUUFBUSxFQUFFO01BQ2xEaEIsSUFBSSxDQUFDaUIsR0FBRyxDQUFDQyxzQkFBYyxDQUFDQyxNQUFNLEVBQUVULGlCQUFpQixDQUFDO01BQ2xELE1BQU1VLFNBQVMsR0FBRyxJQUFJQyx5QkFBdUIsQ0FBQ1YsbUJBQW1CLEVBQUVWLE1BQU0sQ0FBQztNQUMxRUMsZUFBZSxDQUFDb0IsVUFBVSxDQUFDRixTQUFTLENBQUM7TUFDckNBLFNBQVMsQ0FBQ0csS0FBSyxDQUFDLENBQUM7TUFDakJuQixPQUFPLENBQUNnQixTQUFTLENBQUM7SUFDdEI7RUFDSixDQUFDO0VBRURwQixJQUFJLENBQUN3QixFQUFFLENBQUNOLHNCQUFjLENBQUNDLE1BQU0sRUFBRVQsaUJBQWlCLENBQUM7O0VBRWpEO0VBQ0FELE1BQU0sR0FBRyxNQUFNUixNQUFNLENBQUN3QixjQUFjLENBQ2hDekIsSUFBSSxDQUFDMEIsTUFBTSxFQUNYWiw2QkFBMkIsRUFDM0I7SUFDSWEsU0FBUyxFQUFFMUIsTUFBTSxDQUFDMkIsV0FBVyxDQUFDLENBQUM7SUFDL0JDLEtBQUssRUFBRUMseUJBQXVCLENBQUNDLE9BQU87SUFDdENDLFlBQVksRUFBRSxJQUFBQyxnQkFBYyxFQUFDO0VBQ2pDLENBQUMsRUFDRDFCLE1BQ0osQ0FBQztFQUVELE9BQU9KLE9BQU87QUFDbEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU0rQiwrQkFBK0IsR0FBRyxNQUFBQSxDQUMzQ2xDLElBQVUsRUFDVkMsTUFBb0IsRUFDcEJrQyxjQUE0QyxFQUM1Q2pDLGVBQThDLEtBQ0o7RUFDMUMsSUFBSSxFQUFFLE1BQU0sSUFBQWtDLGtFQUFnQyxFQUFDcEMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLGVBQWUsQ0FBQyxDQUFDLEVBQUU7SUFDMUUsT0FBTyxJQUFJO0VBQ2Y7O0VBRUE7RUFDQWlDLGNBQWMsQ0FBQ0UsVUFBVSxDQUFDLENBQUMsRUFBRUMsS0FBSyxDQUFDLENBQUM7RUFDcENILGNBQWMsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7RUFFN0IsT0FBT3hDLGNBQWMsQ0FBQ0MsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLGVBQWUsQ0FBQztBQUN4RCxDQUFDO0FBQUNzQyxPQUFBLENBQUFOLCtCQUFBLEdBQUFBLCtCQUFBIiwiaWdub3JlTGlzdCI6W119