diff --git a/web/app/assets/javascripts/accounts_jamtracks.js.coffee b/web/app/assets/javascripts/accounts_jamtracks.js.coffee index f7bdef10f..74706efe1 100644 --- a/web/app/assets/javascripts/accounts_jamtracks.js.coffee +++ b/web/app/assets/javascripts/accounts_jamtracks.js.coffee @@ -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 diff --git a/web/app/assets/javascripts/dialog/openJamTrackDialog.js b/web/app/assets/javascripts/dialog/openJamTrackDialog.js index 8843838f5..b3df383e9 100644 --- a/web/app/assets/javascripts/dialog/openJamTrackDialog.js +++ b/web/app/assets/javascripts/dialog/openJamTrackDialog.js @@ -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}) diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index adcbfbc07..feaed19de 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -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) diff --git a/web/app/assets/javascripts/session_utils.js b/web/app/assets/javascripts/session_utils.js index a7eefa791..9d54f2493 100644 --- a/web/app/assets/javascripts/session_utils.js +++ b/web/app/assets/javascripts/session_utils.js @@ -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); diff --git a/web/app/views/clients/_account.html.erb b/web/app/views/clients/_account.html.erb index 12089c9f2..af5e85f10 100644 --- a/web/app/views/clients/_account.html.erb +++ b/web/app/views/clients/_account.html.erb @@ -124,7 +124,7 @@
- UPDATE + VIEW

diff --git a/web/app/views/clients/_account_jamtracks.html.slim b/web/app/views/clients/_account_jamtracks.html.slim index 3ae1a39d0..341cfb4a4 100644 --- a/web/app/views/clients/_account_jamtracks.html.slim +++ b/web/app/views/clients/_account_jamtracks.html.slim @@ -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