From 3697ca9743d6bf1a6909b45337e45a3d22777a31 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 1 May 2015 16:30:03 -0500 Subject: [PATCH 01/72] * VRFS-3141 - disable close button for JamTrack for non-opener --- web/app/assets/javascripts/session.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 7e5fb689b..2c665aa53 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -2954,13 +2954,18 @@ } function closeJamTrack() { - logger.debug("closing recording"); + logger.debug("closing jam track"); if (sessionModel.recordingModel.isRecording()) { logger.debug("can't close jamtrack while recording") return false; } + if(!sessionModel.selfOpenedJamTracks()) { + logger.debug("can't close jamtrack if not the opener") + return false; + } + if(downloadJamTrack) { logger.debug("closing DownloadJamTrack widget") downloadJamTrack.root.remove(); From 32f0967b2ac5d314595b7d34e05979241344e89a Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 1 May 2015 16:34:56 -0500 Subject: [PATCH 02/72] * VRFS-3141 - tell user why they can't close JamTrack --- web/app/assets/javascripts/session.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 2c665aa53..79613f7ba 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -2958,11 +2958,13 @@ if (sessionModel.recordingModel.isRecording()) { logger.debug("can't close jamtrack while recording") + app.notify({title: 'Can Not Close JamTrack', text: 'A JamTrack can not be closed while recording.'}) return false; } if(!sessionModel.selfOpenedJamTracks()) { logger.debug("can't close jamtrack if not the opener") + app.notify({title: 'Can Not Close JamTrack', text: 'Only the person who opened the JamTrack can close it.'}) return false; } From f1c96c153174bafe50b0a7ce4016086a80d81d53 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Sun, 3 May 2015 21:28:17 -0500 Subject: [PATCH 03/72] * feature/VRFS-3146 --- web/app/assets/javascripts/backend_alerts.js | 5 ++++- web/app/assets/javascripts/playbackControls.js | 14 ++++++++++++++ web/app/assets/javascripts/session.js | 14 ++++++++++++++ web/app/assets/javascripts/sessionModel.js | 9 +++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/web/app/assets/javascripts/backend_alerts.js b/web/app/assets/javascripts/backend_alerts.js index b2ef4b7cf..5284f0281 100644 --- a/web/app/assets/javascripts/backend_alerts.js +++ b/web/app/assets/javascripts/backend_alerts.js @@ -72,7 +72,6 @@ var alertData = $.extend({}, ALERT_TYPES[type]); alertData.text = text; - if(alertData) { $document.triggerHandler(alertData.name, alertData); } @@ -121,6 +120,10 @@ if(context.JK.CurrentSessionModel) context.JK.CurrentSessionModel.onBroadcastStopped(type, text); } + else if(type === ALERT_NAMES.RECORD_PLAYBACK_STATE) { + if(context.JK.CurrentSessionModel) + context.JK.CurrentSessionModel.onPlaybackStateChange(type, text); + } else if((!context.JK.CurrentSessionModel || !context.JK.CurrentSessionModel.inSession()) && (ALERT_NAMES.INPUT_IO_RATE == type || ALERT_NAMES.INPUT_IO_JTR == type || ALERT_NAMES.OUTPUT_IO_RATE == type || ALERT_NAMES.OUTPUT_IO_JTR== type)) { // squelch these events if not in session diff --git a/web/app/assets/javascripts/playbackControls.js b/web/app/assets/javascripts/playbackControls.js index 1634150c1..aa83cfc95 100644 --- a/web/app/assets/javascripts/playbackControls.js +++ b/web/app/assets/javascripts/playbackControls.js @@ -385,11 +385,25 @@ } } + function onPlayStartEvent() { + playbackPlaying = true; + } + + function onPlayStopEvent() { + playbackPlaying = false; + } + + function onPlayPauseEvent() { + playbackPlaying = false; + } this.update = update; this.setPlaybackMode = setPlaybackMode; this.startMonitor = startMonitor; this.stopMonitor = stopMonitor; + this.onPlayStopEvent = onPlayStopEvent; + this.onPlayStartEvent = onPlayStartEvent; + this.onPlayPauseEvent = onPlayPauseEvent; return this; } diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 79613f7ba..d7acfaaa4 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -3305,6 +3305,20 @@ promptLeave = _promptLeave; } + this.onPlaybackStateChange = function(change_type){ + // if it's play_stop or play_start, poke the playControls + + if(change_type == 'play_start') { + playbackControls.onPlayStartEvent(); + } + else if(change_type == 'play_stop'){ + playbackControls.onPlayStopEvent(); + } + else if(change_type == 'play_pause'){ + playbackControls.onPlayPauseEvent(); + } + } + context.JK.HandleVolumeChangeCallback = handleVolumeChangeCallback; context.JK.HandleMetronomeCallback = handleMetronomeCallback; context.JK.HandleBridgeCallback = handleBridgeCallback; diff --git a/web/app/assets/javascripts/sessionModel.js b/web/app/assets/javascripts/sessionModel.js index ceb4b70b6..b2f501ff2 100644 --- a/web/app/assets/javascripts/sessionModel.js +++ b/web/app/assets/javascripts/sessionModel.js @@ -799,6 +799,14 @@ } } + function onPlaybackStateChange(type, text) { + + // if text is play_start or play_stop, tell the play_controls + + if(sessionScreen) { + sessionScreen.onPlaybackStateChange(text); + } + } function onBackendMixerChanged(type, text) { logger.debug("BACKEND_MIXER_CHANGE alert. reason:" + text); @@ -909,6 +917,7 @@ this.onBroadcastStopped = onBroadcastStopped; this.onBroadcastSuccess = onBroadcastSuccess; this.onBroadcastFailure = onBroadcastFailure; + this.onPlaybackStateChange = onPlaybackStateChange; this.getCurrentSession = function() { return currentSession; From d5b12eacfad6d213ea5948c2b3f7d1495c43ce46 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Sun, 3 May 2015 21:40:04 -0500 Subject: [PATCH 04/72] * VRFS-3161 - don't use floats for one-liner; use white-space:no-wrap --- .../assets/stylesheets/client/createSession.css.scss | 12 +++++++++++- web/app/views/clients/_scheduledSession.html.erb | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/web/app/assets/stylesheets/client/createSession.css.scss b/web/app/assets/stylesheets/client/createSession.css.scss index 55376f41b..d324aca04 100644 --- a/web/app/assets/stylesheets/client/createSession.css.scss +++ b/web/app/assets/stylesheets/client/createSession.css.scss @@ -234,8 +234,18 @@ margin-left:10px; } - .instrument-rsvp-row { + .rsvp-instrument-info-holder { + display:inline-block; + margin-bottom:5px; + } + .rsvp-info-holder { + min-width:140px; + display:inline-block; + margin-bottom:5px; + } + .instrument-rsvp-row { + white-space:nowrap; } .plus-checkbox { diff --git a/web/app/views/clients/_scheduledSession.html.erb b/web/app/views/clients/_scheduledSession.html.erb index 04a0e2055..74bc60deb 100644 --- a/web/app/views/clients/_scheduledSession.html.erb +++ b/web/app/views/clients/_scheduledSession.html.erb @@ -492,13 +492,13 @@ \ No newline at end of file From 831fdf8c8e774e8ba427c48280c14b7b41d15fce Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 12 May 2015 11:55:55 -0500 Subject: [PATCH 66/72] * add https to artifact update --- ruby/lib/jam_ruby/models/artifact_update.rb | 2 +- web/app/assets/javascripts/checkout_complete.js | 0 web/app/views/clients/_checkout_complete.html.slim | 0 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 web/app/assets/javascripts/checkout_complete.js create mode 100644 web/app/views/clients/_checkout_complete.html.slim diff --git a/ruby/lib/jam_ruby/models/artifact_update.rb b/ruby/lib/jam_ruby/models/artifact_update.rb index d79d854d9..9b671df91 100644 --- a/ruby/lib/jam_ruby/models/artifact_update.rb +++ b/ruby/lib/jam_ruby/models/artifact_update.rb @@ -44,7 +44,7 @@ module JamRuby # this is basically a dev-time only path of code; we store real artifacts in s3 url = APP_CONFIG.jam_admin_root_url + self.uri.url else - url = "http://#{APP_CONFIG.cloudfront_host}/#{self.uri.store_dir}/#{self[:uri]}" + url = "https://#{APP_CONFIG.cloudfront_host}/#{self.uri.store_dir}/#{self[:uri]}" #url = self.uri.url.gsub(APP_CONFIG.aws_fullhost, APP_CONFIG.cloudfront_host) end diff --git a/web/app/assets/javascripts/checkout_complete.js b/web/app/assets/javascripts/checkout_complete.js new file mode 100644 index 000000000..e69de29bb diff --git a/web/app/views/clients/_checkout_complete.html.slim b/web/app/views/clients/_checkout_complete.html.slim new file mode 100644 index 000000000..e69de29bb From 2723cd8a78f31dd8c87fb8b71f132bf3ffe3f8de Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 12 May 2015 14:14:44 -0500 Subject: [PATCH 67/72] * VRFS-3215 - add checkoutComplete URL --- .../assets/javascripts/checkout_complete.js | 215 ++++++++++++++++++ web/app/assets/javascripts/checkout_order.js | 113 +-------- .../javascripts/checkout_utils.js.coffee | 7 + .../stylesheets/client/checkout.css.scss | 75 ------ .../client/checkout_complete.css.scss | 116 ++++++++++ web/app/assets/stylesheets/client/client.css | 1 + .../clients/_checkout_complete.html.slim | 44 ++++ .../views/clients/_checkout_order.html.slim | 19 -- web/app/views/clients/index.html.erb | 5 +- web/app/views/shared/_ad_sense.html.erb | 4 +- web/config/application.rb | 1 + web/spec/features/checkout_spec.rb | 6 +- 12 files changed, 399 insertions(+), 207 deletions(-) create mode 100644 web/app/assets/stylesheets/client/checkout_complete.css.scss diff --git a/web/app/assets/javascripts/checkout_complete.js b/web/app/assets/javascripts/checkout_complete.js index e69de29bb..4f1e96110 100644 --- a/web/app/assets/javascripts/checkout_complete.js +++ b/web/app/assets/javascripts/checkout_complete.js @@ -0,0 +1,215 @@ +(function (context, $) { + + "use strict"; + context.JK = context.JK || {}; + context.JK.CheckoutCompleteScreen = function (app) { + + var EVENTS = context.JK.EVENTS; + var logger = context.JK.logger; + var rest = context.JK.Rest(); + var jamTrackUtils = context.JK.JamTrackUtils; + var checkoutUtils = context.JK.CheckoutUtilsInstance; + + var $screen = null; + var $navigation = null; + var $templatePurchasedJamTrack = null; + var $thanksPanel = null; + var $jamTrackInBrowser = null; + var $purchasedJamTrack = null; + var $purchasedJamTrackHeader = null; + var $purchasedJamTracks = null; + var userDetail = null; + var step = null; + var downloadJamTracks = []; + var purchasedJamTracks = null; + var purchasedJamTrackIterator = 0; + var $backBtn = null; + var $downloadApplicationLink = null; + var $noPurchasesPrompt = null; + + + function beforeShow() { + + } + + + function afterShow(data) { + prepThanks() + } + + + function beforeHide() { + if(downloadJamTracks) { + context._.each(downloadJamTracks, function(downloadJamTrack) { + downloadJamTrack.destroy(); + downloadJamTrack.root.remove(); + }) + + downloadJamTracks = []; + } + purchasedJamTracks = null; + purchasedJamTrackIterator = 0; + } + + function prepThanks() { + $noPurchasesPrompt.addClass('hidden') + $purchasedJamTracks.empty() + $thanksPanel.addClass("hidden") + $purchasedJamTrackHeader.attr('status', 'in-progress') + step = 3; + renderNavigation(); + showThanks(); + } + + + function showThanks(purchaseResponse) { + + + var purchaseResponse = checkoutUtils.getLastPurchase(); + + if(!purchaseResponse || purchaseResponse.length == 0) { + // user got to this page with no context + logger.debug("no purchases found; nothing to show") + $noPurchasesPrompt.removeClass('hidden') + } + else { + $thanksPanel.removeClass('hidden') + handleJamTracksPurchased(purchaseResponse.jam_tracks) + } + } + + function handleJamTracksPurchased(jamTracks) { + // were any JamTracks purchased? + var jamTracksPurchased = jamTracks && jamTracks.length > 0; + if(jamTracksPurchased) { + if(gon.isNativeClient) { + startDownloadJamTracks(jamTracks) + } + else { + $jamTrackInBrowser.removeClass('hidden'); + app.user().done(function(user) { + if(!user.first_downloaded_client_at) { + $downloadApplicationLink.removeClass('hidden') + } + }) + } + } + } + + function startDownloadJamTracks(jamTracks) { + // there can be multiple purchased JamTracks, so we cycle through them + + purchasedJamTracks = jamTracks; + + // populate list of jamtracks purchased, that we will iterate through graphically + context._.each(jamTracks, function(jamTrack) { + var downloadJamTrack = new context.JK.DownloadJamTrack(app, jamTrack, 'small'); + var $purchasedJamTrack = $(context._.template( + $templatePurchasedJamTrack.html(), + jamTrack, + {variable: 'data'} + )); + + $purchasedJamTracks.append($purchasedJamTrack) + + // show it on the page + $purchasedJamTrack.append(downloadJamTrack.root) + + downloadJamTracks.push(downloadJamTrack) + }) + + iteratePurchasedJamTracks(); + } + + function iteratePurchasedJamTracks() { + if(purchasedJamTrackIterator < purchasedJamTracks.length ) { + var downloadJamTrack = downloadJamTracks[purchasedJamTrackIterator++]; + + // make sure the 'purchasing JamTrack' section can be seen + $purchasedJamTrack.removeClass('hidden'); + + // 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 " + downloadJamTrack.jamTrack.name + " synchronized;") + //downloadJamTrack.root.remove(); + downloadJamTrack.destroy(); + + // go to the next JamTrack + iteratePurchasedJamTracks() + } + }) + + logger.debug("jamtrack " + downloadJamTrack.jamTrack.name + " downloader initializing") + + // kick off the download JamTrack process + downloadJamTrack.init() + + // XXX style-test code + // downloadJamTrack.transitionError("package-error", "The server failed to create your package.") + + } + else { + logger.debug("done iterating over purchased JamTracks") + $purchasedJamTrackHeader.attr('status', 'done') + } + } + + function clearOrderPage() { + $orderContent.empty(); + } + + function renderNavigation() { + $navigation.html(""); + var navigationHtml = $( + context._.template( + $('#template-checkout-navigation').html(), + {current: step, purchases_disable_class: gon.global.purchases_enabled ? 'hidden' : ''}, + {variable: 'data'} + ) + ); + + $navigation.append(navigationHtml); + } + + function events() { + $backBtn.on('click', function(e) { + e.preventDefault(); + + context.location = '/client#/checkoutOrder' + }) + } + + function initialize() { + var screenBindings = { + 'beforeShow': beforeShow, + 'afterShow': afterShow, + 'beforeHide': beforeHide + }; + app.bindScreen('checkoutComplete', screenBindings); + + $screen = $("#checkoutCompleteScreen"); + $navigation = $screen.find(".checkout-navigation-bar"); + $templatePurchasedJamTrack = $('#template-purchased-jam-track'); + $thanksPanel = $screen.find(".thanks-panel"); + $jamTrackInBrowser = $screen.find(".thanks-detail.jam-tracks-in-browser"); + $purchasedJamTrack = $thanksPanel.find(".thanks-detail.purchased-jam-track"); + $purchasedJamTrackHeader = $purchasedJamTrack.find(".purchased-jam-track-header"); + $purchasedJamTracks = $purchasedJamTrack.find(".purchased-list") + $backBtn = $screen.find('.back'); + $downloadApplicationLink = $screen.find('.download-jamkazam-wrapper'); + $noPurchasesPrompt = $screen.find('.no-purchases-prompt') + + if ($screen.length == 0) throw "$screen must be specified"; + if ($navigation.length == 0) throw "$navigation must be specified"; + + events(); + } + + this.initialize = initialize; + + return this; + } +}) +(window, jQuery); \ No newline at end of file diff --git a/web/app/assets/javascripts/checkout_order.js b/web/app/assets/javascripts/checkout_order.js index e7fcc4203..70f5171a0 100644 --- a/web/app/assets/javascripts/checkout_order.js +++ b/web/app/assets/javascripts/checkout_order.js @@ -13,24 +13,14 @@ var $screen = null; var $navigation = null; var $templateOrderContent = null; - var $templatePurchasedJamTrack = null; var $orderPanel = null; - var $thanksPanel = null; - var $jamTrackInBrowser = null; - var $purchasedJamTrack = null; - var $purchasedJamTrackHeader = null; - var $purchasedJamTracks = null; var $orderContent = null; var userDetail = null; var step = null; - var downloadJamTracks = []; - var purchasedJamTracks = null; - var purchasedJamTrackIterator = 0; var $backBtn = null; var $orderPrompt = null; var $emptyCartPrompt = null; var $noAccountInfoPrompt = null; - var $downloadApplicationLink = null; function beforeShow() { @@ -44,26 +34,14 @@ function beforeHide() { - if(downloadJamTracks) { - context._.each(downloadJamTracks, function(downloadJamTrack) { - downloadJamTrack.destroy(); - downloadJamTrack.root.remove(); - }) - downloadJamTracks = []; - } - purchasedJamTracks = null; - purchasedJamTrackIterator = 0; } function beforeShowOrder() { - $purchasedJamTracks.empty() $orderPrompt.addClass('hidden') $emptyCartPrompt.addClass('hidden') $noAccountInfoPrompt.addClass('hidden') $orderPanel.removeClass("hidden") - $thanksPanel.addClass("hidden") - $purchasedJamTrackHeader.attr('status', 'in-progress') $screen.find(".place-order").addClass('disabled').off('click', placeOrder) $("#order_error").text('').addClass("hidden") step = 3; @@ -254,92 +232,18 @@ } function moveToThanks(purchaseResponse) { + checkoutUtils.setLastPurchase(purchaseResponse) checkoutUtils.deletePreserveBillingInfo() $("#order_error").addClass("hidden") $orderPanel.addClass("hidden") - $thanksPanel.removeClass("hidden") + checkoutUtils.deletePreserveBillingInfo() + //$thanksPanel.removeClass("hidden") jamTrackUtils.checkShoppingCart() app.refreshUser() - handleJamTracksPurchased(purchaseResponse.jam_tracks) + + window.location = '/client#/checkoutComplete' } - function handleJamTracksPurchased(jamTracks) { - // were any JamTracks purchased? - var jamTracksPurchased = jamTracks && jamTracks.length > 0; - if(jamTracksPurchased) { - if(gon.isNativeClient) { - startDownloadJamTracks(jamTracks) - } - else { - $jamTrackInBrowser.removeClass('hidden'); - app.user().done(function(user) { - if(!user.first_downloaded_client_at) { - $downloadApplicationLink.removeClass('hidden') - } - }) - } - } - } - - function startDownloadJamTracks(jamTracks) { - // there can be multiple purchased JamTracks, so we cycle through them - - purchasedJamTracks = jamTracks; - - // populate list of jamtracks purchased, that we will iterate through graphically - context._.each(jamTracks, function(jamTrack) { - var downloadJamTrack = new context.JK.DownloadJamTrack(app, jamTrack, 'small'); - var $purchasedJamTrack = $(context._.template( - $templatePurchasedJamTrack.html(), - jamTrack, - {variable: 'data'} - )); - - $purchasedJamTracks.append($purchasedJamTrack) - - // show it on the page - $purchasedJamTrack.append(downloadJamTrack.root) - - downloadJamTracks.push(downloadJamTrack) - }) - - iteratePurchasedJamTracks(); - } - - function iteratePurchasedJamTracks() { - if(purchasedJamTrackIterator < purchasedJamTracks.length ) { - var downloadJamTrack = downloadJamTracks[purchasedJamTrackIterator++]; - - // make sure the 'purchasing JamTrack' section can be seen - $purchasedJamTrack.removeClass('hidden'); - - // 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 " + downloadJamTrack.jamTrack.name + " synchronized;") - //downloadJamTrack.root.remove(); - downloadJamTrack.destroy(); - - // go to the next JamTrack - iteratePurchasedJamTracks() - } - }) - - logger.debug("jamtrack " + downloadJamTrack.jamTrack.name + " downloader initializing") - - // kick off the download JamTrack process - downloadJamTrack.init() - - // XXX style-test code - // downloadJamTrack.transitionError("package-error", "The server failed to create your package.") - - } - else { - logger.debug("done iterating over purchased JamTracks") - $purchasedJamTrackHeader.attr('status', 'done') - } - } function clearOrderPage() { $orderContent.empty(); @@ -377,19 +281,12 @@ $screen = $("#checkoutOrderScreen"); $navigation = $screen.find(".checkout-navigation-bar"); $templateOrderContent = $("#template-order-content"); - $templatePurchasedJamTrack = $('#template-purchased-jam-track'); $orderPanel = $screen.find(".order-panel"); - $thanksPanel = $screen.find(".thanks-panel"); - $jamTrackInBrowser = $screen.find(".thanks-detail.jam-tracks-in-browser"); - $purchasedJamTrack = $thanksPanel.find(".thanks-detail.purchased-jam-track"); - $purchasedJamTrackHeader = $purchasedJamTrack.find(".purchased-jam-track-header"); - $purchasedJamTracks = $purchasedJamTrack.find(".purchased-list") $backBtn = $screen.find('.back'); $orderPrompt = $screen.find('.order-prompt'); $emptyCartPrompt = $screen.find('.empty-cart-prompt'); $noAccountInfoPrompt = $screen.find('.no-account-info-prompt'); $orderContent = $orderPanel.find(".order-content"); - $downloadApplicationLink = $screen.find('.download-jamkazam-wrapper'); if ($screen.length == 0) throw "$screen must be specified"; if ($navigation.length == 0) throw "$navigation must be specified"; diff --git a/web/app/assets/javascripts/checkout_utils.js.coffee b/web/app/assets/javascripts/checkout_utils.js.coffee index 4505725ad..d97804ca5 100644 --- a/web/app/assets/javascripts/checkout_utils.js.coffee +++ b/web/app/assets/javascripts/checkout_utils.js.coffee @@ -7,6 +7,8 @@ class CheckoutUtils @logger = context.JK.logger @rest = new context.JK.Rest(); @cookie_name = "preserve_billing" + @lastPurchaseResponse = null + init: () => refreshPreserveBillingInfo:() => @@ -35,6 +37,11 @@ class CheckoutUtils value = $.cookie(@cookie_name) value? + setLastPurchase: (purchaseResponse) => + @lastPurchaseResponse = purchaseResponse + + getLastPurchase: () => + return @lastPurchaseResponse # global instance diff --git a/web/app/assets/stylesheets/client/checkout.css.scss b/web/app/assets/stylesheets/client/checkout.css.scss index 8e9e40b9d..4244928ba 100644 --- a/web/app/assets/stylesheets/client/checkout.css.scss +++ b/web/app/assets/stylesheets/client/checkout.css.scss @@ -45,78 +45,3 @@ margin-left: 30px; } } - -.thanks-panel { - padding: 30px; - - span.notice { - font-style:italic; - font-size:12px; - } - - br.purchase-downloads { - clear:both; - margin-bottom:20px; - } - - .thanks-detail { - .download-jamkazam { - color:$ColorLink; - border-radius: 4px; - border-style:solid; - border-color:#AAA; - border-width:1px; - padding:10px; - margin-top:20px; - display:inline-block; - } - - .download-jamkazam-wrapper { - text-align:center; - display:block; - - &.hidden { - display:none; - } - } - } - .thanks-detail.purchased-jam-track { - - margin-top:20px; - - .purchased-jam-track-header { - font-size: 15px; - margin-bottom:10px; - - span { - display:none; - } - - &[status="in-progress"] { - span.in-progress-msg { - display:inline; - } - } - - &[status="done"] { - span.done-msg { - display:inline; - } - } - } - - ul.purchased-list { - float:left; - margin:20px 100px 0 20px; - - li { - margin:0; - } - } - - .download-jamtrack { - width:auto; - vertical-align: middle; // to make bullets mid-align when error shows - } - } -} diff --git a/web/app/assets/stylesheets/client/checkout_complete.css.scss b/web/app/assets/stylesheets/client/checkout_complete.css.scss new file mode 100644 index 000000000..45c9b3951 --- /dev/null +++ b/web/app/assets/stylesheets/client/checkout_complete.css.scss @@ -0,0 +1,116 @@ +@import "client/common.css.scss"; +#checkoutCompleteScreen { + + p { + font-size:14px; + margin:0; + } + + .order-prompt { + color:white; + line-height:125%; + } + + h2 { + color:white; + background-color:#4d4d4d; + font-weight:normal; + margin: 0 0 10px 0; + font-size:14px; + padding: 3px 0 3px 10px; + height: 14px; + line-height: 14px; + vertical-align: middle; + text-align:left; + } + + .action-bar { + margin-top:20px; + } + + #checkout-info-help { + margin-right:1px; + } + + .checkout-complete-wrapper { + padding:30px 30px; + } + + .no-purchases-prompt { + + } + .thanks-panel { + + + span.notice { + font-style:italic; + font-size:12px; + } + + br.purchase-downloads { + clear:both; + margin-bottom:20px; + } + + .thanks-detail { + .download-jamkazam { + color:$ColorLink; + border-radius: 4px; + border-style:solid; + border-color:#AAA; + border-width:1px; + padding:10px; + margin-top:20px; + display:inline-block; + } + + .download-jamkazam-wrapper { + text-align:center; + display:block; + + &.hidden { + display:none; + } + } + } + .thanks-detail.purchased-jam-track { + + margin-top:20px; + + .purchased-jam-track-header { + font-size: 15px; + margin-bottom:10px; + + span { + display:none; + } + + &[status="in-progress"] { + span.in-progress-msg { + display:inline; + } + } + + &[status="done"] { + span.done-msg { + display:inline; + } + } + } + + ul.purchased-list { + float:left; + margin:20px 100px 0 20px; + + li { + margin:0; + } + } + + .download-jamtrack { + width:auto; + vertical-align: middle; // to make bullets mid-align when error shows + } + } + } +} \ No newline at end of file diff --git a/web/app/assets/stylesheets/client/client.css b/web/app/assets/stylesheets/client/client.css index 8df2f986e..aa551ede2 100644 --- a/web/app/assets/stylesheets/client/client.css +++ b/web/app/assets/stylesheets/client/client.css @@ -58,6 +58,7 @@ *= require ./checkout_signin *= require ./checkout_payment *= require ./checkout_order + *= require ./checkout_complete *= require ./genreSelector *= require ./sessionList *= require ./searchResults diff --git a/web/app/views/clients/_checkout_complete.html.slim b/web/app/views/clients/_checkout_complete.html.slim index e69de29bb..537beed46 100644 --- a/web/app/views/clients/_checkout_complete.html.slim +++ b/web/app/views/clients/_checkout_complete.html.slim @@ -0,0 +1,44 @@ +div layout="screen" layout-id="checkoutComplete" id="checkoutCompleteScreen" class="screen secondary" + .content + .content-head + .content-icon= image_tag("content/icon_shopping_cart.png", {:height => 19, :width => 19}) + h1 check out + = render "screen_navigation" + .content-body + .content-body-scroller + .content-wrapper + .checkout-navigation-bar + .checkout-complete-wrapper + .no-purchases-prompt.hidden + | You have not made any purchases recently. Why not go go  + a href="/client#/jamtrackBrowse" browse our collection of JamTracks + | ? + .thanks-panel + + h2 Thank you for your order! + br + .thanks-detail We'll send you an email confirming your order shortly. + br + .thanks-detail.jam-tracks-in-browser.hidden + p To play your purchased JamTrack, launch the JamKazam application and open the JamTrack while in a session. + a.download-jamkazam-wrapper.hidden href="/downloads" rel="external" + .download-jamkazam + | Click Here to Get the Free JamKazam Application + .thanks-detail.purchased-jam-track.hidden + h2.purchased-jam-track-header status="in-progress" + span.in-progress-msg Downloading Your Purchased JamTracks + span.done-msg All purchased JamTracks have been downloaded successfully! You can now play them in a session. + span Each JamTrack will be downloaded sequentially. + br + span.notice Note that you do not have to wait for this to complete in order to use your JamTrack later. + br.clear + ul.purchased-list + .clearall + .action-bar + .right + a.button-grey href="#" id="checkout-info-help" HELP + a.button-orange.checkout-done href="/client#/home" DONE + .clearall + +script type='text/template' id='template-purchased-jam-track' + li data-jam-track-id="{{data.jam_track_id}}" \ No newline at end of file diff --git a/web/app/views/clients/_checkout_order.html.slim b/web/app/views/clients/_checkout_order.html.slim index 99ddc45da..b3b298fc2 100644 --- a/web/app/views/clients/_checkout_order.html.slim +++ b/web/app/views/clients/_checkout_order.html.slim @@ -31,25 +31,6 @@ div layout="screen" layout-id="checkoutOrder" id="checkoutOrderScreen" class="sc a.button-grey.back href="#" BACK a.button-orange.place-order href="#" PLACE YOUR ORDER .clearall - .thanks-panel - h2 Thank you for your order! - br - .thanks-detail We'll send you an email confirming your order shortly. - br - .thanks-detail.jam-tracks-in-browser.hidden - p To play your purchased JamTrack, launch the JamKazam application and open the JamTrack while in a session. - a.download-jamkazam-wrapper.hidden href="/downloads" rel="external" - .download-jamkazam - | Click Here to Get the Free JamKazam Application - .thanks-detail.purchased-jam-track.hidden - h2.purchased-jam-track-header status="in-progress" - span.in-progress-msg Downloading Your Purchased JamTracks - span.done-msg All purchased JamTracks have been downloaded successfully! You can now play them in a session. - span Each JamTrack will be downloaded sequentially. - br - span.notice Note that you do not have to wait for this to complete in order to use your JamTrack later. - br.clear - ul.purchased-list diff --git a/web/app/views/clients/index.html.erb b/web/app/views/clients/index.html.erb index 6dfd09f94..4c2b91a0f 100644 --- a/web/app/views/clients/index.html.erb +++ b/web/app/views/clients/index.html.erb @@ -43,6 +43,7 @@ <%= render "checkout_signin" %> <%= render "checkout_payment" %> <%= render "checkout_order" %> +<%= render "checkout_complete" %> <%= render "order" %> <%= render "feed" %> <%= render "bands" %> @@ -272,8 +273,8 @@ var checkoutOrderScreen = new JK.CheckoutOrderScreen(JK.app); checkoutOrderScreen.initialize(); - // var OrderScreen = new JK.OrderScreen(JK.app); - // OrderScreen.initialize(); + var checkoutCompleteScreen = new JK.CheckoutCompleteScreen(JK.app); + checkoutCompleteScreen.initialize(); var findMusicianScreen = new JK.FindMusicianScreen(JK.app); findMusicianScreen.initialize(JK.TextMessageDialogInstance); diff --git a/web/app/views/shared/_ad_sense.html.erb b/web/app/views/shared/_ad_sense.html.erb index 3d2f23cf0..6cc98b9a7 100644 --- a/web/app/views/shared/_ad_sense.html.erb +++ b/web/app/views/shared/_ad_sense.html.erb @@ -1 +1,3 @@ - \ No newline at end of file +<% if Rails.application.config.ad_sense_enabled %> + +<% end %> \ No newline at end of file diff --git a/web/config/application.rb b/web/config/application.rb index 81fee8b3e..650596aae 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -340,5 +340,6 @@ if defined?(Bundler) config.gear_check_ignore_high_latency = false config.remove_whitespace_credit_card = false config.estimate_taxes = true + config.ad_sense_enabled = false end end diff --git a/web/spec/features/checkout_spec.rb b/web/spec/features/checkout_spec.rb index 4a2b97011..297504b14 100644 --- a/web/spec/features/checkout_spec.rb +++ b/web/spec/features/checkout_spec.rb @@ -809,8 +809,8 @@ describe "Checkout", :js => true, :type => :feature, :capybara_feature => true d find('.order-items-value.order-total', text:'$1.99') find('.order-items-value.shipping-handling', text:'$0.00') find('.order-items-value.sub-total', text:'$1.99') - find('.order-items-value.taxes', text:'$0.00') - find('.order-items-value.grand-total', text:'$1.99') + find('.order-items-value.taxes', text:'$0.16') + find('.order-items-value.grand-total', text:'$2.15') # click the ORDER button find('.place-order-center a.button-orange.place-order').trigger(:click) @@ -820,6 +820,8 @@ describe "Checkout", :js => true, :type => :feature, :capybara_feature => true d guy.reload + sleep 3 # challenge to all comers! WHY DO I HAVE TO SLEEP FOR THIS ASSERTION TO BE TRUE! GAH . and 1 second won't do it + jam_track_right = jamtrack_pearljam_evenflow.right_for_user(guy) # make sure it appears the user actually bought the jamtrack! jam_track_right.should_not be_nil From 9edc291ced98306232e2a8147cd05bffeaf6eb6c Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 12 May 2015 14:42:10 -0500 Subject: [PATCH 68/72] * VRFS-3211 - seek feature updated to be more responsive --- web/app/assets/javascripts/playbackControls.js | 8 ++++---- web/app/assets/javascripts/session.js | 4 ++++ .../assets/stylesheets/client/session.css.scss | 15 +++++++++------ web/app/views/clients/_play_controls.html.erb | 4 ++++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/web/app/assets/javascripts/playbackControls.js b/web/app/assets/javascripts/playbackControls.js index 2321c8382..4a2421590 100644 --- a/web/app/assets/javascripts/playbackControls.js +++ b/web/app/assets/javascripts/playbackControls.js @@ -101,10 +101,10 @@ function startDrag(e, ui) { dragging = true; playingWhenDragStart = playbackPlaying; - draggingUpdateTimer = setInterval(function() { canUpdateBackend = true; }, 333); // only call backend up to 3 times a second while dragging - if(playingWhenDragStart) { - stopPlay(); - } + //draggingUpdateTimer = setInterval(function() { canUpdateBackend = true; }, 333); // only call backend up to 3 times a second while dragging + //if(playingWhenDragStart) { + //stopPlay(); + //} } function stopDrag(e, ui) { diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 8999298eb..adcbfbc07 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -3088,7 +3088,11 @@ logger.debug("calling jamClient.SessionTrackSeekMs(" + seek + ")"); if(data.playbackMonitorMode == context.JK.PLAYBACK_MONITOR_MODE.JAMTRACK) { + // this doesn't ever show anything, because of blocking nature of the seek call + //var $mediaSeeking = $screen.find('.media-seeking') + //$mediaSeeking.attr('data-mode', 'SEEKING') context.jamClient.SessionJamTrackSeekMs(seek); + //$mediaSeeking.attr('data-mode', '') } else { context.jamClient.SessionTrackSeekMs(seek); diff --git a/web/app/assets/stylesheets/client/session.css.scss b/web/app/assets/stylesheets/client/session.css.scss index 50be54daf..213a4d726 100644 --- a/web/app/assets/stylesheets/client/session.css.scss +++ b/web/app/assets/stylesheets/client/session.css.scss @@ -85,7 +85,7 @@ top:3px ! important; } - .jam-track-get-ready { + .jam-track-get-ready, .media-seeking { display:none; position:absolute; top:-29px; @@ -96,11 +96,6 @@ line-height:32px; left:50%; - &[data-mode="JAMTRACK"] { - &[data-current-time="0"] { - display:block; - } - } .spinner-small { vertical-align:middle; display:inline-block; @@ -110,6 +105,14 @@ vertical-align:middle; } } + + .jam-track-get-ready[data-mode="JAMTRACK"][data-current-time="0"] { + display:block; + } + + .media-seeking[data-mode="SEEKING"] { + display:block; + } } .playback-mode-buttons { diff --git a/web/app/views/clients/_play_controls.html.erb b/web/app/views/clients/_play_controls.html.erb index 6b35b3d98..26dfb5ab8 100644 --- a/web/app/views/clients/_play_controls.html.erb +++ b/web/app/views/clients/_play_controls.html.erb @@ -5,6 +5,10 @@
Get Ready! +
+
+ Seeking to this Location +
From 41945d73fe26d7f3b9bd9fe86795ed8a347104ef Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 12 May 2015 14:49:52 -0500 Subject: [PATCH 69/72] * VRFS-3211 - seek updated to be more responsive --- web/app/assets/javascripts/playbackControls.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/web/app/assets/javascripts/playbackControls.js b/web/app/assets/javascripts/playbackControls.js index 4a2421590..84ec5aed6 100644 --- a/web/app/assets/javascripts/playbackControls.js +++ b/web/app/assets/javascripts/playbackControls.js @@ -114,11 +114,12 @@ canUpdateBackend = true; updateOffsetBasedOnPosition(ui.position.left); + updateSliderPosition(playbackPositionMs); - if(playingWhenDragStart) { - playingWhenDragStart = false; - startPlay(); - } + //if(playingWhenDragStart) { + // playingWhenDragStart = false; + // startPlay(); + //} } function onDrag(e, ui) { From 9459215a0f4d699f54c76b0f57031193b209c511 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 12 May 2015 14:59:53 -0500 Subject: [PATCH 70/72] * reset filters if none specified VRFS-3237 --- web/app/assets/javascripts/jam_track_screen.js.coffee | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/app/assets/javascripts/jam_track_screen.js.coffee b/web/app/assets/javascripts/jam_track_screen.js.coffee index 22b74b5b8..1dc48338e 100644 --- a/web/app/assets/javascripts/jam_track_screen.js.coffee +++ b/web/app/assets/javascripts/jam_track_screen.js.coffee @@ -62,10 +62,16 @@ context.JK.JamTrackScreen=class JamTrackScreen if(parms.artist?) @artist.val(parms.artist) + else + @artist.val('') if(parms.instrument?) @instrument.val(parms.instrument) + else + @instrument.val('') if(parms.availability?) @availability.val(parms.availability) + else + @availability.val('') window.history.replaceState({}, "", "/client#/jamtrackBrowse") getParams:() => From fb463d67030152b4f9371ce9339e4ca8d42727cd Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 12 May 2015 15:45:23 -0500 Subject: [PATCH 71/72] * VRFS-3234 - auto-open jamtrack from account screen --- .../javascripts/accounts_jamtracks.js.coffee | 22 ++- .../javascripts/dialog/openJamTrackDialog.js | 2 +- web/app/assets/javascripts/session.js | 152 ++++++++++-------- web/app/assets/javascripts/session_utils.js | 13 ++ web/app/views/clients/_account.html.erb | 2 +- .../clients/_account_jamtracks.html.slim | 19 +-- 6 files changed, 125 insertions(+), 85 deletions(-) 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 @@

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 From 1a133c588ddc1711ad1d4a99955c8e112ee13237 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 12 May 2015 15:46:34 -0500 Subject: [PATCH 72/72] * remove media seeking html --- web/app/views/clients/_play_controls.html.erb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/web/app/views/clients/_play_controls.html.erb b/web/app/views/clients/_play_controls.html.erb index 26dfb5ab8..6b35b3d98 100644 --- a/web/app/views/clients/_play_controls.html.erb +++ b/web/app/views/clients/_play_controls.html.erb @@ -5,10 +5,6 @@
Get Ready! -
-
- Seeking to this Location -