matrix-react-sdk
Version:
SDK for matrix.org using React
115 lines (92 loc) • 12.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = _interopRequireDefault(require("react"));
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _Playback = require("../../../voice/Playback");
var _MFileBody = _interopRequireDefault(require("./MFileBody"));
var _InlineSpinner = _interopRequireDefault(require("../elements/InlineSpinner"));
var _languageHandler = require("../../../languageHandler");
var _Media = require("../../../customisations/Media");
var _DecryptFile = require("../../../utils/DecryptFile");
var _RecordingPlayback = _interopRequireDefault(require("../voice_messages/RecordingPlayback"));
var _dec, _class;
let MVoiceMessageBody = (_dec = (0, _replaceableComponent.replaceableComponent)("views.messages.MVoiceMessageBody"), _dec(_class = class MVoiceMessageBody extends _react.default.PureComponent
/*:: <IProps, IState>*/
{
constructor(props
/*: IProps*/
) {
super(props);
this.state = {};
}
async componentDidMount() {
let buffer
/*: ArrayBuffer*/
;
const content = this.props.mxEvent.getContent();
const media = (0, _Media.mediaFromContent)(content);
if (media.isEncrypted) {
try {
const blob = await (0, _DecryptFile.decryptFile)(content.file);
buffer = await blob.arrayBuffer();
this.setState({
decryptedBlob: blob
});
} catch (e) {
this.setState({
error: e
});
console.warn("Unable to decrypt voice message", e);
return; // stop processing the audio file
}
} else {
try {
buffer = await media.downloadSource().then(r => r.blob()).then(r => r.arrayBuffer());
} catch (e) {
this.setState({
error: e
});
console.warn("Unable to download voice message", e);
return; // stop processing the audio file
}
}
const waveform = content?.["org.matrix.msc1767.audio"]?.waveform?.map(p => p / 1024); // We should have a buffer to work with now: let's set it up
const playback = new _Playback.Playback(buffer, waveform);
this.setState({
playback
}); // Note: the RecordingPlayback component will handle preparing the Playback class for us.
}
render() {
if (this.state.error) {
// TODO: @@TR: Verify error state
return /*#__PURE__*/_react.default.createElement("span", {
className: "mx_MVoiceMessageBody"
}, /*#__PURE__*/_react.default.createElement("img", {
src: require("../../../../res/img/warning.svg"),
width: "16",
height: "16"
}), (0, _languageHandler._t)("Error processing voice message"));
}
if (!this.state.playback) {
// TODO: @@TR: Verify loading/decrypting state
return /*#__PURE__*/_react.default.createElement("span", {
className: "mx_MVoiceMessageBody"
}, /*#__PURE__*/_react.default.createElement(_InlineSpinner.default, null));
} // At this point we should have a playable state
return /*#__PURE__*/_react.default.createElement("span", {
className: "mx_MVoiceMessageBody"
}, /*#__PURE__*/_react.default.createElement(_RecordingPlayback.default, {
playback: this.state.playback
}), /*#__PURE__*/_react.default.createElement(_MFileBody.default, (0, _extends2.default)({}, this.props, {
decryptedBlob: this.state.decryptedBlob,
showGenericPlaceholder: false
})));
}
}) || _class);
exports.default = MVoiceMessageBody;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL21lc3NhZ2VzL01Wb2ljZU1lc3NhZ2VCb2R5LnRzeCJdLCJuYW1lcyI6WyJNVm9pY2VNZXNzYWdlQm9keSIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsImNvbXBvbmVudERpZE1vdW50IiwiYnVmZmVyIiwiY29udGVudCIsIm14RXZlbnQiLCJnZXRDb250ZW50IiwibWVkaWEiLCJpc0VuY3J5cHRlZCIsImJsb2IiLCJmaWxlIiwiYXJyYXlCdWZmZXIiLCJzZXRTdGF0ZSIsImRlY3J5cHRlZEJsb2IiLCJlIiwiZXJyb3IiLCJjb25zb2xlIiwid2FybiIsImRvd25sb2FkU291cmNlIiwidGhlbiIsInIiLCJ3YXZlZm9ybSIsIm1hcCIsInAiLCJwbGF5YmFjayIsIlBsYXliYWNrIiwicmVuZGVyIiwicmVxdWlyZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFnQkE7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7SUFhcUJBLGlCLFdBRHBCLGdEQUFxQixrQ0FBckIsQyxnQkFBRCxNQUNxQkEsaUJBRHJCLFNBQytDQyxlQUFNQztBQURyRDtBQUNtRjtBQUMvRUMsRUFBQUEsV0FBVyxDQUFDQztBQUFEO0FBQUEsSUFBZ0I7QUFDdkIsVUFBTUEsS0FBTjtBQUVBLFNBQUtDLEtBQUwsR0FBYSxFQUFiO0FBQ0g7O0FBRUQsUUFBYUMsaUJBQWIsR0FBaUM7QUFDN0IsUUFBSUM7QUFBbUI7QUFBdkI7QUFDQSxVQUFNQyxPQUFPLEdBQUcsS0FBS0osS0FBTCxDQUFXSyxPQUFYLENBQW1CQyxVQUFuQixFQUFoQjtBQUNBLFVBQU1DLEtBQUssR0FBRyw2QkFBaUJILE9BQWpCLENBQWQ7O0FBQ0EsUUFBSUcsS0FBSyxDQUFDQyxXQUFWLEVBQXVCO0FBQ25CLFVBQUk7QUFDQSxjQUFNQyxJQUFJLEdBQUcsTUFBTSw4QkFBWUwsT0FBTyxDQUFDTSxJQUFwQixDQUFuQjtBQUNBUCxRQUFBQSxNQUFNLEdBQUcsTUFBTU0sSUFBSSxDQUFDRSxXQUFMLEVBQWY7QUFDQSxhQUFLQyxRQUFMLENBQWM7QUFBQ0MsVUFBQUEsYUFBYSxFQUFFSjtBQUFoQixTQUFkO0FBQ0gsT0FKRCxDQUlFLE9BQU9LLENBQVAsRUFBVTtBQUNSLGFBQUtGLFFBQUwsQ0FBYztBQUFDRyxVQUFBQSxLQUFLLEVBQUVEO0FBQVIsU0FBZDtBQUNBRSxRQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYSxpQ0FBYixFQUFnREgsQ0FBaEQ7QUFDQSxlQUhRLENBR0E7QUFDWDtBQUNKLEtBVkQsTUFVTztBQUNILFVBQUk7QUFDQVgsUUFBQUEsTUFBTSxHQUFHLE1BQU1JLEtBQUssQ0FBQ1csY0FBTixHQUF1QkMsSUFBdkIsQ0FBNEJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDWCxJQUFGLEVBQWpDLEVBQTJDVSxJQUEzQyxDQUFnREMsQ0FBQyxJQUFJQSxDQUFDLENBQUNULFdBQUYsRUFBckQsQ0FBZjtBQUNILE9BRkQsQ0FFRSxPQUFPRyxDQUFQLEVBQVU7QUFDUixhQUFLRixRQUFMLENBQWM7QUFBQ0csVUFBQUEsS0FBSyxFQUFFRDtBQUFSLFNBQWQ7QUFDQUUsUUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsa0NBQWIsRUFBaURILENBQWpEO0FBQ0EsZUFIUSxDQUdBO0FBQ1g7QUFDSjs7QUFFRCxVQUFNTyxRQUFRLEdBQUdqQixPQUFPLEdBQUcsMEJBQUgsQ0FBUCxFQUF1Q2lCLFFBQXZDLEVBQWlEQyxHQUFqRCxDQUFxREMsQ0FBQyxJQUFJQSxDQUFDLEdBQUcsSUFBOUQsQ0FBakIsQ0F4QjZCLENBMEI3Qjs7QUFDQSxVQUFNQyxRQUFRLEdBQUcsSUFBSUMsa0JBQUosQ0FBYXRCLE1BQWIsRUFBcUJrQixRQUFyQixDQUFqQjtBQUNBLFNBQUtULFFBQUwsQ0FBYztBQUFDWSxNQUFBQTtBQUFELEtBQWQsRUE1QjZCLENBNkI3QjtBQUNIOztBQUVNRSxFQUFBQSxNQUFQLEdBQWdCO0FBQ1osUUFBSSxLQUFLekIsS0FBTCxDQUFXYyxLQUFmLEVBQXNCO0FBQ2xCO0FBQ0EsMEJBQ0k7QUFBTSxRQUFBLFNBQVMsRUFBQztBQUFoQixzQkFDSTtBQUFLLFFBQUEsR0FBRyxFQUFFWSxPQUFPLENBQUMsaUNBQUQsQ0FBakI7QUFBc0QsUUFBQSxLQUFLLEVBQUMsSUFBNUQ7QUFBaUUsUUFBQSxNQUFNLEVBQUM7QUFBeEUsUUFESixFQUVNLHlCQUFHLGdDQUFILENBRk4sQ0FESjtBQU1IOztBQUVELFFBQUksQ0FBQyxLQUFLMUIsS0FBTCxDQUFXdUIsUUFBaEIsRUFBMEI7QUFDdEI7QUFDQSwwQkFDSTtBQUFNLFFBQUEsU0FBUyxFQUFDO0FBQWhCLHNCQUNJLDZCQUFDLHNCQUFELE9BREosQ0FESjtBQUtILEtBbEJXLENBb0JaOzs7QUFDQSx3QkFDSTtBQUFNLE1BQUEsU0FBUyxFQUFDO0FBQWhCLG9CQUNJLDZCQUFDLDBCQUFEO0FBQW1CLE1BQUEsUUFBUSxFQUFFLEtBQUt2QixLQUFMLENBQVd1QjtBQUF4QyxNQURKLGVBRUksNkJBQUMsa0JBQUQsNkJBQWUsS0FBS3hCLEtBQXBCO0FBQTJCLE1BQUEsYUFBYSxFQUFFLEtBQUtDLEtBQUwsQ0FBV1ksYUFBckQ7QUFBb0UsTUFBQSxzQkFBc0IsRUFBRTtBQUE1RixPQUZKLENBREo7QUFNSDs7QUFsRThFLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge01hdHJpeEV2ZW50fSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbW9kZWxzL2V2ZW50XCI7XG5pbXBvcnQge3JlcGxhY2VhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcbmltcG9ydCB7UGxheWJhY2t9IGZyb20gXCIuLi8uLi8uLi92b2ljZS9QbGF5YmFja1wiO1xuaW1wb3J0IE1GaWxlQm9keSBmcm9tIFwiLi9NRmlsZUJvZHlcIjtcbmltcG9ydCBJbmxpbmVTcGlubmVyIGZyb20gJy4uL2VsZW1lbnRzL0lubGluZVNwaW5uZXInO1xuaW1wb3J0IHtfdH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHttZWRpYUZyb21Db250ZW50fSBmcm9tIFwiLi4vLi4vLi4vY3VzdG9taXNhdGlvbnMvTWVkaWFcIjtcbmltcG9ydCB7ZGVjcnlwdEZpbGV9IGZyb20gXCIuLi8uLi8uLi91dGlscy9EZWNyeXB0RmlsZVwiO1xuaW1wb3J0IFJlY29yZGluZ1BsYXliYWNrIGZyb20gXCIuLi92b2ljZV9tZXNzYWdlcy9SZWNvcmRpbmdQbGF5YmFja1wiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBteEV2ZW50OiBNYXRyaXhFdmVudDtcbn1cblxuaW50ZXJmYWNlIElTdGF0ZSB7XG4gICAgZXJyb3I/OiBFcnJvcjtcbiAgICBwbGF5YmFjaz86IFBsYXliYWNrO1xuICAgIGRlY3J5cHRlZEJsb2I/OiBCbG9iO1xufVxuXG5AcmVwbGFjZWFibGVDb21wb25lbnQoXCJ2aWV3cy5tZXNzYWdlcy5NVm9pY2VNZXNzYWdlQm9keVwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTVZvaWNlTWVzc2FnZUJvZHkgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PElQcm9wcywgSVN0YXRlPiB7XG4gICAgY29uc3RydWN0b3IocHJvcHM6IElQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgbGV0IGJ1ZmZlcjogQXJyYXlCdWZmZXI7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnByb3BzLm14RXZlbnQuZ2V0Q29udGVudCgpO1xuICAgICAgICBjb25zdCBtZWRpYSA9IG1lZGlhRnJvbUNvbnRlbnQoY29udGVudCk7XG4gICAgICAgIGlmIChtZWRpYS5pc0VuY3J5cHRlZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgZGVjcnlwdEZpbGUoY29udGVudC5maWxlKTtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGVjcnlwdGVkQmxvYjogYmxvYn0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Vycm9yOiBlfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVW5hYmxlIHRvIGRlY3J5cHQgdm9pY2UgbWVzc2FnZVwiLCBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIHN0b3AgcHJvY2Vzc2luZyB0aGUgYXVkaW8gZmlsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBhd2FpdCBtZWRpYS5kb3dubG9hZFNvdXJjZSgpLnRoZW4ociA9PiByLmJsb2IoKSkudGhlbihyID0+IHIuYXJyYXlCdWZmZXIoKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZXJyb3I6IGV9KTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gZG93bmxvYWQgdm9pY2UgbWVzc2FnZVwiLCBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIHN0b3AgcHJvY2Vzc2luZyB0aGUgYXVkaW8gZmlsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2F2ZWZvcm0gPSBjb250ZW50Py5bXCJvcmcubWF0cml4Lm1zYzE3NjcuYXVkaW9cIl0/LndhdmVmb3JtPy5tYXAocCA9PiBwIC8gMTAyNCk7XG5cbiAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYSBidWZmZXIgdG8gd29yayB3aXRoIG5vdzogbGV0J3Mgc2V0IGl0IHVwXG4gICAgICAgIGNvbnN0IHBsYXliYWNrID0gbmV3IFBsYXliYWNrKGJ1ZmZlciwgd2F2ZWZvcm0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtwbGF5YmFja30pO1xuICAgICAgICAvLyBOb3RlOiB0aGUgUmVjb3JkaW5nUGxheWJhY2sgY29tcG9uZW50IHdpbGwgaGFuZGxlIHByZXBhcmluZyB0aGUgUGxheWJhY2sgY2xhc3MgZm9yIHVzLlxuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBAQFRSOiBWZXJpZnkgZXJyb3Igc3RhdGVcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfTVZvaWNlTWVzc2FnZUJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e3JlcXVpcmUoXCIuLi8uLi8uLi8uLi9yZXMvaW1nL3dhcm5pbmcuc3ZnXCIpfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7IF90KFwiRXJyb3IgcHJvY2Vzc2luZyB2b2ljZSBtZXNzYWdlXCIpIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnBsYXliYWNrKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBAQFRSOiBWZXJpZnkgbG9hZGluZy9kZWNyeXB0aW5nIHN0YXRlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14X01Wb2ljZU1lc3NhZ2VCb2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxJbmxpbmVTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugc2hvdWxkIGhhdmUgYSBwbGF5YWJsZSBzdGF0ZVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfTVZvaWNlTWVzc2FnZUJvZHlcIj5cbiAgICAgICAgICAgICAgICA8UmVjb3JkaW5nUGxheWJhY2sgcGxheWJhY2s9e3RoaXMuc3RhdGUucGxheWJhY2t9IC8+XG4gICAgICAgICAgICAgICAgPE1GaWxlQm9keSB7Li4udGhpcy5wcm9wc30gZGVjcnlwdGVkQmxvYj17dGhpcy5zdGF0ZS5kZWNyeXB0ZWRCbG9ifSBzaG93R2VuZXJpY1BsYWNlaG9sZGVyPXtmYWxzZX0gLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKVxuICAgIH1cbn1cbiJdfQ==