VRFS-552. Support multiple tracks for user on same client.

This commit is contained in:
Jonathon Wilson 2013-09-04 22:24:28 -06:00
parent 5347141510
commit 91f6dcc3ab
1 changed files with 23 additions and 13 deletions

View File

@ -135,7 +135,7 @@
.fail(function(xhr, textStatus, errorMessage) {
if(xhr.status == 404) {
// we tried to join the session, but it's already gone. kick user back to join session screen
window.location = "#/findSession"
context.window.location = "#/findSession";
app.notify(
{ title: "Unable to Join Session",
text: "The session you attempted to join is over."
@ -144,14 +144,14 @@
}else {
app.ajaxError(xhr, textStatus, errorMessage);
}
})
});
}
function beforeHide(data) {
// track that the screen is inactive, to disable body-level handlers
screenActive = false;
sessionModel.leaveCurrentSession()
.fail(app.ajaxError)
.fail(app.ajaxError);
}
function sessionChanged() {
@ -214,14 +214,16 @@
// TODO FIXME - This needs to support multiple tracks for an individual
// client id and group.
function _mixerForClientId(clientId, groupIds) {
function _mixerForClientId(clientId, groupIds, usedMixers) {
var foundMixer = null;
$.each(mixers, function(index, mixer) {
if (mixer.client_id === clientId) {
for (var i=0; i<groupIds.length; i++) {
if (mixer.group_id === groupIds[i]) {
foundMixer = mixer;
return false;
if (!(mixer.id in usedMixers)) {
foundMixer = mixer;
return false;
}
}
}
}
@ -345,6 +347,8 @@
name = participant.user.first_name + ' ' + participant.user.last_name;
}
var usedMixers = {}; // Once we use a mixer, we add it here to allow us to find 'second' tracks
// loop through all tracks for each participant
$.each(participant.tracks, function(index, track) {
var instrumentIcon = context.JK.getInstrumentIcon45(track.instrument_id);
@ -376,8 +380,10 @@
[
ChannelGroupIds.AudioInputMusicGroup,
ChannelGroupIds.PeerAudioInputMusicGroup
]);
],
usedMixers);
if (mixer) {
usedMixers[mixer.id] = true;
myTrack = (mixer.group_id === ChannelGroupIds.AudioInputMusicGroup);
var gainPercent = percentFromMixerValue(
mixer.range_low, mixer.range_high, mixer.volume_left);
@ -389,7 +395,7 @@
trackData.muteClass = muteClass;
trackData.mixerId = mixer.id;
} else { // No mixer to match, yet
lookingForMixers[participant.client_id] = true;
lookingForMixers[track.id] = participant.client_id;
if (!(lookingForMixersTimer)) {
lookingForMixersTimer = context.setInterval(lookForMixers, 500);
}
@ -433,7 +439,7 @@
var vuLeftSelector = trackSelector + " .track-vu-left";
var vuRightSelector = trackSelector + " .track-vu-right";
var faderSelector = trackSelector + " .track-gain";
var $track = $('div.track[client-id="' + clientId + '"]');
var $track = $(trackSelector);
// Set mixer-id attributes and render VU/Fader
context.JK.VuHelpers.renderVU(vuLeftSelector, vuOpts);
$track.find('.track-vu-left').attr('mixer-id', mixerId + '_vul');
@ -452,19 +458,23 @@
function lookForMixers() {
lookingForMixersCount++;
_updateMixers();
var usedMixers = {};
var keysToDelete = [];
for (var key in lookingForMixers) {
var clientId = lookingForMixers[key];
var mixer = _mixerForClientId(
key,
clientId,
[
ChannelGroupIds.AudioInputMusicGroup,
ChannelGroupIds.PeerAudioInputMusicGroup
]);
],
usedMixers);
if (mixer) {
usedMixers[mixer.id] = true;
keysToDelete.push(key);
var gainPercent = percentFromMixerValue(
mixer.range_low, mixer.range_high, mixer.volume_left);
var trackSelector = 'div.track[client-id="' + key + '"]';
var trackSelector = 'div.track[track-id="' + key + '"]';
connectTrackToMixer(trackSelector, key, mixer.id, gainPercent);
var $track = $('div.track[client-id="' + key + '"]');
$track.find('.track-icon-mute').attr('mixer-id', mixer.id);
@ -528,7 +538,7 @@
$destination.append(newTrack);
// Render VU meters and gain fader
var trackSelector = parentSelector + ' .session-track[client-id="' + trackData.clientId + '"]';
var trackSelector = parentSelector + ' .session-track[track-id="' + trackData.trackId + '"]';
var gainPercent = trackData.gainPercent || 0;
connectTrackToMixer(trackSelector, trackData.clientId, trackData.mixerId, gainPercent);