* VRFS-3234 - auto-open jamtrack from account screen

This commit is contained in:
Seth Call 2015-05-12 15:45:23 -05:00
parent 9459215a0f
commit fb463d6703
6 changed files with 125 additions and 85 deletions

View File

@ -9,6 +9,7 @@ context.JK.AccountJamTracks = class AccountJamTracks
@logger = context.JK.logger
@screen = null
@userId = context.JK.currentUserId;
@sessionUtils = context.JK.SessionUtils
initialize:() =>
screenBindings =
@ -27,26 +28,34 @@ context.JK.AccountJamTracks = class AccountJamTracks
populateJamTracks:(data) =>
if (data.jamtracks? && data.jamtracks.length > 0)
@screen.find(".no-jamtracks-found").addClass("hidden")
@appendJamTracks context._.template($('#template-account-jamtrack').html(), {jamtracks:data.jamtracks}, { variable: 'data' })
@appendJamTracks(data)
@screen.find('.jamtrack-solo-session').on 'click', @soloSession
@screen.find('.jamtrack-group-session').on 'click', @groupSession
else
@screen.find(".no-jamtracks-found").removeClass("hidden")
appendJamTracks:(template) =>
$('#account-my-jamtracks table tbody').replaceWith template
appendJamTracks:(data) =>
$tbody = $('#account-my-jamtracks table tbody')
$tbody.empty()
for jamTrack in data.jamtracks
$template = $(context._.template($('#template-account-jamtrack').html(), {jamtrack:jamTrack}, { variable: 'data' }))
$template.data('jamTrack', jamTrack)
$tbody.append($template)
soloSession:(e) =>
#context.location="client#/createSession"
jamRow = $(e.target).parents("tr")
@createSession(jamRow.data(), true)
@createSession(jamRow.data(), true, jamRow.data('jamTrack'))
groupSession:(e) =>
#context.location="client#/createSession"
jamRow = $(e.target).parents("tr")
@createSession(jamRow.data(), false)
@createSession(jamRow.data(), false, jamRow.data('jamTrack'))
createSession:(sessionData, solo) =>
createSession:(sessionData, solo, jamTrack) =>
tracks = context.JK.TrackHelpers.getUserTracks(context.jamClient)
if (context.JK.guardAgainstBrowser(@app))
@ -75,6 +84,7 @@ context.JK.AccountJamTracks = class AccountJamTracks
rest.legacyCreateSession(data).done((response) =>
newSessionId = response.id
@sessionUtils.setAutoOpenJamTrack(jamTrack) # so that the session screen will pick this up
context.location = '/client#/session/' + newSessionId
# Re-loading the session settings will cause the form to reset with the right stuff in it.
# This is an extra xhr call, but it keeps things to a single codepath

View File

@ -85,7 +85,7 @@
$tbody.on('click', 'tr', function(e) {
var jamTrack = $(this).data('server-model');
// tell the server we are about to start a recording
// tell the server we are about to open a jamtrack
rest.openJamTrack({id: context.JK.CurrentSessionModel.id(), jam_track_id: jamTrack.id})
.done(function(response) {
$dialog.data('result', {success:true, jamTrack: jamTrack})

View File

@ -305,7 +305,8 @@
window.location="/client#/home"
}
})
.done(function() {logger.debug("user has passed all session guards")
.done(function() {
logger.debug("user has passed all session guards")
promptLeave = true;
var sessionModel = context.JK.CurrentSessionModel;
@ -489,7 +490,25 @@
else {
app.notifyServerError(xhr, 'Unable to Join Session');
}
});
})
.done(function() {
// check if this is a auto-load jamtrack situation (came from account jamtrack screen)
var jamTrack = sessionUtils.grabAutoOpenJamTrack();
if(jamTrack) {
// give the session to settle just a little (call a timeout of 1 second)
setTimeout(function() {
// tell the server we are about to open a jamtrack
rest.openJamTrack({id: context.JK.CurrentSessionModel.id(), jam_track_id: jamTrack.id})
.done(function(response) {
// now actually load the jamtrack
loadJamTrack(jamTrack);
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, "Unable to Open JamTrack For Playback");
})
}, 1000)
}
})
})
}
@ -1276,7 +1295,7 @@
}
function renderJamTracks(jamTrackMixersOrig) {
logger.debug("rendering jam tracks")
logger.debug("rendering jam tracks", jamTrackMixersOrig);
var jamTrackMixers = jamTrackMixersOrig.slice();
var jamTracks = []
@ -2699,69 +2718,7 @@
// once the dialog is closed, see if the user has a jamtrack selected
if(!data.canceled && data.result.jamTrack) {
var jamTrack = data.result.jamTrack;
$('.session-recording-name').text('');
// hide 'other audio' placeholder
otherAudioFilled();
if(downloadJamTrack) {
// if there was one showing before somehow, destroy it.
logger.warn("destroying existing JamTrack")
downloadJamTrack.root.remove();
downloadJamTrack.destroy();
downloadJamTrack = null
}
downloadJamTrack = new context.JK.DownloadJamTrack(app, jamTrack, 'large');
// the widget indicates when it gets to any transition; we can hide it once it reaches completion
$(downloadJamTrack).on(EVENTS.JAMTRACK_DOWNLOADER_STATE_CHANGED, function(e, data) {
if(data.state == downloadJamTrack.states.synchronized) {
logger.debug("jamtrack synchronized; hide widget and show tracks")
downloadJamTrack.root.remove();
downloadJamTrack.destroy();
downloadJamTrack = null;
// XXX: test with this removed; it should be unnecessary
context.jamClient.JamTrackStopPlay();
var sampleRate = context.jamClient.GetSampleRate()
var sampleRateForFilename = sampleRate == 48 ? '48' : '44'
var fqId = jamTrack.id + '-' + sampleRateForFilename
if(jamTrack.jmep)
{
logger.debug("setting jmep data")
context.jamClient.JamTrackLoadJmep(fqId, jamTrack.jmep)
}
else {
logger.debug("no jmep data for jamtrack")
}
// JamTrackPlay means 'load'
var result = context.jamClient.JamTrackPlay(fqId);
if(!result) {
app.notify(
{ title: "JamTrack Can Not Open",
text: "Unable to open your JamTrack. Please contact support@jamkazam.com"
}, null, true);
} else {
playJamTrack(jamTrack.id);
}
}
})
// show it on the page
$otherAudioContainer.append(downloadJamTrack.root)
// kick off the download JamTrack process
downloadJamTrack.init()
loadJamTrack(data.result.jamTrack);
}
else {
logger.debug("OpenJamTrack dialog closed with no selection; ignoring", data)
@ -2771,6 +2728,69 @@
return false;
}
function loadJamTrack(jamTrack) {
$('.session-recording-name').text('');
// hide 'other audio' placeholder
otherAudioFilled();
if(downloadJamTrack) {
// if there was one showing before somehow, destroy it.
logger.warn("destroying existing JamTrack")
downloadJamTrack.root.remove();
downloadJamTrack.destroy();
downloadJamTrack = null
}
downloadJamTrack = new context.JK.DownloadJamTrack(app, jamTrack, 'large');
// the widget indicates when it gets to any transition; we can hide it once it reaches completion
$(downloadJamTrack).on(EVENTS.JAMTRACK_DOWNLOADER_STATE_CHANGED, function(e, data) {
if(data.state == downloadJamTrack.states.synchronized) {
logger.debug("jamtrack synchronized; hide widget and show tracks")
downloadJamTrack.root.remove();
downloadJamTrack.destroy();
downloadJamTrack = null;
// XXX: test with this removed; it should be unnecessary
context.jamClient.JamTrackStopPlay();
var sampleRate = context.jamClient.GetSampleRate()
var sampleRateForFilename = sampleRate == 48 ? '48' : '44'
var fqId = jamTrack.id + '-' + sampleRateForFilename
if(jamTrack.jmep)
{
logger.debug("setting jmep data")
context.jamClient.JamTrackLoadJmep(fqId, jamTrack.jmep)
}
else {
logger.debug("no jmep data for jamtrack")
}
// JamTrackPlay means 'load'
var result = context.jamClient.JamTrackPlay(fqId);
if(!result) {
app.notify(
{ title: "JamTrack Can Not Open",
text: "Unable to open your JamTrack. Please contact support@jamkazam.com"
}, null, true);
} else {
playJamTrack(jamTrack.id);
}
}
})
// show it on the page
$otherAudioContainer.append(downloadJamTrack.root)
// kick off the download JamTrack process
downloadJamTrack.init()
}
function playJamTrack(jamTrackId) {
var participantCnt=sessionModel.participants().length
rest.playJamTrack(jamTrackId)

View File

@ -10,6 +10,7 @@
var rest = new context.JK.Rest();
context.JK.SessionUtils = sessionUtils;
var logger = context.JK.logger;
var autoOpenJamTrack = null;
var LATENCY = sessionUtils.LATENCY = {
ME : {description: "ME", style: "latency-me", min: -1, max: -1},
@ -20,6 +21,18 @@
UNKNOWN: {description: "UNKNOWN", style: "latency-unknown", min: -2, max: -2}
};
sessionUtils.setAutoOpenJamTrack = function(jamTrack) {
logger.debug("setting auto-load jamtrack")
autoOpenJamTrack = jamTrack;
}
// one shot!
sessionUtils.grabAutoOpenJamTrack = function() {
var jamTrack = autoOpenJamTrack;
autoOpenJamTrack = null;
return jamTrack;
}
sessionUtils.createOpenSlot = function($openSlotsTemplate, slot, openSlotCount, currentSlotIndex) {
var inst = context.JK.getInstrumentIcon24(slot.instrument_id);

View File

@ -124,7 +124,7 @@
</div>
<div class="right">
<a id="account-my-jamtracks-link" href="#" class="button-orange">UPDATE</a>
<a id="account-my-jamtracks-link" href="#" class="button-orange">VIEW</a>
</div>
<br clear="all" />

View File

@ -31,14 +31,11 @@
a.button-grey href="javascript:history.go(-1)" BACK
script#template-account-jamtrack type='text/template'
tbody
= "{% _.each(data.jamtracks, function(jamtrack) { %}"
tr data-id="{{jamtrack.id}}" data-genre="{{jamtrack.genre}}"
td
| {{jamtrack.name}}
td
| {{jamtrack.original_artist}}
td
.table-link: a.jamtrack-solo-session href= '#' jamtrack-id="{{jamtrack.id}}" Get into solo session
.table-link: a.jamtrack-group-session href= '#' jamtrack-id="{{jamtrack.id}}" Get into session others can join
= "{% }); %}"
tr data-id="{{data.jamtrack.id}}" data-genre="{{data.jamtrack.genre}}"
td
| {{data.jamtrack.name}}
td
| {{data.jamtrack.original_artist}}
td
.table-link: a.jamtrack-solo-session href= '#' jamtrack-id="{{data.jamtrack.id}}" Get into solo session
.table-link: a.jamtrack-group-session href= '#' jamtrack-id="{{data.jamtrack.id}}" Get into session others can join