VRFS-3242 : Merge with latest develop
This commit is contained in:
commit
193888f960
|
|
@ -103,7 +103,7 @@ module JamRuby
|
|||
def copy_url_to_file(url, filename)
|
||||
uri = URI(url)
|
||||
open(filename, 'w+b') do |io|
|
||||
Net::HTTP.start(uri.host, uri.port) do |http|
|
||||
Net::HTTP.start(uri.host, uri.port, use_ssl: url.start_with?('https') ? true : false) do |http|
|
||||
request = Net::HTTP::Get.new uri
|
||||
http.request request do |response|
|
||||
response_code = response.code.to_i
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -224,8 +224,8 @@ module JamRuby
|
|||
:cropped_s3_path_photo => cropped_s3_path,
|
||||
:cropped_large_s3_path_photo => cropped_large_s3_path,
|
||||
:crop_selection_photo => crop_selection,
|
||||
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => false),
|
||||
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => false))
|
||||
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => true),
|
||||
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => true))
|
||||
end
|
||||
|
||||
def delete_photo(aws_bucket)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def self.ready_to_clean
|
||||
JamTrackRight.where("downloaded_since_sign=? AND updated_at <= ?", true, 5.minutes.ago).limit(1000)
|
||||
JamTrackRight.where("downloaded_since_sign=? AND updated_at <= ?", true, 5.minutes.ago).limit(1000)
|
||||
end
|
||||
|
||||
def finish_errored(error_reason, error_detail, sample_rate)
|
||||
|
|
@ -98,7 +98,7 @@ module JamRuby
|
|||
# but the url is short lived enough so that it wouldn't be easily shared
|
||||
def sign_url(expiration_time = 120, bitrate=48)
|
||||
field_name = (bitrate==48) ? "url_48" : "url_44"
|
||||
s3_manager.sign_url(self[field_name], {:expires => expiration_time, :secure => false})
|
||||
s3_manager.sign_url(self[field_name], {:expires => expiration_time, :secure => true})
|
||||
end
|
||||
|
||||
def delete_s3_files
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ module JamRuby
|
|||
def preview_public_url(media_type='ogg')
|
||||
url = media_type == 'ogg' ? self[:preview_url] : self[:preview_mp3_url]
|
||||
if url
|
||||
s3_public_manager.public_url(url,{ :secure => false})
|
||||
s3_public_manager.public_url(url,{ :secure => true})
|
||||
else
|
||||
nil
|
||||
end
|
||||
|
|
@ -87,7 +87,7 @@ module JamRuby
|
|||
# we would verify their rights (can_download?), and generates a URL in response to the click so that they can download
|
||||
# but the url is short lived enough so that it wouldn't be easily shared
|
||||
def sign_url(expiration_time = 120, sample_rate=48)
|
||||
s3_manager.sign_url(url_by_sample_rate(sample_rate), {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => false})
|
||||
s3_manager.sign_url(url_by_sample_rate(sample_rate), {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => true})
|
||||
end
|
||||
|
||||
def can_download?(user)
|
||||
|
|
|
|||
|
|
@ -131,9 +131,10 @@ module JamRuby
|
|||
end
|
||||
end
|
||||
|
||||
uri = URI(sign_url(field))
|
||||
url = sign_url(field)
|
||||
uri = URI(url)
|
||||
open downloaded_filename, 'wb' do |io|
|
||||
Net::HTTP.start(uri.host, uri.port) do |http|
|
||||
Net::HTTP.start(uri.host, uri.port, use_ssl: url.start_with?('https') ? true : false) do |http|
|
||||
request = Net::HTTP::Get.new uri
|
||||
http.request request do |response|
|
||||
response_code = response.code.to_i
|
||||
|
|
|
|||
|
|
@ -305,7 +305,7 @@ module JamRuby
|
|||
|
||||
# if the url starts with http, just return it because it's in some other store. Otherwise it's a relative path in s3 and needs be signed
|
||||
def resolve_url(url_field, mime_type, expiration_time)
|
||||
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => false})
|
||||
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => true})
|
||||
end
|
||||
|
||||
def sign_url(expiration_time = 120, type='ogg')
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def sign_url(expiration_time = 120)
|
||||
s3_manager.sign_url(self[:file_url], {:expires => expiration_time, :secure => false})
|
||||
s3_manager.sign_url(self[:file_url], {:expires => expiration_time, :secure => true})
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ module JamRuby
|
|||
|
||||
# if the url starts with http, just return it because it's in some other store. Otherwise it's a relative path in s3 and needs be signed
|
||||
def resolve_url(url_field, mime_type, expiration_time)
|
||||
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => false})
|
||||
self[url_field].start_with?('http') ? self[url_field] : s3_manager.sign_url(self[url_field], {:expires => expiration_time, :response_content_type => mime_type, :secure => true})
|
||||
end
|
||||
|
||||
def sign_url(expiration_time = 120, type='ogg')
|
||||
|
|
@ -232,6 +232,7 @@ module JamRuby
|
|||
end
|
||||
end
|
||||
|
||||
# this is not 'secure' because, in testing, the PUT failed often in Ruby. should investigate more.
|
||||
def sign_put(expiration_time = 3600 * 24, type='ogg')
|
||||
type ||= 'ogg'
|
||||
if type == 'ogg'
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def sign_url(expiration_time = 120)
|
||||
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => false})
|
||||
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => true})
|
||||
end
|
||||
|
||||
def can_download?(some_user)
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def sign_url(expiration_time = 120)
|
||||
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => false})
|
||||
s3_manager.sign_url(self[:url], {:expires => expiration_time, :response_content_type => 'audio/ogg', :secure => true})
|
||||
end
|
||||
|
||||
def upload_start(length, md5)
|
||||
|
|
|
|||
|
|
@ -1259,8 +1259,8 @@ module JamRuby
|
|||
:cropped_s3_path => cropped_s3_path,
|
||||
:cropped_large_s3_path => cropped_large_s3_path,
|
||||
:crop_selection => crop_selection,
|
||||
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => false),
|
||||
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => false)
|
||||
:photo_url => S3Util.url(aws_bucket, escape_filename(cropped_s3_path), :secure => true),
|
||||
:large_photo_url => S3Util.url(aws_bucket, escape_filename(cropped_large_s3_path), :secure => true)
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ module JamRuby
|
|||
uri = URI(filename)
|
||||
open download_filename, 'wb' do |io|
|
||||
begin
|
||||
Net::HTTP.start(uri.host, uri.port) do |http|
|
||||
Net::HTTP.start(uri.host, uri.port, use_ssl: filename.start_with?('https') ? true : false) do |http|
|
||||
request = Net::HTTP::Get.new uri
|
||||
http.request request do |response|
|
||||
response_code = response.code.to_i
|
||||
|
|
@ -165,6 +165,7 @@ module JamRuby
|
|||
|
||||
uri = URI.parse(@postback_ogg_url)
|
||||
http = Net::HTTP.new(uri.host, uri.port)
|
||||
http.use_ssl = @postback_ogg_url.start_with?('https') ? true : false
|
||||
request = Net::HTTP::Put.new(uri.request_uri)
|
||||
|
||||
response = nil
|
||||
|
|
@ -186,6 +187,7 @@ module JamRuby
|
|||
|
||||
uri = URI.parse(@postback_mp3_url)
|
||||
http = Net::HTTP.new(uri.host, uri.port)
|
||||
http.use_ssl = @postback_mp3_url.start_with?('https') ? true : false
|
||||
request = Net::HTTP::Put.new(uri.request_uri)
|
||||
|
||||
response = nil
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ module JamRuby
|
|||
|
||||
uri = URI.parse(@postback_mp3_url)
|
||||
http = Net::HTTP.new(uri.host, uri.port)
|
||||
http.use_ssl = @postback_mp3_url.start_with?('https') ? true : false
|
||||
request = Net::HTTP::Put.new(uri.request_uri)
|
||||
|
||||
response = nil
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ describe JamTracksCleaner do
|
|||
end
|
||||
|
||||
it "should clean" do
|
||||
pending "re-enable cleaner after manual testing"
|
||||
jam_track_right = JamTrackRight.create(:user=>@user, :jam_track=>@jam_track)
|
||||
jam_track_right.signed_48=true
|
||||
jam_track_right
|
||||
|
|
@ -48,6 +49,6 @@ describe JamTracksCleaner do
|
|||
|
||||
# But not after running cleaner job:
|
||||
JamRuby::JamTracksCleaner.perform
|
||||
s3.exists?(url).should be_false
|
||||
s3.exists?(url).should be_false
|
||||
end
|
||||
end
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
|
|
@ -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:() =>
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -3088,7 +3108,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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -61,6 +61,8 @@
|
|||
*= require ./checkout_signin
|
||||
*= require ./checkout_payment
|
||||
*= require ./checkout_order
|
||||
*= require ./checkout_complete
|
||||
*= require ./genreSelector
|
||||
*= require ./sessionList
|
||||
*= require ./searchResults
|
||||
*= require ./clientUpdate
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ class ApplicationController < ActionController::Base
|
|||
include SessionsHelper
|
||||
include ClientHelper
|
||||
|
||||
force_ssl port: Rails.application.config.external_port_ssl if Rails.application.config.force_ssl
|
||||
|
||||
# inject username/email into bugsnag data
|
||||
before_bugsnag_notify :add_user_info_to_bugsnag
|
||||
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}}"
|
||||
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
<%= render "checkout_signin" %>
|
||||
<%= render "checkout_payment" %>
|
||||
<%= render "checkout_order" %>
|
||||
<%= render "checkout_complete" %>
|
||||
<%= render "order" %>
|
||||
<%= render "feed" %>
|
||||
<%= render "bands" %>
|
||||
|
|
@ -287,8 +288,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.MusicianSearchFilter();
|
||||
findMusicianScreen.init(JK.app);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
<meta name="description" content="<%= meta_description(yield(:description)) %>">
|
||||
<%= include_gon %>
|
||||
<%= csrf_meta_tags %>
|
||||
<%= render "shared/ad_sense" %>
|
||||
</head>
|
||||
<body>
|
||||
<%= javascript_include_tag "application" %>
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
<%= render "layouts/social_meta" %>
|
||||
<% end %>
|
||||
<%= yield(:extra_js) %>
|
||||
<%= render "shared/ad_sense" %>
|
||||
</head>
|
||||
<body class="jam" data-client-type="<%= @nativeClient ? 'client' : 'browser' %>">
|
||||
<%= yield %>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
<% else %>
|
||||
<%= render "layouts/social_meta" %>
|
||||
<% end %>
|
||||
<%= render "shared/ad_sense" %>
|
||||
</head>
|
||||
<body class="corporate jam" data-purpose="<%= yield(:purpose) %>">
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
<% else %>
|
||||
<%= render "layouts/social_meta" %>
|
||||
<% end %>
|
||||
<%= render "shared/ad_sense" %>
|
||||
</head>
|
||||
<body class="jam landing <%= yield(:page_name) %>">
|
||||
<div class="dialog-overlay op70" style="display:none; width:100%; height:100%; z-index:99;"></div>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
<% else %>
|
||||
<%= render "layouts/social_meta" %>
|
||||
<% end %>
|
||||
<%= render "shared/ad_sense" %>
|
||||
</head>
|
||||
<body class="jam">
|
||||
<div id="minimal-container">
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
<% else %>
|
||||
<%= render "layouts/social_meta" %>
|
||||
<% end %>
|
||||
<%= render "shared/ad_sense" %>
|
||||
</head>
|
||||
<body class="web jam <%= yield(:page_name) %>">
|
||||
<%= javascript_include_tag "web/web" %>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
<% if Rails.application.config.ad_sense_enabled %>
|
||||
<script type='text/javascript'>(function(A,d,S,t,a,g,e) { A['AdstageAnalytics']=a;A[a]=A[a]||function(){(A[a].q=A[a].q||[]).push(arguments)}; A[a].l=1*new Date();g=d.createElement(S),e=d.getElementsByTagName(S)[0]; g.async=1;g.src=t;e.parentNode.insertBefore(g, e); })(window, document, 'script', '//assets.adstage.io/analytics.js', '_as'); _as('create', '566750ff-ccf7-47ab-98d8-ea9746825704'); _as('send', 'pageview');</script>
|
||||
<% end %>
|
||||
|
|
@ -122,13 +122,14 @@ if defined?(Bundler)
|
|||
config.websocket_gateway_trusted_uri = "ws://localhost:#{config.websocket_gateway_port + 1}/websocket"
|
||||
config.websocket_gateway_uri_ssl = "wss://localhost:#{config.websocket_gateway_port_ssl}/websocket"
|
||||
config.websocket_gateway_trusted_uri_ssl = "wss://localhost:#{config.websocket_gateway_port_ssl + 1}/websocket"
|
||||
|
||||
config.force_ssl = ENV['FORCE_SSL'].nil? ? false : ENV['FORCE_SSL'] == 'true'
|
||||
config.websocket_gateway_max_connections_per_user = 20
|
||||
config.lock_connections = false
|
||||
|
||||
config.external_hostname = ENV['EXTERNAL_HOSTNAME'] || 'localhost'
|
||||
config.external_port = ENV['EXTERNAL_PORT'] || 3000
|
||||
config.external_protocol = ENV['EXTERNAL_PROTOCOL'] || 'http://'
|
||||
config.external_port_ssl = ENV['EXTERNAL_PORT_ssl'] || 3443
|
||||
config.external_root_url = "#{config.external_protocol}#{config.external_hostname}#{(config.external_port == 80 || config.external_port == 443) ? '' : ':' + config.external_port.to_s}"
|
||||
config.admin_port = ENV['ADMIN_PORT'] || 3333
|
||||
config.admin_root_url = "#{config.external_protocol}#{config.external_hostname}#{(config.admin_port == 80 || config.admin_port == 443) ? '' : ':' + config.admin_port.to_s}"
|
||||
|
|
@ -339,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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue