* VRFS-1774 - de-dup channels repeated
* VRFS-1774 - filter out assigned channels * VRFS-1773 - no pre-assignment on step 3 (configure tracks) * VRFS-1774 - make radiobuttons appear more disabled; no more prod * VRFS-1767 - probably gone; but there is a more fundamental issue
This commit is contained in:
parent
60a1618c9b
commit
169c9b0ab1
|
|
@ -21,11 +21,15 @@
|
|||
var $outputChannelHolder = null;
|
||||
var $instrumentsHolder = null;
|
||||
|
||||
function loadChannels() {
|
||||
function loadChannels(forceInputsToUnassign) {
|
||||
var musicPorts = jamClient.FTUEGetChannels();
|
||||
|
||||
$unassignedInputsHolder.empty();
|
||||
$unassignedOutputsHolder.empty();
|
||||
|
||||
// reset all counts
|
||||
$unassignedInputsHolder.find('.track-target').attr('track-count', '0');
|
||||
$unassignedOutputsHolder.find('.output-target').attr('output-count', '0');
|
||||
$tracksHolder.find('.ftue-input').remove();
|
||||
$outputChannelHolder.find('.ftue-input').remove();
|
||||
|
||||
|
|
@ -38,7 +42,7 @@
|
|||
context._.each(inputChannels, function (inputChannel) {
|
||||
var $channel = $(context._.template($templateAssignablePort.html(), inputChannel, { variable: 'data' }));
|
||||
|
||||
if(inputChannel.assignment == ASSIGNMENT.UNASSIGNED) {
|
||||
if(forceInputsToUnassign || inputChannel.assignment == ASSIGNMENT.UNASSIGNED) {
|
||||
unassignInputChannel($channel);
|
||||
}
|
||||
else if(inputChannel.assignment == ASSIGNMENT.CHAT) {
|
||||
|
|
@ -247,7 +251,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
function loadTrackInstruments() {
|
||||
function loadTrackInstruments(forceInputsToUnassign) {
|
||||
var $trackInstruments = $instrumentsHolder.find('.track-instrument');
|
||||
|
||||
context._.each($trackInstruments, function(trackInstrument) {
|
||||
|
|
@ -279,9 +283,9 @@
|
|||
return saved;
|
||||
}
|
||||
|
||||
function reset() {
|
||||
loadChannels();
|
||||
loadTrackInstruments();
|
||||
function reset(forceInputsToUnassign) {
|
||||
loadChannels(forceInputsToUnassign);
|
||||
loadTrackInstruments(forceInputsToUnassign);
|
||||
}
|
||||
|
||||
function unassignOutputChannel($channel) {
|
||||
|
|
|
|||
|
|
@ -20,21 +20,25 @@
|
|||
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
|
||||
|
||||
// needed because iCheck fires iChecked event even when you programmatically change it, unlike when using .val(x)
|
||||
var ignoreICheckeEvent = false;
|
||||
|
||||
function defaultReuse() {
|
||||
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$useChatInputRadio.removeAttr('checked');
|
||||
suppressChange(function(){
|
||||
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$useChatInputRadio.removeAttr('checked');
|
||||
})
|
||||
}
|
||||
|
||||
function isChatEnabled() {
|
||||
|
||||
return $useChatInputRadio.is(':checked');
|
||||
}
|
||||
|
||||
function reset() {
|
||||
function reset(forceDisabledChat) {
|
||||
|
||||
$selectedChatInput = null;
|
||||
|
||||
if(context.jamClient.TrackGetChatEnable()) {
|
||||
if(!forceDisabledChat && context.jamClient.TrackGetChatEnable()) {
|
||||
enableChat(false);
|
||||
}
|
||||
else {
|
||||
|
|
@ -82,16 +86,41 @@
|
|||
});
|
||||
|
||||
if(!isChatEnabled()) {
|
||||
$radioButtons.iCheck('disable');
|
||||
disableChatButtonsUI();
|
||||
}
|
||||
|
||||
$chatInputs.find('.chat-input').show().on('click', function() {
|
||||
if(!isChatEnabled()) {
|
||||
context.JK.prodBubble($parent.find('.use-chat-input h3'), 'chat-not-enabled', {}, { positions:['left']});
|
||||
}
|
||||
// obnoxious; remove soon XXX
|
||||
// if(!isChatEnabled()) {
|
||||
// context.JK.prodBubble($parent.find('.use-chat-input h3'), 'chat-not-enabled', {}, { positions:['left']});
|
||||
// }
|
||||
})
|
||||
}
|
||||
|
||||
function disableChatButtonsUI() {
|
||||
var $radioButtons = $chatInputs.find('input[name="chat-device"]');
|
||||
$radioButtons.iCheck('disable')
|
||||
$chatInputs.addClass('disabled');
|
||||
}
|
||||
|
||||
function enableChatButtonsUI() {
|
||||
var $radioButtons = $chatInputs.find('input[name="chat-device"]');
|
||||
$radioButtons.iCheck('enable')
|
||||
$chatInputs.removeClass('disabled');
|
||||
|
||||
}
|
||||
function suppressChange(proc) {
|
||||
|
||||
ignoreICheckeEvent = true;
|
||||
|
||||
try {
|
||||
proc();
|
||||
}
|
||||
finally {
|
||||
ignoreICheckeEvent = false;
|
||||
}
|
||||
}
|
||||
|
||||
function disableChat(applyToBackend) {
|
||||
if(saveImmediate && applyToBackend) {
|
||||
logger.debug("voiceChatHelper: disabling chat to backend");
|
||||
|
|
@ -100,9 +129,10 @@
|
|||
|
||||
if(!result || result.length == 0) {
|
||||
// success
|
||||
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$useChatInputRadio.removeAttr('checked');
|
||||
|
||||
suppressChange(function() {
|
||||
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$useChatInputRadio.removeAttr('checked');
|
||||
})
|
||||
}
|
||||
else {
|
||||
context.JK.Banner.showAlert('Unable to disable chat. ' + result);
|
||||
|
|
@ -111,11 +141,12 @@
|
|||
}
|
||||
else {
|
||||
logger.debug("voiceChatHelper: disabling chat UI only");
|
||||
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$useChatInputRadio.removeAttr('checked');
|
||||
suppressChange(function() {
|
||||
$reuseAudioInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$useChatInputRadio.removeAttr('checked');
|
||||
})
|
||||
}
|
||||
var $radioButtons = $chatInputs.find('input[name="chat-device"]');
|
||||
$radioButtons.iCheck('disable');
|
||||
disableChatButtonsUI()
|
||||
}
|
||||
|
||||
function enableChat(applyToBackend) {
|
||||
|
|
@ -126,9 +157,10 @@
|
|||
|
||||
if(!result || result.length == 0) {
|
||||
// success
|
||||
$useChatInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$reuseAudioInputRadio.removeAttr('checked');
|
||||
|
||||
suppressChange(function() {
|
||||
$useChatInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$reuseAudioInputRadio.removeAttr('checked');
|
||||
})
|
||||
}
|
||||
else {
|
||||
context.JK.Banner.showAlert('Unable to enable chat. ' + result);
|
||||
|
|
@ -137,12 +169,13 @@
|
|||
}
|
||||
else {
|
||||
logger.debug("voiceChatHelper: enabling chat UI only");
|
||||
$useChatInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$reuseAudioInputRadio.removeAttr('checked');
|
||||
suppressChange(function() {
|
||||
$useChatInputRadio.iCheck('check').attr('checked', 'checked');
|
||||
$reuseAudioInputRadio.removeAttr('checked');
|
||||
})
|
||||
}
|
||||
|
||||
var $radioButtons = $chatInputs.find('input[name="chat-device"]');
|
||||
$radioButtons.iCheck('enable');
|
||||
enableChatButtonsUI();
|
||||
}
|
||||
|
||||
function handleChatEnabledToggle() {
|
||||
|
|
@ -153,8 +186,8 @@
|
|||
$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) });
|
||||
$reuseAudioInputRadio.on('ifChecked', function() { if(!ignoreICheckeEvent) disableChat(true) });
|
||||
$useChatInputRadio.on('ifChecked', function() { if(!ignoreICheckeEvent) enableChat(true) });
|
||||
}
|
||||
|
||||
// gets the state of the UI
|
||||
|
|
|
|||
|
|
@ -13,20 +13,27 @@
|
|||
var configureTracksHelper = new context.JK.ConfigureTracksHelper(app);
|
||||
|
||||
var $step = null;
|
||||
|
||||
var successfullyAssignedOnce = false;
|
||||
|
||||
function handleNext() {
|
||||
var saved = configureTracksHelper.trySave();
|
||||
|
||||
if(saved) {
|
||||
context.JK.GA.trackConfigureTracksCompletion(context.JK.detectOS());
|
||||
successfullyAssignedOnce = true;
|
||||
}
|
||||
|
||||
return saved;
|
||||
}
|
||||
|
||||
function newSession() {
|
||||
successfullyAssignedOnce = false;
|
||||
}
|
||||
|
||||
function beforeShow() {
|
||||
configureTracksHelper.reset();
|
||||
var forceInputsToUnassigned = !successfullyAssignedOnce;
|
||||
|
||||
configureTracksHelper.reset(forceInputsToUnassigned)
|
||||
}
|
||||
|
||||
function initialize(_$step) {
|
||||
|
|
@ -35,6 +42,7 @@
|
|||
configureTracksHelper.initialize($step);
|
||||
}
|
||||
|
||||
this.newSession = newSession;
|
||||
this.handleNext = handleNext;
|
||||
this.beforeShow = beforeShow;
|
||||
this.initialize = initialize;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
var voiceChatHelper = new context.JK.VoiceChatHelper(app);
|
||||
|
||||
function newSession() {
|
||||
voiceChatHelper.reset();
|
||||
voiceChatHelper.reset(true);
|
||||
}
|
||||
|
||||
function beforeShow() {
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@
|
|||
var optionsHtml = '';
|
||||
optionsHtml = '<option selected="selected" value="">Choose...</option>';
|
||||
context._.each(deviceInformation, function (deviceInfo, deviceId) {
|
||||
|
||||
if(deviceInfo.inputCount > 0) {
|
||||
optionsHtml += '<option title="' + deviceInfo.displayName + '" value="' + deviceId + '">' + deviceInfo.displayName + '</option>';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -205,21 +205,39 @@
|
|||
|
||||
gearUtils.getChatInputs = function(){
|
||||
|
||||
var musicPorts = jamClient.FTUEGetChannels();
|
||||
//var musicPorts = jamClient.FTUEGetChannels();
|
||||
var chatsOnCurrentDevice = context.jamClient.FTUEGetChatInputs(true);
|
||||
var chatsOnOtherDevices = context.jamClient.FTUEGetChatInputs(false);
|
||||
|
||||
var chatInputs = [];
|
||||
context._.each(musicPorts.inputs, function(input) {
|
||||
chatInputs.push({id: input.id, name: input.name, assignment:input.assignment});
|
||||
});
|
||||
//context._.each(musicPorts.inputs, function(input) {
|
||||
// chatInputs.push({id: input.id, name: input.name, assignment:input.assignment});
|
||||
//});
|
||||
|
||||
var deDupper = {};
|
||||
context._.each(chatsOnCurrentDevice, function(chatChannelName, chatChannelId) {
|
||||
var chatInput = {id: chatChannelId, name: chatChannelName, assignment: ASSIGNMENT.UNASSIGNED};
|
||||
if(!deDupper[chatInput.id]) {
|
||||
var assignment = context.jamClient.TrackGetAssignment(chatChannelId, true);
|
||||
if(assignment != ASSIGNMENT.CHAT) {
|
||||
chatInputs.push(chatInput);
|
||||
deDupper[chatInput.id] = chatInput;
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
context._.each(chatsOnOtherDevices, function(chatChannelName, chatChannelId) {
|
||||
var chatInput = {id: chatChannelId, name: chatChannelName, assignment: null};
|
||||
var assignment = context.jamClient.TrackGetAssignment(chatChannelId, true);
|
||||
chatInput.assignment = assignment;
|
||||
chatInputs.push(chatInput);
|
||||
if(!deDupper[chatInput.id]) {
|
||||
var assignment = context.jamClient.TrackGetAssignment(chatChannelId, true);
|
||||
chatInput.assignment = assignment;
|
||||
|
||||
chatInputs.push(chatInput);
|
||||
deDupper[chatInput.id] = chatInput;
|
||||
}
|
||||
})
|
||||
|
||||
logger.debug("chatInputs:", chatInputs)
|
||||
return chatInputs;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,11 @@
|
|||
&.chat-inputs {
|
||||
height: 230px !important;
|
||||
overflow: auto;
|
||||
color:white;
|
||||
|
||||
&.disabled {
|
||||
color:gray;
|
||||
}
|
||||
p {
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@
|
|||
%a.button-orange.watch-video{href:'#'} WATCH VIDEO
|
||||
.wizard-step-column
|
||||
%h2 Select Voice Chat Option
|
||||
%form
|
||||
%form.voice
|
||||
.voicechat-option.reuse-audio-input
|
||||
%input{type:"radio", name: "voicechat", checked:"checked"}
|
||||
%h3 Use Music Microphone
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@ describe "Gear Wizard", :js => true, :type => :feature, :capybara_feature => tru
|
|||
|
||||
# step 3 - configure tracks
|
||||
find('.ftue-step-title', text: 'Configure Tracks')
|
||||
|
||||
# drag one input over to tracks area http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#drag_to-instance_method
|
||||
input = first('.ftue-input')
|
||||
track_slot = first('.track-target')
|
||||
input.drag_to(track_slot)
|
||||
|
||||
find('.btn-next.button-orange').trigger(:click)
|
||||
|
||||
# step 4 - configure voice chat
|
||||
|
|
|
|||
Loading…
Reference in New Issue