* wip still on new ftue. also push release branches to repository VRFS-1639
This commit is contained in:
parent
0a811a147c
commit
30ca8d7c5c
4
build
4
build
|
|
@ -66,7 +66,7 @@ DEB_SERVER=http://localhost:9010/apt-`uname -p`
|
||||||
GEM_SERVER=http://localhost:9000/gems
|
GEM_SERVER=http://localhost:9000/gems
|
||||||
|
|
||||||
# if still going, then push all debs up
|
# if still going, then push all debs up
|
||||||
if [[ "$GIT_BRANCH" == *develop* || "$GIT_BRANCH" == *master* ]]; then
|
if [[ "$GIT_BRANCH" == *develop* || "$GIT_BRANCH" == *master* || "$GIT_BRANCH" == *release* ]]; then
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "PUSHING DB ARTIFACTS"
|
echo "PUSHING DB ARTIFACTS"
|
||||||
|
|
@ -129,7 +129,7 @@ GEM_SERVER=http://localhost:9000/gems
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "Skipping publish since branch is neither master or develop..."
|
echo "Skipping publish since branch is not master, develop, or release/*. branch is $GIT_BRANCH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,6 @@ module JamWebEventMachine
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.run
|
def self.run
|
||||||
|
|
||||||
current = Thread.current
|
current = Thread.current
|
||||||
Thread.new do
|
Thread.new do
|
||||||
run_em(current)
|
run_em(current)
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@
|
||||||
var me = {
|
var me = {
|
||||||
initialize: initialize,
|
initialize: initialize,
|
||||||
show: show,
|
show: show,
|
||||||
|
showAlert: showAlert,
|
||||||
hide: hide
|
hide: hide
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@
|
||||||
.prop('disabled', true)
|
.prop('disabled', true)
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateForm() {
|
function validateForm() {
|
||||||
//var errors = [];
|
//var errors = [];
|
||||||
var isValid = true;
|
var isValid = true;
|
||||||
var $form = $('#create-session-form');
|
var $form = $('#create-session-form');
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,22 @@
|
||||||
context.JK = context.JK || {};
|
context.JK = context.JK || {};
|
||||||
context.JK.GearWizard = function (app) {
|
context.JK.GearWizard = function (app) {
|
||||||
|
|
||||||
|
|
||||||
var $dialog = null;
|
var $dialog = null;
|
||||||
var $wizardSteps = null;
|
var $wizardSteps = null;
|
||||||
var $currentWizardStep = null;
|
var $currentWizardStep = null;
|
||||||
var step = 0;
|
var step = 0;
|
||||||
var $templateSteps = null;
|
var $templateSteps = null;
|
||||||
var $templateButtons = null;
|
var $templateButtons = null;
|
||||||
|
var $templateAudioPort = null;
|
||||||
var $ftueButtons = null;
|
var $ftueButtons = null;
|
||||||
var self = null;
|
var self = null;
|
||||||
var operatingSystem = null;
|
var operatingSystem = null;
|
||||||
|
|
||||||
// populated by loadDevices
|
// populated by loadDevices
|
||||||
var deviceInformation = null;
|
var deviceInformation = null;
|
||||||
|
var musicInputPorts = null;
|
||||||
|
var musicOutputPorts = null;
|
||||||
|
|
||||||
// SELECT DEVICE STATE
|
// SELECT DEVICE STATE
|
||||||
var validScore = false;
|
var validScore = false;
|
||||||
|
|
@ -33,28 +37,32 @@
|
||||||
var STEP_ROUTER_NETWORK = 5;
|
var STEP_ROUTER_NETWORK = 5;
|
||||||
var STEP_SUCCESS = 6;
|
var STEP_SUCCESS = 6;
|
||||||
|
|
||||||
|
var PROFILE_DEV_SEP_TOKEN = '^';
|
||||||
|
|
||||||
|
var iCheckIgnore = false;
|
||||||
|
|
||||||
var audioDeviceBehavior = {
|
var audioDeviceBehavior = {
|
||||||
MacOSX_builtin : {
|
MacOSX_builtin: {
|
||||||
display: 'MacOSX Built-In',
|
display: 'MacOSX Built-In',
|
||||||
videoURL: undefined
|
videoURL: undefined
|
||||||
},
|
},
|
||||||
MACOSX_interface : {
|
MACOSX_interface: {
|
||||||
display: 'MacOSX external interface',
|
display: 'MacOSX external interface',
|
||||||
videoURL: undefined
|
videoURL: undefined
|
||||||
},
|
},
|
||||||
Win32_wdm : {
|
Win32_wdm: {
|
||||||
display: 'Windows WDM',
|
display: 'Windows WDM',
|
||||||
videoURL: undefined
|
videoURL: undefined
|
||||||
},
|
},
|
||||||
Win32_asio : {
|
Win32_asio: {
|
||||||
display: 'Windows ASIO',
|
display: 'Windows ASIO',
|
||||||
videoURL: undefined
|
videoURL: undefined
|
||||||
},
|
},
|
||||||
Win32_asio4all : {
|
Win32_asio4all: {
|
||||||
display: 'Windows ASIO4ALL',
|
display: 'Windows ASIO4ALL',
|
||||||
videoURL: undefined
|
videoURL: undefined
|
||||||
},
|
},
|
||||||
Linux : {
|
Linux: {
|
||||||
display: 'Linux',
|
display: 'Linux',
|
||||||
videoURL: undefined
|
videoURL: undefined
|
||||||
}
|
}
|
||||||
|
|
@ -63,7 +71,7 @@
|
||||||
function beforeShowIntro() {
|
function beforeShowIntro() {
|
||||||
var $watchVideo = $currentWizardStep.find('.watch-video');
|
var $watchVideo = $currentWizardStep.find('.watch-video');
|
||||||
var videoUrl = 'https://www.youtube.com/watch?v=VexH4834o9I';
|
var videoUrl = 'https://www.youtube.com/watch?v=VexH4834o9I';
|
||||||
if(operatingSystem == "Win32") {
|
if (operatingSystem == "Win32") {
|
||||||
$watchVideo.attr('href', 'https://www.youtube.com/watch?v=VexH4834o9I');
|
$watchVideo.attr('href', 'https://www.youtube.com/watch?v=VexH4834o9I');
|
||||||
}
|
}
|
||||||
$watchVideo.attr('href', videoUrl);
|
$watchVideo.attr('href', videoUrl);
|
||||||
|
|
@ -81,6 +89,9 @@
|
||||||
var $inputPorts = $currentWizardStep.find('.input-ports');
|
var $inputPorts = $currentWizardStep.find('.input-ports');
|
||||||
var $outputPorts = $currentWizardStep.find('.output-ports');
|
var $outputPorts = $currentWizardStep.find('.output-ports');
|
||||||
var $scoreReport = $currentWizardStep.find('.results');
|
var $scoreReport = $currentWizardStep.find('.results');
|
||||||
|
var $latencyScore = $scoreReport.find('.latency-score');
|
||||||
|
var $ioRateScore = $scoreReport.find('.io-rate-score');
|
||||||
|
var $ioVarScore = $scoreReport.find('.io-var-score');
|
||||||
var $nextButton = $ftueButtons.find('.btn-next');
|
var $nextButton = $ftueButtons.find('.btn-next');
|
||||||
|
|
||||||
// should return one of:
|
// should return one of:
|
||||||
|
|
@ -91,24 +102,24 @@
|
||||||
// * Win32_asio4all
|
// * Win32_asio4all
|
||||||
// * Linux
|
// * Linux
|
||||||
function determineDeviceType(deviceId, displayName) {
|
function determineDeviceType(deviceId, displayName) {
|
||||||
if(operatingSystem == "MacOSX") {
|
if (operatingSystem == "MacOSX") {
|
||||||
if(displayName.toLowerCase().trim() == "built-in") {
|
if (displayName.toLowerCase().trim() == "built-in") {
|
||||||
return "MacOSX_builtin";
|
return "MacOSX_builtin";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return "MacOSX_interface";
|
return "MacOSX_interface";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(operatingSystem == "Win32") {
|
else if (operatingSystem == "Win32") {
|
||||||
if(context.jamClient.FTUEIsMusicDeviceWDM(deviceId)) {
|
if (context.jamClient.FTUEIsMusicDeviceWDM(deviceId)) {
|
||||||
return "Win32_wdm";
|
return "Win32_wdm";
|
||||||
}
|
}
|
||||||
else if(displayName.toLowerCase().indexOf("asio4all") > -1) {
|
else if (displayName.toLowerCase().indexOf("asio4all") > -1) {
|
||||||
return "Win32_asio4all"
|
return "Win32_asio4all"
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return "Win32_asio";
|
return "Win32_asio";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return "Linux";
|
return "Linux";
|
||||||
|
|
@ -122,25 +133,27 @@
|
||||||
var loadedDevices = {};
|
var loadedDevices = {};
|
||||||
|
|
||||||
// augment these devices by determining their type
|
// augment these devices by determining their type
|
||||||
context._.each(devices, function(displayName, deviceId) {
|
context._.each(devices, function (displayName, deviceId) {
|
||||||
var deviceInfo = {};
|
var deviceInfo = {};
|
||||||
|
|
||||||
deviceInfo.id = deviceId;
|
deviceInfo.id = deviceId;
|
||||||
deviceInfo.type = determineDeviceType(deviceId, displayName);
|
deviceInfo.type = determineDeviceType(deviceId, displayName);
|
||||||
deviceInfo.displayType = audioDeviceBehavior[deviceInfo.type].display;
|
deviceInfo.displayType = audioDeviceBehavior[deviceInfo.type].display;
|
||||||
deviceInfo.displayName = deviceInfo.displayName;
|
deviceInfo.displayName = displayName;
|
||||||
|
|
||||||
loadedDevices[deviceId] = deviceInfo;
|
loadedDevices[deviceId] = deviceInfo;
|
||||||
|
|
||||||
|
logger.debug("loaded device: ", deviceInfo);
|
||||||
})
|
})
|
||||||
|
|
||||||
deviceInformation = context._.keys(loadedDevices).sort();
|
deviceInformation = loadedDevices;
|
||||||
|
|
||||||
logger.debug(context.JK.dlen(deviceInformation) + " devices loaded." , deviceInformation);
|
logger.debug(context.JK.dlen(deviceInformation) + " devices loaded.", deviceInformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a deviceInfo hash for the device matching the deviceId, or null.
|
// returns a deviceInfo hash for the device matching the deviceId, or undefined.
|
||||||
function findDevice(deviceId) {
|
function findDevice(deviceId) {
|
||||||
return {};
|
return deviceInformation[deviceId];
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectedAudioInput() {
|
function selectedAudioInput() {
|
||||||
|
|
@ -164,22 +177,21 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeNextButtonState() {
|
function initializeNextButtonState() {
|
||||||
console.log(context.jamClient.FTUEGetDevices(false));
|
|
||||||
console.log("chat devices", jamClient.FTUEGetChatInputs());
|
|
||||||
$nextButton.removeClass('button-orange button-grey');
|
$nextButton.removeClass('button-orange button-grey');
|
||||||
|
|
||||||
if(validScore) $nextButton.addClass('button-orange');
|
if (validScore) $nextButton.addClass('button-orange');
|
||||||
else $nextButton.addClass('button-grey');
|
else $nextButton.addClass('button-grey');
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeAudioInput() {
|
function initializeAudioInput() {
|
||||||
var optionsHtml = '';
|
var optionsHtml = '';
|
||||||
optionsHtml = '<option selected="selected" value="">Choose...</option>';
|
optionsHtml = '<option selected="selected" value="">Choose...</option>';
|
||||||
context._.each(deviceInformation, function(deviceInfo, deviceId) {
|
context._.each(deviceInformation, function (deviceInfo, deviceId) {
|
||||||
|
|
||||||
|
console.log(arguments)
|
||||||
optionsHtml += '<option title="' + deviceInfo.displayName + '" value="' + deviceId + '">' + deviceInfo.displayName + '</option>';
|
optionsHtml += '<option title="' + deviceInfo.displayName + '" value="' + deviceId + '">' + deviceInfo.displayName + '</option>';
|
||||||
});
|
});
|
||||||
$audioInput.html(optionsHtml);
|
$audioInput.html(optionsHtml);
|
||||||
alert(optionsHtml)
|
|
||||||
context.JK.dropdown($audioInput);
|
context.JK.dropdown($audioInput);
|
||||||
|
|
||||||
initializeAudioInputChanged();
|
initializeAudioInputChanged();
|
||||||
|
|
@ -188,7 +200,7 @@
|
||||||
function initializeAudioOutput() {
|
function initializeAudioOutput() {
|
||||||
var optionsHtml = '';
|
var optionsHtml = '';
|
||||||
optionsHtml = '<option selected="selected" value="">Same as Input...</option>';
|
optionsHtml = '<option selected="selected" value="">Same as Input...</option>';
|
||||||
context._.each(deviceInformation, function(deviceInfo, deviceId) {
|
context._.each(deviceInformation, function (deviceInfo, deviceId) {
|
||||||
optionsHtml += '<option title="' + deviceInfo.displayName + '" value="' + deviceId + '">' + deviceInfo.displayName + '</option>';
|
optionsHtml += '<option title="' + deviceInfo.displayName + '" value="' + deviceId + '">' + deviceInfo.displayName + '</option>';
|
||||||
});
|
});
|
||||||
$audioOutput.html(optionsHtml);
|
$audioOutput.html(optionsHtml);
|
||||||
|
|
@ -198,11 +210,146 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeFramesize() {
|
function initializeFramesize() {
|
||||||
|
context.JK.dropdown($frameSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
function initializeBuffers() {
|
||||||
|
context.JK.dropdown($bufferIn);
|
||||||
|
context.JK.dropdown($bufferOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
// finds out if the $port argument is from a different port pair than what's currently selected
|
||||||
|
function isNewlySelectedPair($port) {
|
||||||
|
var portId = $port.attr('data-id');
|
||||||
|
// get all inputs currently selected except this one
|
||||||
|
var $selectedInputs = $inputPorts.find('input[type="checkbox"]:checked').filter('[data-id="' + portId + '"]');
|
||||||
|
|
||||||
|
console.log("$selectedInputs", $selectedInputs);
|
||||||
|
var isNewlySelected = true;
|
||||||
|
context._.each($selectedInputs, function($current) {
|
||||||
|
var testPairInfo = $($current).data('pair');
|
||||||
|
|
||||||
|
context._.each(testPairInfo.ports, function(port) {
|
||||||
|
// if we can find the newly selected item in this pair, then it's not a different pair...
|
||||||
|
if(port.id == portId) {
|
||||||
|
isNewlySelected = false;
|
||||||
|
return false; // break loop
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(isNewlySelected) return false; // break loop
|
||||||
|
});
|
||||||
|
|
||||||
|
return isNewlySelected;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set checkbox state for all items in the pair
|
||||||
|
function setCheckedForAllInPair($portBox, pairInfo, checked, signalBackend) {
|
||||||
|
context._.each(pairInfo.ports, function(port) {
|
||||||
|
var portId = port.id;
|
||||||
|
var $input = $portBox.find('input[type="checkbox"][data-id="' + portId + '"]');
|
||||||
|
if($input.is(':checked') != checked) {
|
||||||
|
if(checked) {
|
||||||
|
$input.iCheck('check').attr('checked', 'checked');
|
||||||
|
//context.jamClient.FTUESetMusicInput2($input.id);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$input.iCheck('uncheck').removeAttr('checked');
|
||||||
|
//context.jamClient.FTUEUnsetMusicInput2($input.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function inputPortChanged() {
|
||||||
|
if(iCheckIgnore) return;
|
||||||
|
|
||||||
|
var $checkbox = $(this);
|
||||||
|
var portId = $checkbox.data('data-id');
|
||||||
|
var inputPortChecked = $checkbox.is(':checked');
|
||||||
|
console.log('inputPortChecked: ' + inputPortChecked);
|
||||||
|
|
||||||
|
if(inputPortChecked) {
|
||||||
|
if(isNewlySelectedPair($checkbox)) {
|
||||||
|
setCheckedForAllInPair($inputPorts, $checkbox.data('pair'), true, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//context.jamClient.FTUESetMusicInput2($input.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// context.jamClient.FTUEUnsetMusicInput2($input.id);;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// should be called in a ifChanged callback if you want to cancel. bleh.
|
||||||
|
function cancelICheckChange($checkbox) {
|
||||||
|
iCheckIgnore = true;
|
||||||
|
var checked = $checkbox.is(':checked');
|
||||||
|
setTimeout(function() {
|
||||||
|
if(checked) $checkbox.iCheck('uncheck').removeAttr('checked');
|
||||||
|
else $checkbox.iCheck('check').attr('checked', 'checked');
|
||||||
|
iCheckIgnore = false;
|
||||||
|
}, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function outputPortChanged() {
|
||||||
|
if(iCheckIgnore) return;
|
||||||
|
|
||||||
|
var $checkbox = $(this);
|
||||||
|
var portId = $checkbox.data('data-id');
|
||||||
|
var outputPortChecked = $checkbox.is(':checked');
|
||||||
|
console.log('outputPortChecked: ' + outputPortChecked);
|
||||||
|
|
||||||
|
if(outputPortChecked) {
|
||||||
|
var $selectedInputs = $outputPorts.find('input[type="checkbox"]:checked').filter('[data-id="' + portId + '"]');
|
||||||
|
$selectedInputs.iCheck('uncheck').removeAttr('checked');
|
||||||
|
var pairInfo = $checkbox.data('pair');
|
||||||
|
setCheckedForAllInPair($outputPorts, pairInfo, true, false);
|
||||||
|
console.log("Setting music output");
|
||||||
|
context.jamClient.FTUESetMusicOutput(pairInfo.ports.map(function(i) {return i.id}).join(PROFILE_DEV_SEP_TOKEN));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
context.JK.Banner.showAlert('You must have at least one output pair selected.');
|
||||||
|
// can't allow uncheck of last output
|
||||||
|
cancelICheckChange($checkbox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function initializeInputPorts(inputPorts) {
|
||||||
|
context._.each(inputPorts, function(inputPairs) {
|
||||||
|
// there is no guarantee that a pair has two items.
|
||||||
|
context._.each(inputPairs.ports, function(inputInPair) {
|
||||||
|
var inputPort = $(context._.template($templateAudioPort.html(), inputInPair, { variable: 'data' }));
|
||||||
|
var $checkbox = inputPort.find('input');
|
||||||
|
$checkbox.data('pair', inputPairs); // so when it's selected, we can see what other ports, if any, are in the same pair
|
||||||
|
context.JK.checkbox($checkbox);
|
||||||
|
$checkbox.on('ifChanged', inputPortChanged);
|
||||||
|
$inputPorts.append(inputPort);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function initializeOutputPorts(outputPorts) {
|
||||||
|
var first = true;
|
||||||
|
context._.each(outputPorts, function(outputPairs) {
|
||||||
|
context._.each(outputPairs.ports, function(outputInPair) {
|
||||||
|
var outputPort = $(context._.template($templateAudioPort.html(), outputInPair, { variable: 'data' }));
|
||||||
|
var $checkbox = outputPort.find('input');
|
||||||
|
$checkbox.data('pair', outputPairs); // so when it's selected, we can see what other ports, if any, are in the same pair
|
||||||
|
context.JK.checkbox($checkbox);
|
||||||
|
$checkbox.on('ifChanged', outputPortChanged);
|
||||||
|
$outputPorts.append(outputPort);
|
||||||
|
});
|
||||||
|
if(first) {
|
||||||
|
first = false;
|
||||||
|
setCheckedForAllInPair($outputPorts, outputPairs, true, false);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeFormElements() {
|
function initializeFormElements() {
|
||||||
if(!deviceInformation) throw "devices are not initialized";
|
if (!deviceInformation) throw "devices are not initialized";
|
||||||
|
|
||||||
initializeAudioInput();
|
initializeAudioInput();
|
||||||
initializeAudioOutput();
|
initializeAudioOutput();
|
||||||
|
|
@ -225,7 +372,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetScoreReport() {
|
function resetScoreReport() {
|
||||||
$scoreReport.empty();
|
$ioRateScore.empty();
|
||||||
|
$ioVarScore.empty();
|
||||||
|
$latencyScore.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateScoreReport(latencyResult) {
|
function updateScoreReport(latencyResult) {
|
||||||
|
|
@ -233,9 +382,9 @@
|
||||||
var latencyValue = 'N/A';
|
var latencyValue = 'N/A';
|
||||||
var validLatency = false;
|
var validLatency = false;
|
||||||
if (latencyResult && latencyResult.latencyknown) {
|
if (latencyResult && latencyResult.latencyknown) {
|
||||||
var latency = latencyResult.latency;
|
var latencyValue = latencyResult.latency;
|
||||||
latencyValue = Math.round(latencyValue * 100) / 100;
|
latencyValue = Math.round(latencyValue * 100) / 100;
|
||||||
if (latency.latency <= 10) {
|
if (latencyValue <= 10) {
|
||||||
latencyClass = "good";
|
latencyClass = "good";
|
||||||
validLatency = true;
|
validLatency = true;
|
||||||
} else if (latency.latency <= 20) {
|
} else if (latency.latency <= 20) {
|
||||||
|
|
@ -248,57 +397,9 @@
|
||||||
|
|
||||||
validScore = validLatency; // validScore may become based on IO variance too
|
validScore = validLatency; // validScore may become based on IO variance too
|
||||||
|
|
||||||
$scoreReport.html(latencyValue);
|
$latencyScore.html(latencyValue + ' ms');
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadAudioDrivers() {
|
|
||||||
var drivers = context.jamClient.FTUEGetDevices(false);
|
|
||||||
var chatDrivers = jamClient.FTUEGetChatInputs();
|
|
||||||
var optionsHtml = '<option selected="selected" value="">Choose...</option>';
|
|
||||||
var chatOptionsHtml = '<option selected="selected" value="">Choose...</option>';
|
|
||||||
|
|
||||||
|
|
||||||
var driverOptionFunc = function (driverKey, index, list) {
|
|
||||||
if(!drivers[driverKey]) {
|
|
||||||
logger.debug("skipping unknown device:", driverKey)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
optionsHtml += '<option title="' + drivers[driverKey] + '" value="' + driverKey + '">' + drivers[driverKey] + '</option>';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var chatOptionFunc = function (driverKey, index, list) {
|
|
||||||
chatOptionsHtml += '<option value="' + driverKey + '">' + chatDrivers[driverKey]+ '</option>';
|
|
||||||
};
|
|
||||||
|
|
||||||
var selectors = [
|
|
||||||
'[layout-wizard-step="0"] .settings-2-device select',
|
|
||||||
'[layout-wizard-step="2"] .settings-driver select'
|
|
||||||
];
|
|
||||||
|
|
||||||
// handle standard devices
|
|
||||||
var sortedDeviceKeys = context._.keys(drivers).sort();
|
|
||||||
context._.each(sortedDeviceKeys, driverOptionFunc);
|
|
||||||
$.each(selectors, function (index, selector) {
|
|
||||||
var $select = $(selector);
|
|
||||||
$select.empty();
|
|
||||||
$select.html(optionsHtml);
|
|
||||||
context.JK.dropdown($select);
|
|
||||||
});
|
|
||||||
|
|
||||||
selectors = ['[layout-wizard-step="0"] .settings-2-voice select'];
|
|
||||||
var sortedVoiceDeviceKeys = context._.keys(chatDrivers).sort();
|
|
||||||
|
|
||||||
// handle voice inputs
|
|
||||||
context._.each(sortedVoiceDeviceKeys, chatOptionFunc);
|
|
||||||
$.each(selectors, function (index, selector) {
|
|
||||||
var $select = $(selector);
|
|
||||||
$select.empty();
|
|
||||||
$select.html(chatOptionsHtml);
|
|
||||||
context.JK.dropdown($select);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
function audioInputDeviceUnselected() {
|
function audioInputDeviceUnselected() {
|
||||||
validScore = false;
|
validScore = false;
|
||||||
initializeNextButtonState();
|
initializeNextButtonState();
|
||||||
|
|
@ -362,16 +463,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeWatchVideo() {
|
function initializeWatchVideo() {
|
||||||
$watchVideoInput.unbind('click').click(function() {
|
$watchVideoInput.unbind('click').click(function () {
|
||||||
|
|
||||||
var audioDevice = findDevice(selectedAudioInput());
|
var audioDevice = findDevice(selectedAudioInput());
|
||||||
if(!audioDevice) {
|
if (!audioDevice) {
|
||||||
context.JK.Banner.showAlert('You must first choose an Audio Input Device so that we can determine which video to show you.');
|
context.JK.Banner.showAlert('You must first choose an Audio Input Device so that we can determine which video to show you.');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var videoURL = audioDeviceBehavior[audioDevice.type].videoURL;
|
var videoURL = audioDeviceBehavior[audioDevice.type].videoURL;
|
||||||
|
|
||||||
if(videoURL) {
|
if (videoURL) {
|
||||||
$(this).attr('href', videoURL);
|
$(this).attr('href', videoURL);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -383,16 +484,16 @@
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
$watchVideoOutput.unbind('click').click(function() {
|
$watchVideoOutput.unbind('click').click(function () {
|
||||||
|
|
||||||
var audioDevice = findDevice(selectedAudioOutput());
|
var audioDevice = findDevice(selectedAudioOutput());
|
||||||
if(!audioDevice) {
|
if (!audioDevice) {
|
||||||
throw "this button should be hidden";
|
throw "this button should be hidden";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var videoURL = audioDeviceBehavior[audioDevice.type].videoURL;
|
var videoURL = audioDeviceBehavior[audioDevice.type].videoURL;
|
||||||
|
|
||||||
if(videoURL) {
|
if (videoURL) {
|
||||||
$(this).attr('href', videoURL);
|
$(this).attr('href', videoURL);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -406,35 +507,52 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeAudioInputChanged() {
|
function initializeAudioInputChanged() {
|
||||||
$audioInput.unbind('change').change(function(evt) {
|
$audioInput.unbind('change').change(function (evt) {
|
||||||
|
|
||||||
var audioDeviceId = selectedAudioInput();
|
var audioDeviceId = selectedAudioInput();
|
||||||
if(!audioDeviceId) {
|
if (!audioDeviceId) {
|
||||||
audioInputDeviceUnselected();
|
audioInputDeviceUnselected();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var audioDevice = findDevice(selectedAudioInput());
|
var audioDevice = findDevice(selectedAudioInput());
|
||||||
if(!audioDevice) {
|
if (!audioDevice) {
|
||||||
context.JK.alertSupportedNeeded('Unable to find device information for: ' + audioDeviceId);
|
context.JK.alertSupportedNeeded('Unable to find device information for: ' + audioDeviceId);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderScoringStarted();
|
|
||||||
|
|
||||||
jamClient.FTUESetMusicDevice(audioDeviceId);
|
|
||||||
jamClient.FTUESetInputLatency(selectedAudioInput());
|
|
||||||
jamClient.FTUESetOutputLatency(selectedAudioOutput());
|
|
||||||
jamClient.FTUESetFrameSize(selectedFramesize());
|
|
||||||
|
|
||||||
logger.debug("Calling FTUESave(false)");
|
renderScoringStarted();
|
||||||
jamClient.FTUESave(false);
|
|
||||||
|
|
||||||
var latency = jamClient.FTUEGetExpectedLatency();
|
jamClient.FTUESetMusicDevice(audioDeviceId);
|
||||||
console.log("FTUEGetExpectedLatency: %o", latency);
|
|
||||||
|
|
||||||
renderScoringStopped();
|
// enumerate input and output ports
|
||||||
});
|
musicInputPorts = jamClient.FTUEGetMusicInputs2();
|
||||||
|
console.log(JSON.stringify(musicInputPorts));
|
||||||
|
// [{"inputs":[{"id":"i~5~Built-in Microph~0~0","name":"Built-in Microph - Left"},{"id":"i~5~Built-in Microph~1~0","name":"Built-in Microph - Right"}]}]
|
||||||
|
musicOutputPorts = jamClient.FTUEGetMusicOutputs2();
|
||||||
|
console.log(JSON.stringify(musicOutputPorts));
|
||||||
|
// [{"outputs":[{"id":"o~5~Built-in Output~0~0","name":"Built-in Output - Left"},{"id":"o~5~Built-in Output~1~0","name":"Built-in Output - Right"}]}]
|
||||||
|
|
||||||
|
|
||||||
|
initializeInputPorts(musicInputPorts);
|
||||||
|
initializeOutputPorts(musicOutputPorts);
|
||||||
|
|
||||||
|
|
||||||
|
jamClient.FTUESetInputLatency(selectedAudioInput());
|
||||||
|
jamClient.FTUESetOutputLatency(selectedAudioOutput());
|
||||||
|
jamClient.FTUESetFrameSize(selectedFramesize());
|
||||||
|
|
||||||
|
logger.debug("Calling FTUESave(false)");
|
||||||
|
jamClient.FTUESave(false);
|
||||||
|
|
||||||
|
var latency = jamClient.FTUEGetExpectedLatency();
|
||||||
|
console.log("FTUEGetExpectedLatency: %o", latency);
|
||||||
|
|
||||||
|
updateScoreReport(latency);
|
||||||
|
renderScoringStopped();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeAudioOutputChanged() {
|
function initializeAudioOutputChanged() {
|
||||||
|
|
@ -498,7 +616,9 @@
|
||||||
function beforeShowStep($step) {
|
function beforeShowStep($step) {
|
||||||
var stepInfo = STEPS[step];
|
var stepInfo = STEPS[step];
|
||||||
|
|
||||||
if(!stepInfo) {throw "unknown step: " + step;}
|
if (!stepInfo) {
|
||||||
|
throw "unknown step: " + step;
|
||||||
|
}
|
||||||
|
|
||||||
stepInfo.beforeShow.call(self);
|
stepInfo.beforeShow.call(self);
|
||||||
}
|
}
|
||||||
|
|
@ -511,7 +631,7 @@
|
||||||
$currentWizardStep = $nextWizardStep;
|
$currentWizardStep = $nextWizardStep;
|
||||||
|
|
||||||
var $ftueSteps = $(context._.template($templateSteps.html(), {}, { variable: 'data' }));
|
var $ftueSteps = $(context._.template($templateSteps.html(), {}, { variable: 'data' }));
|
||||||
var $activeStep = $ftueSteps.find('.ftue-stepnumber[data-step-number="'+ step +'"]');
|
var $activeStep = $ftueSteps.find('.ftue-stepnumber[data-step-number="' + step + '"]');
|
||||||
$activeStep.addClass('.active');
|
$activeStep.addClass('.active');
|
||||||
$activeStep.next().show(); // show the .ftue-step-title
|
$activeStep.next().show(); // show the .ftue-step-title
|
||||||
$currentWizardStep.find('.ftuesteps').replaceWith($ftueSteps);
|
$currentWizardStep.find('.ftuesteps').replaceWith($ftueSteps);
|
||||||
|
|
@ -528,11 +648,11 @@
|
||||||
var $btnCancel = $ftueButtonsContent.find('.btn-cancel');
|
var $btnCancel = $ftueButtonsContent.find('.btn-cancel');
|
||||||
|
|
||||||
// hide back button if 1st step or last step
|
// hide back button if 1st step or last step
|
||||||
if(step == 0 && step == TOTAL_STEPS - 1) {
|
if (step == 0 && step == TOTAL_STEPS - 1) {
|
||||||
$btnBack.hide();
|
$btnBack.hide();
|
||||||
}
|
}
|
||||||
// hide next button if not on last step
|
// hide next button if not on last step
|
||||||
if (step == TOTAL_STEPS - 1 ) {
|
if (step == TOTAL_STEPS - 1) {
|
||||||
$btnNext.hide();
|
$btnNext.hide();
|
||||||
}
|
}
|
||||||
// hide close if on last step
|
// hide close if on last step
|
||||||
|
|
@ -559,7 +679,7 @@
|
||||||
|
|
||||||
function beforeShow(args) {
|
function beforeShow(args) {
|
||||||
step = args.d1;
|
step = args.d1;
|
||||||
if(!step) step = 0;
|
if (!step) step = 0;
|
||||||
step = parseInt(step);
|
step = parseInt(step);
|
||||||
moveToStep();
|
moveToStep();
|
||||||
}
|
}
|
||||||
|
|
@ -573,14 +693,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function back() {
|
function back() {
|
||||||
if($(this).is('.button-grey')) return;
|
if ($(this).is('.button-grey')) return;
|
||||||
step = step - 1;
|
step = step - 1;
|
||||||
moveToStep();
|
moveToStep();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function next() {
|
function next() {
|
||||||
if($(this).is('.button-grey')) return;
|
if ($(this).is('.button-grey')) return;
|
||||||
|
|
||||||
step = step + 1;
|
step = step + 1;
|
||||||
|
|
||||||
|
|
@ -599,6 +719,7 @@
|
||||||
function route() {
|
function route() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function initialize() {
|
function initialize() {
|
||||||
|
|
||||||
var dialogBindings = { beforeShow: beforeShow, afterShow: afterShow, afterHide: afterHide };
|
var dialogBindings = { beforeShow: beforeShow, afterShow: afterShow, afterHide: afterHide };
|
||||||
|
|
@ -609,6 +730,7 @@
|
||||||
$wizardSteps = $dialog.find('.wizard-step');
|
$wizardSteps = $dialog.find('.wizard-step');
|
||||||
$templateSteps = $('#template-ftuesteps');
|
$templateSteps = $('#template-ftuesteps');
|
||||||
$templateButtons = $('#template-ftue-buttons');
|
$templateButtons = $('#template-ftue-buttons');
|
||||||
|
$templateAudioPort = $('#template-audio-port');
|
||||||
$ftueButtons = $dialog.find('.ftue-buttons');
|
$ftueButtons = $dialog.find('.ftue-buttons');
|
||||||
|
|
||||||
operatingSystem = context.jamClient.GetOSAsString();
|
operatingSystem = context.jamClient.GetOSAsString();
|
||||||
|
|
|
||||||
|
|
@ -184,8 +184,30 @@
|
||||||
width:45%;
|
width:45%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.buffers {
|
||||||
|
.easydropdown-wrapper:nth-of-type(1) {
|
||||||
|
left:5px;
|
||||||
|
}
|
||||||
|
.easydropdown-wrapper:nth-of-type(2) {
|
||||||
|
left:35px;
|
||||||
|
}
|
||||||
|
.easydropdown, .easydropdown-wrapper {
|
||||||
|
width:15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.ftue-box.results {
|
.ftue-box.results {
|
||||||
height: 230px !important;
|
height: 230px !important;
|
||||||
|
padding:0;
|
||||||
|
|
||||||
|
.scoring-section {
|
||||||
|
font-size:15px;
|
||||||
|
@include border_box_sizing;
|
||||||
|
height:64px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.audio-output {
|
.audio-output {
|
||||||
|
|
@ -510,8 +532,8 @@
|
||||||
.subcolumn.third {
|
.subcolumn.third {
|
||||||
right:0px;
|
right:0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-controls {
|
.settings-controls {
|
||||||
|
|
||||||
clear:both;
|
clear:both;
|
||||||
|
|
|
||||||
|
|
@ -558,4 +558,9 @@ hr {
|
||||||
width:100%;
|
width:100%;
|
||||||
height:20px;
|
height:20px;
|
||||||
text-align:center;
|
text-align:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.jam .icheckbox_minimal {
|
||||||
|
display:inline-block;
|
||||||
|
position:relative;
|
||||||
}
|
}
|
||||||
|
|
@ -83,6 +83,15 @@
|
||||||
.wizard-step-column
|
.wizard-step-column
|
||||||
%h2 Test Results
|
%h2 Test Results
|
||||||
.ftue-box.results
|
.ftue-box.results
|
||||||
|
.left.w50.gold-fill.center.white.scoring-section
|
||||||
|
.p5
|
||||||
|
.latency LATENCY
|
||||||
|
%span.latency-score
|
||||||
|
.left.w50.green-fill.center.white.scoring-section
|
||||||
|
.p5
|
||||||
|
.io I/O
|
||||||
|
%span.io-rate-score
|
||||||
|
%span.io-var-score
|
||||||
|
|
||||||
.clearall
|
.clearall
|
||||||
|
|
||||||
|
|
@ -195,5 +204,11 @@
|
||||||
%a.button-orange.btn-next{href:'#'} NEXT
|
%a.button-orange.btn-next{href:'#'} NEXT
|
||||||
%a.button-orange.btn-close{href:'#', 'layout-action' => 'close'} CLOSE
|
%a.button-orange.btn-close{href:'#', 'layout-action' => 'close'} CLOSE
|
||||||
|
|
||||||
|
%script{type: 'text/template', id: 'template-audio-port'}
|
||||||
|
.audio-port
|
||||||
|
%input{ type: 'checkbox', 'data-id' => '{{data.id}}' }
|
||||||
|
%span
|
||||||
|
= '{{data.name}}'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,14 @@
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
||||||
<script>
|
<script>
|
||||||
WebFont.load({
|
if (window.WebFont) {
|
||||||
google: {
|
WebFont.load({
|
||||||
families: ['Raleway:100,200,300,400,500,600,700']
|
google: {
|
||||||
},
|
families: ['Raleway:100,200,300,400,500,600,700']
|
||||||
timeout :5000
|
},
|
||||||
});
|
timeout :5000
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
||||||
<%= stylesheet_link_tag "client/client", media: "all" %>
|
<%= stylesheet_link_tag "client/client", media: "all" %>
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,14 @@
|
||||||
<title><%= full_title(yield(:title)) %></title>
|
<title><%= full_title(yield(:title)) %></title>
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
||||||
<script>
|
<script>
|
||||||
WebFont.load({
|
if (window.WebFont) {
|
||||||
google: {
|
WebFont.load({
|
||||||
families: ['Raleway:100,200,300,400,500,600,700']
|
google: {
|
||||||
},
|
families: ['Raleway:100,200,300,400,500,600,700']
|
||||||
timeout :5000
|
},
|
||||||
});
|
timeout :5000
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,14 @@
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
||||||
<script>
|
<script>
|
||||||
WebFont.load({
|
if(window.WebFont){
|
||||||
google: {
|
WebFont.load({
|
||||||
families: ['Raleway:100,200,300,400,500,600,700']
|
google: {
|
||||||
},
|
families: ['Raleway:100,200,300,400,500,600,700']
|
||||||
timeout :5000
|
},
|
||||||
});
|
timeout :5000
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
||||||
<%= stylesheet_link_tag "landing/landing", media: "all" %>
|
<%= stylesheet_link_tag "landing/landing", media: "all" %>
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,14 @@
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
||||||
<script>
|
<script>
|
||||||
WebFont.load({
|
if (window.WebFont) {
|
||||||
google: {
|
WebFont.load({
|
||||||
families: ['Raleway:100,200,300,400,500,600,700']
|
google: {
|
||||||
},
|
families: ['Raleway:100,200,300,400,500,600,700']
|
||||||
timeout :5000
|
},
|
||||||
});
|
timeout :5000
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
||||||
<%= stylesheet_link_tag "minimal/minimal", media: "all" %>
|
<%= stylesheet_link_tag "minimal/minimal", media: "all" %>
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,14 @@
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
|
||||||
<script>
|
<script>
|
||||||
WebFont.load({
|
if (window.WebFont) {
|
||||||
google: {
|
WebFont.load({
|
||||||
families: ['Raleway:100,200,300,400,500,600,700']
|
google: {
|
||||||
},
|
families: ['Raleway:100,200,300,400,500,600,700']
|
||||||
timeout:5000
|
},
|
||||||
});
|
timeout:5000
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
<!--<link href='http://fonts.googleapis.com/css?family=Raleway:100,200,300,400,500,600,700' rel='stylesheet' type='text/css'>-->
|
||||||
<%= stylesheet_link_tag "web/web", media: "all" %>
|
<%= stylesheet_link_tag "web/web", media: "all" %>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue