jam-cloud/web/app/assets/javascripts/addTrack.js

247 lines
8.8 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.AddTrackDialog = function(app, myTracks, sessionId, sessionModel) {
var logger = context.JK.logger;
var ASSIGNMENT = {
CHAT: -2,
OUTPUT: -1,
UNASSIGNED: 0,
TRACK1: 1,
TRACK2: 2
};
var instrument_array = [];
// dialog variables
// dialog variables
var inputUnassignedList = [];
var track2AudioInputChannels = [];
function events() {
// Track 2 Add
$('#img-add-track2-input-add').unbind("click");
$('#img-add-track2-input-add').click(function() {
$('#add-track2-unused > option:selected').remove().appendTo('#add-track2-input');
});
// Track 2 Remove
$('#img-add-track2-input-remove').unbind("click");
$('#img-add-track2-input-remove').click(function() {
$('#add-track2-input > option:selected').remove().appendTo('#add-track2-unused');
});
$('#btn-cancel-new-audio').click(context.JK.showOverlay);
$('#btn-error-ok').click(context.JK.showOverlay);
// $('#btn-cancel-new-audio').click(function() {
// app.layout.closeDialog('add-new-audio-gear');
// });
// $('#btn-error-ok').click(function() {
// app.layout.closeDialog('error-dialog');
// });
$('#btn-add-track').unbind("click");
$('#btn-add-track').click(saveSettings);
}
function showDialog() {
$('#add-track2-unused').empty();
$('#add-track2-input').empty();
$('#add-track2-instrument').empty();
initDialogData();
// load Unused Inputs
context.JK.loadOptions($('#template-option').html(), $('#add-track2-unused'), inputUnassignedList, "id", "name", -1);
// load Track 2 Input(s)
context.JK.loadOptions($('#template-option').html(), $('#add-track2-input'), track2AudioInputChannels, "id", "name", -1);
// load Track 2 Instrument
context.JK.loadOptions($('#template-option').html(), $('#add-track2-instrument'), instrument_array, "id", "description", -1);
}
function initDialogData() {
// set arrays
inputUnassignedList = _loadList(ASSIGNMENT.UNASSIGNED, true, false);
track2AudioInputChannels = _loadList(ASSIGNMENT.TRACK2, true, false);
}
function _loadList(assignment, input, chat) {
var list = [];
// get data needed for listboxes
var channels = context.jamClient.TrackGetChannels();
var musicDevices = context.jamClient.TrackGetMusicDeviceNames(input);
// SEE loadList function in TrackAssignGui.cpp of client code
$.each(channels, function(index, val) {
if (input !== val.input) {
return;
}
var currAssignment = context.jamClient.TrackGetAssignment(val.id, val.input);
if (assignment !== currAssignment) {
return;
}
logger.debug("channel id=" + val.id + ", channel input=" + val.input + ", channel assignment=" + currAssignment +
", channel name=" + val.name + ", channel type=" + val.device_type + ", chat=" + val.chat);
var os = context.jamClient.GetOSAsString();
if (os === context.JK.OS.WIN32) {
if (chat && ($.inArray(val.device_id, musicDevices) > -1 || context.jamClient.TrackIsMusicDeviceType(val.device_type))) {
return;
}
}
else {
if (chat && ($.inArray(val.device_id, musicDevices) > -1 || !context.jamClient.TrackIsMusicDeviceType(val.device_type))) {
return;
}
}
if (!chat && $.inArray(val.device_id, musicDevices) === -1) {
return;
}
if ((chat && !val.chat) || (!chat && val.chat)) {
return;
}
list.push(val);
});
return list;
}
function saveSettings() {
if (!context.JK.verifyNotRecordingForTrackChange(app)) {
return;
}
if (!validateSettings()) {
return;
}
saveTrack();
app.layout.closeDialog('add-track');
}
function saveTrack() {
// TRACK 2 INPUTS
var trackId = null;
$("#add-track2-input > option").each(function() {
logger.debug("Saving track 2 input = " + this.value);
trackId = this.value;
context.jamClient.TrackSetAssignment(this.value, true, ASSIGNMENT.TRACK2);
});
// TRACK 2 INSTRUMENT
var instrumentVal = $('#add-track2-instrument').val();
var instrumentText = $('#add-track2-instrument > option:selected').text().toLowerCase();
logger.debug("Saving track 2 instrument = " + instrumentVal);
context.jamClient.TrackSetInstrument(ASSIGNMENT.TRACK2, instrumentVal);
// UPDATE SERVER
logger.debug("Adding track with instrument " + instrumentText);
var data = {};
context.jamClient.TrackSaveAssignments();
/**
setTimeout(function() {
var inputTracks = context.JK.TrackHelpers.getTracks(context.jamClient, 2);
// this is some ugly logic coming up, here's why:
// we need the id (guid) that the backend generated for the new track we just added
// to get it, we need to make sure 2 tracks come back, and then grab the track that
// is not the one we just added.
if(inputTracks.length != 2) {
var msg = "because we just added a track, there should be 2 available, but we found: " + inputTracks.length;
logger.error(msg);
alert(msg);
throw new Error(msg);
}
var client_track_id = null;
$.each(inputTracks, function(index, track) {
console.log("track: %o, myTrack: %o", track, myTracks[0]);
if(track.id != myTracks[0].id) {
client_track_id = track.id;
return false;
}
});
if(client_track_id == null)
{
var msg = "unable to find matching backend track for id: " + this.value;
logger.error(msg);
alert(msg);
throw new Error(msg);
}
// use the first track's connection_id (not sure why we need this on the track data model)
data.connection_id = myTracks[0].connection_id;
data.instrument_id = instrumentText;
data.sound = "stereo";
data.client_track_id = client_track_id;
sessionModel.addTrack(sessionId, data);
}, 1000);
*/
}
function validateSettings() {
var isValid = true;
var noTrackErrMsg = 'You must assign at least one input port to each of your tracks. Please update your settings to correct this. If you want to delete a track, please return to the session screen and delete the track by clicking the "x" box in the upper right-hand corner of the track.';
var noInstrumentErrMsg = 'You must specify what instrument is being played for this new track. Please update your settings to correct this.';
var errMsg;
// verify Input and Instrument exist
if ($('#add-track2-input > option').size() === 0 || $('#add-track2-input > option').size() > 2) {
errMsg = noTrackErrMsg;
isValid = false;
}
if (isValid && $('#add-track2-instrument > option:selected').length === 0) {
errMsg = noInstrumentErrMsg;
isValid = false;
}
if (!isValid) {
context.JK.showErrorDialog(app, errMsg, "invalid settings");
}
return isValid;
}
// TODO: repeated in configureTrack.js
function _init() {
// load instrument array for populating listboxes, using client_id in instrument_map as ID
instrument_array = context.JK.listInstruments();
}
this.initialize = function() {
events();
_init();
};
this.showDialog = showDialog;
return this;
};
})(window,jQuery);