Add Recorder controller.
This commit is contained in:
parent
e43c5ab54c
commit
99d9b16c13
|
@ -0,0 +1,101 @@
|
|||
/* global config, APP */
|
||||
/*
|
||||
* Copyright @ 2015 Atlassian Pty Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import VideoLayout from '../UI/videolayout/VideoLayout';
|
||||
import Feedback from '../UI/Feedback.js';
|
||||
import Toolbar from '../UI/toolbars/Toolbar';
|
||||
import BottomToolbar from '../UI/toolbars/BottomToolbar';
|
||||
|
||||
const _RECORDER_CUSTOM_ROLE = "recorder-role";
|
||||
|
||||
class Recorder {
|
||||
/**
|
||||
* Initializes a new {Recorder} instance.
|
||||
*
|
||||
* @param conference the {conference} which is to transport
|
||||
* {Recorder}-related information between participants
|
||||
* @param UI the {UI} which is the source (model/state) to be sent to
|
||||
* remote participants if the local participant is the moderator or the
|
||||
* destination (model/state) to receive from the remote moderator if the
|
||||
* local participant is not the moderator
|
||||
*/
|
||||
constructor (conference, UI) {
|
||||
var self = this;
|
||||
this._conference = conference;
|
||||
this._UI = UI;
|
||||
|
||||
// If I am a recorder then I publish my recorder custom role to notify
|
||||
// everyone.
|
||||
if (config.iAmRecorder) {
|
||||
VideoLayout.enableDeviceAvailabilityIcons(conference.localId, true);
|
||||
this._publishMyRecorderRole();
|
||||
Feedback.enableFeedback(false);
|
||||
Toolbar.enable(false);
|
||||
BottomToolbar.enable(false);
|
||||
}
|
||||
|
||||
// Listen to "CUSTOM_ROLE" commands.
|
||||
this._conference.commands.addCommandListener(
|
||||
this._conference.commands.defaults.CUSTOM_ROLE,
|
||||
this._onCustomRoleCommand.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish the recorder custom role.
|
||||
* @private
|
||||
*/
|
||||
_publishMyRecorderRole () {
|
||||
var conference = this._conference;
|
||||
|
||||
var commands = conference.commands;
|
||||
|
||||
commands.removeCommand(commands.defaults.CUSTOM_ROLE);
|
||||
var self = this;
|
||||
commands.sendCommandOnce(
|
||||
commands.defaults.CUSTOM_ROLE,
|
||||
{
|
||||
attributes: {
|
||||
recorderRole: true
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies this instance about a &qout;Custom Role&qout; command (delivered
|
||||
* by the Command(s) API of {this._conference}).
|
||||
*
|
||||
* @param attributes the attributes {Object} carried by the command
|
||||
* @param id the identifier of the participant who issued the command. A
|
||||
* notable idiosyncrasy of the Command(s) API to be mindful of here is that
|
||||
* the command may be issued by the local participant.
|
||||
*/
|
||||
_onCustomRoleCommand ({ attributes }, id) {
|
||||
// We require to know who issued the command because (1) only a
|
||||
// moderator is allowed to send commands and (2) a command MUST be
|
||||
// issued by a defined commander.
|
||||
if (typeof id === 'undefined'
|
||||
|| this._conference.isLocalId(id)
|
||||
|| !attributes.recorderRole)
|
||||
return;
|
||||
|
||||
var isRecorder = (attributes.recorderRole == 'true');
|
||||
|
||||
if (isRecorder)
|
||||
VideoLayout.enableDeviceAvailabilityIcons(id, isRecorder);
|
||||
}
|
||||
}
|
||||
|
||||
export default Recorder;
|
Loading…
Reference in New Issue