matrix-react-sdk
Version:
SDK for matrix.org using React
90 lines (88 loc) • 12.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.VoiceBroadcastPlaybacksStoreEvent = exports.VoiceBroadcastPlaybacksStore = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _ = require("..");
/*
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.
*/
let VoiceBroadcastPlaybacksStoreEvent = exports.VoiceBroadcastPlaybacksStoreEvent = /*#__PURE__*/function (VoiceBroadcastPlaybacksStoreEvent) {
VoiceBroadcastPlaybacksStoreEvent["CurrentChanged"] = "current_changed";
return VoiceBroadcastPlaybacksStoreEvent;
}({});
/**
* This store manages VoiceBroadcastPlaybacks:
* - access the currently playing voice broadcast
* - ensures that only once broadcast is playing at a time
*/
class VoiceBroadcastPlaybacksStore extends _matrix.TypedEventEmitter {
constructor(recordings) {
super();
(0, _defineProperty2.default)(this, "current", null);
/** Playbacks indexed by their info event id. */
(0, _defineProperty2.default)(this, "playbacks", new Map());
(0, _defineProperty2.default)(this, "onPlaybackStateChanged", (state, playback) => {
switch (state) {
case _.VoiceBroadcastPlaybackState.Buffering:
case _.VoiceBroadcastPlaybackState.Playing:
this.pauseExcept(playback);
this.setCurrent(playback);
break;
case _.VoiceBroadcastPlaybackState.Stopped:
this.clearCurrent();
break;
}
});
this.recordings = recordings;
}
setCurrent(current) {
if (this.current === current) return;
this.current = current;
this.addPlayback(current);
this.emit(VoiceBroadcastPlaybacksStoreEvent.CurrentChanged, current);
}
clearCurrent() {
if (this.current === null) return;
this.current = null;
this.emit(VoiceBroadcastPlaybacksStoreEvent.CurrentChanged, null);
}
getCurrent() {
return this.current;
}
getByInfoEvent(infoEvent, client) {
const infoEventId = infoEvent.getId();
if (!this.playbacks.has(infoEventId)) {
this.addPlayback(new _.VoiceBroadcastPlayback(infoEvent, client, this.recordings));
}
return this.playbacks.get(infoEventId);
}
addPlayback(playback) {
const infoEventId = playback.infoEvent.getId();
if (this.playbacks.has(infoEventId)) return;
this.playbacks.set(infoEventId, playback);
playback.on(_.VoiceBroadcastPlaybackEvent.StateChanged, this.onPlaybackStateChanged);
}
pauseExcept(playbackNotToPause) {
for (const playback of this.playbacks.values()) {
if (playback !== playbackNotToPause) {
playback.pause();
}
}
}
destroy() {
this.removeAllListeners();
for (const playback of this.playbacks.values()) {
playback.off(_.VoiceBroadcastPlaybackEvent.StateChanged, this.onPlaybackStateChanged);
}
this.playbacks = new Map();
}
}
exports.VoiceBroadcastPlaybacksStore = VoiceBroadcastPlaybacksStore;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl8iLCJWb2ljZUJyb2FkY2FzdFBsYXliYWNrc1N0b3JlRXZlbnQiLCJleHBvcnRzIiwiVm9pY2VCcm9hZGNhc3RQbGF5YmFja3NTdG9yZSIsIlR5cGVkRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJyZWNvcmRpbmdzIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJNYXAiLCJzdGF0ZSIsInBsYXliYWNrIiwiVm9pY2VCcm9hZGNhc3RQbGF5YmFja1N0YXRlIiwiQnVmZmVyaW5nIiwiUGxheWluZyIsInBhdXNlRXhjZXB0Iiwic2V0Q3VycmVudCIsIlN0b3BwZWQiLCJjbGVhckN1cnJlbnQiLCJjdXJyZW50IiwiYWRkUGxheWJhY2siLCJlbWl0IiwiQ3VycmVudENoYW5nZWQiLCJnZXRDdXJyZW50IiwiZ2V0QnlJbmZvRXZlbnQiLCJpbmZvRXZlbnQiLCJjbGllbnQiLCJpbmZvRXZlbnRJZCIsImdldElkIiwicGxheWJhY2tzIiwiaGFzIiwiVm9pY2VCcm9hZGNhc3RQbGF5YmFjayIsImdldCIsInNldCIsIm9uIiwiVm9pY2VCcm9hZGNhc3RQbGF5YmFja0V2ZW50IiwiU3RhdGVDaGFuZ2VkIiwib25QbGF5YmFja1N0YXRlQ2hhbmdlZCIsInBsYXliYWNrTm90VG9QYXVzZSIsInZhbHVlcyIsInBhdXNlIiwiZGVzdHJveSIsInJlbW92ZUFsbExpc3RlbmVycyIsIm9mZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92b2ljZS1icm9hZGNhc3Qvc3RvcmVzL1ZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgTWF0cml4Q2xpZW50LCBNYXRyaXhFdmVudCwgVHlwZWRFdmVudEVtaXR0ZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7XG4gICAgVm9pY2VCcm9hZGNhc3RQbGF5YmFjayxcbiAgICBWb2ljZUJyb2FkY2FzdFBsYXliYWNrRXZlbnQsXG4gICAgVm9pY2VCcm9hZGNhc3RQbGF5YmFja1N0YXRlLFxuICAgIFZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nc1N0b3JlLFxufSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IElEZXN0cm95YWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy9JRGVzdHJveWFibGVcIjtcblxuZXhwb3J0IGVudW0gVm9pY2VCcm9hZGNhc3RQbGF5YmFja3NTdG9yZUV2ZW50IHtcbiAgICBDdXJyZW50Q2hhbmdlZCA9IFwiY3VycmVudF9jaGFuZ2VkXCIsXG59XG5cbmludGVyZmFjZSBFdmVudE1hcCB7XG4gICAgW1ZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmVFdmVudC5DdXJyZW50Q2hhbmdlZF06IChyZWNvcmRpbmc6IFZvaWNlQnJvYWRjYXN0UGxheWJhY2sgfCBudWxsKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoaXMgc3RvcmUgbWFuYWdlcyBWb2ljZUJyb2FkY2FzdFBsYXliYWNrczpcbiAqIC0gYWNjZXNzIHRoZSBjdXJyZW50bHkgcGxheWluZyB2b2ljZSBicm9hZGNhc3RcbiAqIC0gZW5zdXJlcyB0aGF0IG9ubHkgb25jZSBicm9hZGNhc3QgaXMgcGxheWluZyBhdCBhIHRpbWVcbiAqL1xuZXhwb3J0IGNsYXNzIFZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmVcbiAgICBleHRlbmRzIFR5cGVkRXZlbnRFbWl0dGVyPFZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmVFdmVudCwgRXZlbnRNYXA+XG4gICAgaW1wbGVtZW50cyBJRGVzdHJveWFibGVcbntcbiAgICBwcml2YXRlIGN1cnJlbnQ6IFZvaWNlQnJvYWRjYXN0UGxheWJhY2sgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBQbGF5YmFja3MgaW5kZXhlZCBieSB0aGVpciBpbmZvIGV2ZW50IGlkLiAqL1xuICAgIHByaXZhdGUgcGxheWJhY2tzID0gbmV3IE1hcDxzdHJpbmcsIFZvaWNlQnJvYWRjYXN0UGxheWJhY2s+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWNvcmRpbmdzOiBWb2ljZUJyb2FkY2FzdFJlY29yZGluZ3NTdG9yZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDdXJyZW50KGN1cnJlbnQ6IFZvaWNlQnJvYWRjYXN0UGxheWJhY2spOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudCA9PT0gY3VycmVudCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY3VycmVudCA9IGN1cnJlbnQ7XG4gICAgICAgIHRoaXMuYWRkUGxheWJhY2soY3VycmVudCk7XG4gICAgICAgIHRoaXMuZW1pdChWb2ljZUJyb2FkY2FzdFBsYXliYWNrc1N0b3JlRXZlbnQuQ3VycmVudENoYW5nZWQsIGN1cnJlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckN1cnJlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmVtaXQoVm9pY2VCcm9hZGNhc3RQbGF5YmFja3NTdG9yZUV2ZW50LkN1cnJlbnRDaGFuZ2VkLCBudWxsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudCgpOiBWb2ljZUJyb2FkY2FzdFBsYXliYWNrIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5SW5mb0V2ZW50KGluZm9FdmVudDogTWF0cml4RXZlbnQsIGNsaWVudDogTWF0cml4Q2xpZW50KTogVm9pY2VCcm9hZGNhc3RQbGF5YmFjayB7XG4gICAgICAgIGNvbnN0IGluZm9FdmVudElkID0gaW5mb0V2ZW50LmdldElkKCkhO1xuXG4gICAgICAgIGlmICghdGhpcy5wbGF5YmFja3MuaGFzKGluZm9FdmVudElkKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRQbGF5YmFjayhuZXcgVm9pY2VCcm9hZGNhc3RQbGF5YmFjayhpbmZvRXZlbnQsIGNsaWVudCwgdGhpcy5yZWNvcmRpbmdzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5YmFja3MuZ2V0KGluZm9FdmVudElkKSE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRQbGF5YmFjayhwbGF5YmFjazogVm9pY2VCcm9hZGNhc3RQbGF5YmFjayk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmZvRXZlbnRJZCA9IHBsYXliYWNrLmluZm9FdmVudC5nZXRJZCgpITtcblxuICAgICAgICBpZiAodGhpcy5wbGF5YmFja3MuaGFzKGluZm9FdmVudElkKSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucGxheWJhY2tzLnNldChpbmZvRXZlbnRJZCwgcGxheWJhY2spO1xuICAgICAgICBwbGF5YmFjay5vbihWb2ljZUJyb2FkY2FzdFBsYXliYWNrRXZlbnQuU3RhdGVDaGFuZ2VkLCB0aGlzLm9uUGxheWJhY2tTdGF0ZUNoYW5nZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25QbGF5YmFja1N0YXRlQ2hhbmdlZCA9IChzdGF0ZTogVm9pY2VCcm9hZGNhc3RQbGF5YmFja1N0YXRlLCBwbGF5YmFjazogVm9pY2VCcm9hZGNhc3RQbGF5YmFjayk6IHZvaWQgPT4ge1xuICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlIFZvaWNlQnJvYWRjYXN0UGxheWJhY2tTdGF0ZS5CdWZmZXJpbmc6XG4gICAgICAgICAgICBjYXNlIFZvaWNlQnJvYWRjYXN0UGxheWJhY2tTdGF0ZS5QbGF5aW5nOlxuICAgICAgICAgICAgICAgIHRoaXMucGF1c2VFeGNlcHQocGxheWJhY2spO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudChwbGF5YmFjayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZvaWNlQnJvYWRjYXN0UGxheWJhY2tTdGF0ZS5TdG9wcGVkOlxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJDdXJyZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBwYXVzZUV4Y2VwdChwbGF5YmFja05vdFRvUGF1c2U6IFZvaWNlQnJvYWRjYXN0UGxheWJhY2spOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwbGF5YmFjayBvZiB0aGlzLnBsYXliYWNrcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKHBsYXliYWNrICE9PSBwbGF5YmFja05vdFRvUGF1c2UpIHtcbiAgICAgICAgICAgICAgICBwbGF5YmFjay5wYXVzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwbGF5YmFjayBvZiB0aGlzLnBsYXliYWNrcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgcGxheWJhY2sub2ZmKFZvaWNlQnJvYWRjYXN0UGxheWJhY2tFdmVudC5TdGF0ZUNoYW5nZWQsIHRoaXMub25QbGF5YmFja1N0YXRlQ2hhbmdlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsYXliYWNrcyA9IG5ldyBNYXAoKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FB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