matrix-react-sdk
Version:
SDK for matrix.org using React
85 lines (78 loc) • 13.6 kB
JavaScript
;
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 _react = _interopRequireWildcard(require("react"));
var _logger = require("matrix-js-sdk/src/logger");
var _AsyncStore = require("../../../stores/AsyncStore");
var _languageHandler = require("../../../languageHandler");
var _KeyBindingsManager = require("../../../KeyBindingsManager");
var _KeyboardShortcuts = require("../../../accessibility/KeyboardShortcuts");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/*
Copyright 2024 New Vector Ltd.
Copyright 2021, 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.
*/
class AudioPlayerBase extends _react.default.PureComponent {
constructor(props) {
super(props);
// Playback instances can be reused in the composer
(0, _defineProperty2.default)(this, "seekRef", /*#__PURE__*/(0, _react.createRef)());
(0, _defineProperty2.default)(this, "playPauseRef", /*#__PURE__*/(0, _react.createRef)());
(0, _defineProperty2.default)(this, "onKeyDown", ev => {
let handled = true;
const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(ev);
switch (action) {
case _KeyboardShortcuts.KeyBindingAction.Space:
this.playPauseRef.current?.toggleState();
break;
case _KeyboardShortcuts.KeyBindingAction.ArrowLeft:
this.seekRef.current?.left();
break;
case _KeyboardShortcuts.KeyBindingAction.ArrowRight:
this.seekRef.current?.right();
break;
default:
handled = false;
break;
}
// stopPropagation() prevents the FocusComposer catch-all from triggering,
// but we need to do it on key down instead of press (even though the user
// interaction is typically on press).
if (handled) {
ev.stopPropagation();
}
});
(0, _defineProperty2.default)(this, "onPlaybackUpdate", ev => {
this.setState({
playbackPhase: ev
});
});
this.state = {
playbackPhase: this.props.playback.currentState
};
// We don't need to de-register: the class handles this for us internally
this.props.playback.on(_AsyncStore.UPDATE_EVENT, this.onPlaybackUpdate);
// Don't wait for the promise to complete - it will emit a progress update when it
// is done, and it's not meant to take long anyhow.
this.props.playback.prepare().catch(e => {
_logger.logger.error("Error processing audio file:", e);
this.setState({
error: true
});
});
}
render() {
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, this.renderComponent(), this.state.error && /*#__PURE__*/_react.default.createElement("div", {
className: "text-warning"
}, (0, _languageHandler._t)("timeline|m.audio|error_downloading_audio")));
}
}
exports.default = AudioPlayerBase;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX0FzeW5jU3RvcmUiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX0tleUJpbmRpbmdzTWFuYWdlciIsIl9LZXlib2FyZFNob3J0Y3V0cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkF1ZGlvUGxheWVyQmFzZSIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJfZGVmaW5lUHJvcGVydHkyIiwiY3JlYXRlUmVmIiwiZXYiLCJoYW5kbGVkIiwiYWN0aW9uIiwiZ2V0S2V5QmluZGluZ3NNYW5hZ2VyIiwiZ2V0QWNjZXNzaWJpbGl0eUFjdGlvbiIsIktleUJpbmRpbmdBY3Rpb24iLCJTcGFjZSIsInBsYXlQYXVzZVJlZiIsImN1cnJlbnQiLCJ0b2dnbGVTdGF0ZSIsIkFycm93TGVmdCIsInNlZWtSZWYiLCJsZWZ0IiwiQXJyb3dSaWdodCIsInJpZ2h0Iiwic3RvcFByb3BhZ2F0aW9uIiwic2V0U3RhdGUiLCJwbGF5YmFja1BoYXNlIiwic3RhdGUiLCJwbGF5YmFjayIsImN1cnJlbnRTdGF0ZSIsIm9uIiwiVVBEQVRFX0VWRU5UIiwib25QbGF5YmFja1VwZGF0ZSIsInByZXBhcmUiLCJjYXRjaCIsImxvZ2dlciIsImVycm9yIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwicmVuZGVyQ29tcG9uZW50IiwiY2xhc3NOYW1lIiwiX3QiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvYXVkaW9fbWVzc2FnZXMvQXVkaW9QbGF5ZXJCYXNlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMSwgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlUmVmLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuXG5pbXBvcnQgeyBQbGF5YmFjaywgUGxheWJhY2tTdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9hdWRpby9QbGF5YmFja1wiO1xuaW1wb3J0IHsgVVBEQVRFX0VWRU5UIH0gZnJvbSBcIi4uLy4uLy4uL3N0b3Jlcy9Bc3luY1N0b3JlXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGdldEtleUJpbmRpbmdzTWFuYWdlciB9IGZyb20gXCIuLi8uLi8uLi9LZXlCaW5kaW5nc01hbmFnZXJcIjtcbmltcG9ydCB7IEtleUJpbmRpbmdBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vYWNjZXNzaWJpbGl0eS9LZXlib2FyZFNob3J0Y3V0c1wiO1xuaW1wb3J0IFNlZWtCYXIgZnJvbSBcIi4vU2Vla0JhclwiO1xuaW1wb3J0IFBsYXlQYXVzZUJ1dHRvbiBmcm9tIFwiLi9QbGF5UGF1c2VCdXR0b25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBJUHJvcHMge1xuICAgIC8vIFBsYXliYWNrIGluc3RhbmNlIHRvIHJlbmRlci4gQ2Fubm90IGNoYW5nZSBkdXJpbmcgY29tcG9uZW50IGxpZmVjeWNsZTogY3JlYXRlXG4gICAgLy8gYW4gYWxsLW5ldyBjb21wb25lbnQgaW5zdGVhZC5cbiAgICBwbGF5YmFjazogUGxheWJhY2s7XG5cbiAgICBtZWRpYU5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIHBsYXliYWNrUGhhc2U6IFBsYXliYWNrU3RhdGU7XG4gICAgZXJyb3I/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBBdWRpb1BsYXllckJhc2U8VCBleHRlbmRzIElQcm9wcyA9IElQcm9wcz4gZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PFQsIElTdGF0ZT4ge1xuICAgIHByb3RlY3RlZCBzZWVrUmVmOiBSZWZPYmplY3Q8U2Vla0Jhcj4gPSBjcmVhdGVSZWYoKTtcbiAgICBwcm90ZWN0ZWQgcGxheVBhdXNlUmVmOiBSZWZPYmplY3Q8UGxheVBhdXNlQnV0dG9uPiA9IGNyZWF0ZVJlZigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBUKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICAvLyBQbGF5YmFjayBpbnN0YW5jZXMgY2FuIGJlIHJldXNlZCBpbiB0aGUgY29tcG9zZXJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHBsYXliYWNrUGhhc2U6IHRoaXMucHJvcHMucGxheWJhY2suY3VycmVudFN0YXRlLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZGUtcmVnaXN0ZXI6IHRoZSBjbGFzcyBoYW5kbGVzIHRoaXMgZm9yIHVzIGludGVybmFsbHlcbiAgICAgICAgdGhpcy5wcm9wcy5wbGF5YmFjay5vbihVUERBVEVfRVZFTlQsIHRoaXMub25QbGF5YmFja1VwZGF0ZSk7XG5cbiAgICAgICAgLy8gRG9uJ3Qgd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gY29tcGxldGUgLSBpdCB3aWxsIGVtaXQgYSBwcm9ncmVzcyB1cGRhdGUgd2hlbiBpdFxuICAgICAgICAvLyBpcyBkb25lLCBhbmQgaXQncyBub3QgbWVhbnQgdG8gdGFrZSBsb25nIGFueWhvdy5cbiAgICAgICAgdGhpcy5wcm9wcy5wbGF5YmFjay5wcmVwYXJlKCkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHByb2Nlc3NpbmcgYXVkaW8gZmlsZTpcIiwgZSk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbktleURvd24gPSAoZXY6IFJlYWN0LktleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgbGV0IGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBnZXRLZXlCaW5kaW5nc01hbmFnZXIoKS5nZXRBY2Nlc3NpYmlsaXR5QWN0aW9uKGV2KTtcblxuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSBLZXlCaW5kaW5nQWN0aW9uLlNwYWNlOlxuICAgICAgICAgICAgICAgIHRoaXMucGxheVBhdXNlUmVmLmN1cnJlbnQ/LnRvZ2dsZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleUJpbmRpbmdBY3Rpb24uQXJyb3dMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuc2Vla1JlZi5jdXJyZW50Py5sZWZ0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleUJpbmRpbmdBY3Rpb24uQXJyb3dSaWdodDpcbiAgICAgICAgICAgICAgICB0aGlzLnNlZWtSZWYuY3VycmVudD8ucmlnaHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RvcFByb3BhZ2F0aW9uKCkgcHJldmVudHMgdGhlIEZvY3VzQ29tcG9zZXIgY2F0Y2gtYWxsIGZyb20gdHJpZ2dlcmluZyxcbiAgICAgICAgLy8gYnV0IHdlIG5lZWQgdG8gZG8gaXQgb24ga2V5IGRvd24gaW5zdGVhZCBvZiBwcmVzcyAoZXZlbiB0aG91Z2ggdGhlIHVzZXJcbiAgICAgICAgLy8gaW50ZXJhY3Rpb24gaXMgdHlwaWNhbGx5IG9uIHByZXNzKS5cbiAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25QbGF5YmFja1VwZGF0ZSA9IChldjogUGxheWJhY2tTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGxheWJhY2tQaGFzZTogZXYgfSk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZW5kZXJDb21wb25lbnQoKTogUmVhY3ROb2RlO1xuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdE5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJDb21wb25lbnQoKX1cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC13YXJuaW5nXCI+e190KFwidGltZWxpbmV8bS5hdWRpb3xlcnJvcl9kb3dubG9hZGluZ19hdWRpb1wiKX08L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElB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