* 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:
Seth Call 2014-06-10 09:02:51 -05:00
parent 60a1618c9b
commit 169c9b0ab1
9 changed files with 116 additions and 42 deletions

View File

@ -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) {

View File

@ -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

View File

@ -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;

View File

@ -20,7 +20,7 @@
var voiceChatHelper = new context.JK.VoiceChatHelper(app);
function newSession() {
voiceChatHelper.reset();
voiceChatHelper.reset(true);
}
function beforeShow() {

View File

@ -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>';
}

View File

@ -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;
}

View File

@ -40,7 +40,11 @@
&.chat-inputs {
height: 230px !important;
overflow: auto;
color:white;
&.disabled {
color:gray;
}
p {
white-space: nowrap;
display: inline-block;

View File

@ -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

View File

@ -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