222 lines
7.2 KiB
JavaScript
222 lines
7.2 KiB
JavaScript
(function (context, $) {
|
|
|
|
"use strict";
|
|
|
|
context.JK = context.JK || {};
|
|
context.JK.VoiceChatHelper = function (app) {
|
|
var logger = context.JK.logger;
|
|
var ASSIGNMENT = context.JK.ASSIGNMENT;
|
|
var VOICE_CHAT = context.JK.VOICE_CHAT;
|
|
var MAX_TRACKS = context.JK.MAX_TRACKS;
|
|
var MAX_OUTPUTS = context.JK.MAX_OUTPUTS;
|
|
var gearUtils = context.JK.GearUtils;
|
|
|
|
var $parent = null;
|
|
|
|
var $reuseAudioInputRadio = null;
|
|
var $useChatInputRadio = null;
|
|
var $chatInputs = null;
|
|
var $templateChatInput = null;
|
|
var $selectedChatInput = null;// should only be used if isChatEnabled = true
|
|
var saveImmediate = null; // if true, then every action by the user results in a save to the backend immediately, false means you have to call trySave to persist
|
|
|
|
function defaultReuse() {
|
|
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
|
$useChatInputRadio.removeAttr('checked');
|
|
}
|
|
|
|
function isChatEnabled() {
|
|
|
|
return $useChatInputRadio.is(':checked');
|
|
}
|
|
|
|
function reset() {
|
|
|
|
$selectedChatInput = null;
|
|
|
|
if(context.jamClient.TrackGetChatEnable()) {
|
|
enableChat(false);
|
|
}
|
|
else {
|
|
disableChat(false);
|
|
}
|
|
|
|
$chatInputs.empty();
|
|
|
|
var chatInputs = gearUtils.getChatInputs();
|
|
|
|
context._.each(chatInputs, function(chatInput) {
|
|
if(chatInput.assignment > 0) {
|
|
return;
|
|
}
|
|
var chatChannelName = chatInput.name;
|
|
var chatChannelId = chatInput.id;
|
|
var isCurrentlyChat = chatInput.assignment == ASSIGNMENT.CHAT;
|
|
var $chat = $(context._.template($templateChatInput.html(), {id: chatChannelId, name: chatChannelName}, { variable: 'data' }));
|
|
var $chatInput = $chat.find('input');
|
|
if(isCurrentlyChat) {
|
|
$selectedChatInput = $chatInput;
|
|
$selectedChatInput.attr('checked', 'checked');
|
|
}
|
|
$chat.hide(); // we'll show it once it's styled with iCheck
|
|
$chatInputs.append($chat);
|
|
});
|
|
|
|
var $radioButtons = $chatInputs.find('input[name="chat-device"]');
|
|
context.JK.checkbox($radioButtons).on('ifChecked', function(e) {
|
|
var $input = $(e.currentTarget);
|
|
$selectedChatInput = $input; // for use in handleNext
|
|
if(saveImmediate) {
|
|
var channelId = $input.attr('data-channel-id');
|
|
context.jamClient.TrackSetAssignment(channelId, true, ASSIGNMENT.CHAT);
|
|
var result = context.jamClient.TrackSaveAssignments();
|
|
|
|
if(!result || result.length == 0) {
|
|
// success
|
|
}
|
|
else {
|
|
context.JK.Banner.showAlert('Unable to save assignments. ' + result);
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
|
|
if(!isChatEnabled()) {
|
|
$radioButtons.iCheck('disable');
|
|
}
|
|
|
|
$chatInputs.find('.chat-input').show().on('click', function() {
|
|
if(!isChatEnabled()) {
|
|
context.JK.prodBubble($parent.find('.use-chat-input h3'), 'chat-not-enabled', {}, { positions:['left']});
|
|
}
|
|
})
|
|
}
|
|
|
|
function disableChat(applyToBackend) {
|
|
if(saveImmediate && applyToBackend) {
|
|
logger.debug("voiceChatHelper: disabling chat to backend");
|
|
context.jamClient.TrackSetChatEnable(false);
|
|
var result = context.jamClient.TrackSaveAssignments();
|
|
|
|
if(!result || result.length == 0) {
|
|
// success
|
|
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
|
$useChatInputRadio.removeAttr('checked');
|
|
|
|
}
|
|
else {
|
|
context.JK.Banner.showAlert('Unable to disable chat. ' + result);
|
|
return false;
|
|
}
|
|
}
|
|
else {
|
|
logger.debug("voiceChatHelper: disabling chat UI only");
|
|
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
|
$useChatInputRadio.removeAttr('checked');
|
|
}
|
|
var $radioButtons = $chatInputs.find('input[name="chat-device"]');
|
|
$radioButtons.iCheck('disable');
|
|
}
|
|
|
|
function enableChat(applyToBackend) {
|
|
if(saveImmediate && applyToBackend) {
|
|
logger.debug("voiceChatHelper: enabling chat to backend");
|
|
context.jamClient.TrackSetChatEnable(true);
|
|
var result = context.jamClient.TrackSaveAssignments();
|
|
|
|
if(!result || result.length == 0) {
|
|
// success
|
|
$useChatInputRadio.iCheck('check').attr('checked', 'checked');
|
|
$reuseAudioInputRadio.removeAttr('checked');
|
|
|
|
}
|
|
else {
|
|
context.JK.Banner.showAlert('Unable to enable chat. ' + result);
|
|
return false;
|
|
}
|
|
}
|
|
else {
|
|
logger.debug("voiceChatHelper: enabling chat UI only");
|
|
$useChatInputRadio.iCheck('check').attr('checked', 'checked');
|
|
$reuseAudioInputRadio.removeAttr('checked');
|
|
}
|
|
|
|
var $radioButtons = $chatInputs.find('input[name="chat-device"]');
|
|
$radioButtons.iCheck('enable');
|
|
}
|
|
|
|
function handleChatEnabledToggle() {
|
|
context.JK.checkbox($reuseAudioInputRadio);
|
|
context.JK.checkbox($useChatInputRadio);
|
|
|
|
// plugin sets to relative on the element; have to do this as an override
|
|
$reuseAudioInputRadio.closest('.iradio_minimal').css('position', 'absolute');
|
|
$useChatInputRadio.closest('.iradio_minimal').css('position', 'absolute');
|
|
|
|
$reuseAudioInputRadio.on('ifChecked', function() { disableChat(true) });
|
|
$useChatInputRadio.on('ifChecked', function() { enableChat(true) });
|
|
}
|
|
|
|
// gets the state of the UI
|
|
function getCurrentState() {
|
|
var state = {
|
|
enabled:null,
|
|
chat_channel:null
|
|
};
|
|
|
|
state.enabled = $useChatInputRadio.is(':checked');
|
|
state.chat_channel = $selectedChatInput && $selectedChatInput.attr('data-channel-id');
|
|
logger.debug("desired chat state: enabled=" + state.enabled + ", chat_channel=" + state.chat_channel)
|
|
return state;
|
|
}
|
|
|
|
function trySave() {
|
|
|
|
var state = getCurrentState();
|
|
|
|
if(state.enabled && state.chat_channel) {
|
|
logger.debug("enabling chat. chat_channel=" + state.chat_channel);
|
|
context.jamClient.TrackSetChatEnable(true);
|
|
context.jamClient.FTUESetChatInput(state.chat_channel);
|
|
//context.jamClient.TrackSetAssignment(state.chat_channel, true, ASSIGNMENT.CHAT);
|
|
}
|
|
else {
|
|
logger.debug("disabling chat.");
|
|
context.jamClient.TrackSetChatEnable(false);
|
|
if(state.chat_channel) {
|
|
context.jamClient.TrackSetAssignment(state.chat_channel, true, ASSIGNMENT.UNASSIGNED);
|
|
}
|
|
}
|
|
|
|
var result = context.jamClient.TrackSaveAssignments();
|
|
|
|
if(!result || result.length == 0) {
|
|
// success
|
|
return true;
|
|
}
|
|
else {
|
|
context.JK.Banner.showAlert('Unable to save chat assignments. ' + result);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function initialize(_$step, _saveImmediate) {
|
|
$parent = _$step;
|
|
saveImmediate = _saveImmediate;
|
|
|
|
$reuseAudioInputRadio = $parent.find('.reuse-audio-input input');
|
|
$useChatInputRadio = $parent.find('.use-chat-input input');
|
|
$chatInputs = $parent.find('.chat-inputs');
|
|
$templateChatInput = $('#template-chat-input');
|
|
|
|
handleChatEnabledToggle();
|
|
}
|
|
|
|
this.reset = reset;
|
|
this.trySave = trySave;
|
|
this.initialize = initialize;
|
|
|
|
return this;
|
|
};
|
|
|
|
})(window, jQuery); |