123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /* global $, $iq, config, connection, focusJid, messageHandler, Moderator,
- Toolbar, Util */
- var Recording = (function (my) {
- var recordingToken = null;
- var recordingEnabled;
-
- my.setRecordingToken = function (token) {
- recordingToken = token;
- };
-
- // Sends a COLIBRI message which enables or disables (according to 'state')
- // the recording on the bridge. Waits for the result IQ and calls 'callback'
- // with the new recording state, according to the IQ.
- my.setRecording = function (state, token, callback) {
- var self = this;
- var elem = $iq({to: focusJid, type: 'set'});
- elem.c('conference', {
- xmlns: 'http://jitsi.org/protocol/colibri'
- });
- elem.c('recording', {state: state, token: token});
- elem.up();
-
- connection.sendIQ(elem,
- function (result) {
- console.log('Set recording "', state, '". Result:', result);
- var recordingElem = $(result).find('>conference>recording');
- var newState = ('true' === recordingElem.attr('state'));
-
- recordingEnabled = newState;
- callback(newState);
- },
- function (error) {
- console.warn(error);
- }
- );
- };
-
- my.toggleRecording = function () {
- if (!Moderator.isModerator()) {
- console.log(
- 'non-focus, or conference not yet organized:' +
- ' not enabling recording');
- return;
- }
-
- if (!recordingToken)
- {
- messageHandler.openTwoButtonDialog(null,
- '<h2>Enter recording token</h2>' +
- '<input id="recordingToken" type="text" placeholder="token" autofocus>',
- false,
- "Save",
- function (e, v, m, f) {
- if (v) {
- var token = document.getElementById('recordingToken');
-
- if (token.value) {
- my.setRecordingToken(
- Util.escapeHtml(token.value));
- my.toggleRecording();
- }
- }
- },
- function (event) {
- document.getElementById('recordingToken').focus();
- }
- );
-
- return;
- }
-
- var oldState = recordingEnabled;
- Toolbar.setRecordingButtonState(!oldState);
- my.setRecording(!oldState,
- recordingToken,
- function (state) {
- console.log("New recording state: ", state);
- if (state === oldState)
- {
- // FIXME: new focus:
- // this will not work when moderator changes
- // during active session. Then it will assume that
- // recording status has changed to true, but it might have
- // been already true(and we only received actual status from
- // the focus).
- //
- // SO we start with status null, so that it is initialized
- // here and will fail only after second click, so if invalid
- // token was used we have to press the button twice before
- // current status will be fetched and token will be reset.
- //
- // Reliable way would be to return authentication error.
- // Or status update when moderator connects.
- // Or we have to stop recording session when current
- // moderator leaves the room.
-
- // Failed to change, reset the token because it might
- // have been wrong
- my.setRecordingToken(null);
- }
- // Update with returned status
- Toolbar.setRecordingButtonState(state);
- }
- );
- };
-
- return my;
- }(Recording || {}));
|