This commit is contained in:
Seth Call 2015-01-26 21:22:44 -06:00
parent c86aa6a5d7
commit f53c5c9612
12 changed files with 107 additions and 38 deletions

2
build
View File

@ -66,7 +66,7 @@ DEB_SERVER=http://localhost:9010/apt-`uname -p`
GEM_SERVER=http://localhost:9000/gems
# if still going, then push all debs up
if [[ "$GIT_BRANCH" == *develop* || "$GIT_BRANCH" == *master* || "$GIT_BRANCH" == *release* ]]; then
if [[ "$GIT_BRANCH" == *develop* || "$GIT_BRANCH" == *master* || "$GIT_BRANCH" == *release* || "$GIT_BRANCH" == *feature* || "$GIT_BRANCH" == *hotfix* ]]; then
echo ""
echo "PUSHING DB ARTIFACTS"

View File

@ -77,19 +77,8 @@
// tell the server we are about to start a recording
rest.openJamTrack({id: context.JK.CurrentSessionModel.id(), jam_track_id: jamTrack.id})
.done(function(response) {
context.jamClient.JamTrackStopPlay();
var result = context.jamClient.JamTrackPlay(jamTrack.id);
logger.debug("JamTrackPlay response: %o", result);
if(result) {
app.layout.closeDialog('open-jam-track-dialog');
}
else {
logger.error("unable to open jam track")
}
$dialog.data('result', {success:true, jamTrack: jamTrack})
app.layout.closeDialog('open-jam-track-dialog');
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, "Unable to Open JamTrack For Playback");

View File

@ -58,7 +58,10 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
}
context.JK.DownloadJamTracks[@jamTrackId] = this
downloadJamTrackTemplate = $('#template-download-jamtrack')
throw "no download jamtrack template" if not downloadJamTrackTemplate.exists()
@root = $(downloadJamTrackTemplate.html())
# after you've created the DownloadJamTrack widget, call synchronize which will begin ensuring that the jamtrack
# is downloaded and ready to open
@ -66,10 +69,8 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
@active = true
this.reset()
downloadJamTrackTemplate = $('#template-download-jamtrack')
throw "no download jamtrack template" if not downloadJamTrackTemplate.exists()
@root = $(downloadJamTrackTemplate.html())
@root.on('remove', this.destroy) # automatically destroy self when removed from DOM
@stateHolder = @root.find('.state')
# populate in template and visual transition functions
@ -281,7 +282,7 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
@state.show()
$(this).triggerHandler(@EVENTS.JAMTRACK_DOWNLOADER_STATE_CHANGED, {state: @state.name})
$(this).triggerHandler(@EVENTS.JAMTRACK_DOWNLOADER_STATE_CHANGED, {state: @state})
checkState: () =>
# check for the success state against the local state of the client... if it's playable, then we should be OK

View File

@ -679,6 +679,8 @@
function TrackSetInstrument(track, instrumentId) {}
function JamTrackStopPlay() {}
function JamTrackPlay(){return true; }
function JamTrackIsPlayable() {
return true;
}
@ -981,6 +983,8 @@
this.TrackGetChatUsesMusic = TrackGetChatUsesMusic;
this.TrackSetChatUsesMusic = TrackSetChatUsesMusic;
this.JamTrackStopPlay = JamTrackStopPlay;
this.JamTrackPlay = JamTrackPlay;
this.JamTrackIsPlayable = JamTrackIsPlayable;
this.JamTrackGetTrackDetail = JamTrackGetTrackDetail;
this.JamTrackKeysRequest = JamTrackKeysRequest;

View File

@ -47,6 +47,10 @@
var $screen = null;
var $mixModeDropdown = null;
var $templateMixerModeChange = null;
var $otherAudioContainer = null;
var $myTracksContainer = null;
var $liveTracksContainer = null;
var downloadJamTrack = null;
var rest = context.JK.Rest();
var RENDER_SESSION_DELAY = 750; // When I need to render a session, I have to wait a bit for the mixers to be there.
@ -98,7 +102,7 @@
window.location = '/client#/home';
}
promptLeave = true;
$('#session-mytracks-container').empty();
$myTracksContainer.empty();
displayDoneRecording(); // assumption is that you can't join a recording session, so this should be safe
var shareDialog = new JK.ShareDialog(context.JK.app, sessionId, "session");
@ -500,7 +504,7 @@
}
function renderSession() {
$('#session-mytracks-container').empty();
$myTracksContainer.empty();
$('.session-track').remove(); // Remove previous tracks
var $voiceChat = $('#voice-chat');
$voiceChat.hide();
@ -514,7 +518,7 @@
if ($('.session-livetracks .track').length === 0) {
$('.session-livetracks .when-empty').show();
}
if ($('.session-recordings .track').length === 0) {
if ($('.session-recordings .track').length === 0 && $('.session-recordings .download-jamtrack').length === 0) {
$('.session-recordings .when-empty').show();
$('.session-recording-name-wrapper').hide();
$('.session-recordings .recording-controls').hide();
@ -884,7 +888,7 @@
}
function renderJamTracks(jamTrackMixers) {
log.debug("rendering jam tracks")
logger.debug("rendering jam tracks")
var jamTracks = sessionModel.jamTracks();
// pluck the 1st mixer, and assume that all other mixers in this group are of the same type (between JamTrack vs Peer)
@ -1433,11 +1437,9 @@
function _addTrack(allowDelete, trackData, mixer, oppositeMixer) {
var parentSelector = '#session-mytracks-container';
var $destination = $(parentSelector);
var $destination = $myTracksContainer;
if (trackData.clientId !== app.clientId) {
parentSelector = '#session-livetracks-container';
$destination = $(parentSelector);
$destination = $liveTracksContainer
$('.session-livetracks .when-empty').hide();
}
var template = $('#template-session-track').html();
@ -1451,7 +1453,7 @@
$destination.append(newTrack);
// Render VU meters and gain fader
var trackSelector = parentSelector + ' .session-track[track-id="' + trackData.trackId + '"]';
var trackSelector = $destination.selector + ' .session-track[track-id="' + trackData.trackId + '"]';
var gainPercent = trackData.gainPercent || 0;
connectTrackToMixer(trackSelector, trackData, trackData.mixerId, gainPercent, trackData.group_id);
@ -1467,24 +1469,27 @@
tracks[trackData.trackId] = new context.JK.SessionTrack(trackData.clientId);
}
// something is being shown now in the other audio area
function otherAudioFilled() {
$('.session-recordings .when-empty').hide();
$('.session-recording-name-wrapper').show();
}
function _addRecordingTrack(trackData) {
var parentSelector = '#session-recordedtracks-container';
var $destination = $(parentSelector);
$('.session-recordings .when-empty').hide();
$('.session-recording-name-wrapper').show();
otherAudioFilled();
$('.session-recordings .recording-controls').show();
var template = $('#template-session-track').html();
var newTrack = $(context.JK.fillTemplate(template, trackData));
$destination.append(newTrack);
$otherAudioContainer.append(newTrack);
if(trackData.preMasteredClass) {
context.JK.helpBubble($('.track-instrument', newTrack), 'pre-processed-track', {}, {offsetParent: newTrack.closest('.content-body')});
}
// Render VU meters and gain fader
var trackSelector = parentSelector + ' .session-track[track-id="' + trackData.trackId + '"]';
var trackSelector = $otherAudioContainer.selector + ' .session-track[track-id="' + trackData.trackId + '"]';
var gainPercent = trackData.gainPercent || 0;
var $track = connectTrackToMixer(trackSelector, trackData, trackData.mixerId, gainPercent, null);
var $trackIconMute = $track.find('.track-icon-mute')
@ -1921,7 +1926,59 @@
return false;
}
app.layout.showDialog('open-jam-track-dialog');
app.layout.showDialog('open-jam-track-dialog').one(EVENTS.DIALOG_CLOSED, function(e, data) {
// once the dialog is closed, see if the user has a jamtrack selected
if(!data.canceled && data.result.jamTrack) {
var jamTrack = data.result.jamTrack;
logger.debug("JamTrack INFO", jamTrack.id, jamTrack.jam_track_right_id)
// 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.id, jamTrack.jam_track_right_id);
// 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;
context.jamClient.JamTrackStopPlay();
var result = context.jamClient.JamTrackPlay(jamTrack.id);
if(!result) {
app.notify(
{ title: "JamTrack Can Not Open",
text: "Unable to open your JamTrack. Please contact support@jamkazam.com"
}, null, true);
}
}
})
// show it on the page
$otherAudioContainer.append(downloadJamTrack.root)
// kick off the download jamtrack process
downloadJamTrack.init()
}
else {
logger.debug("OpenJamTrack dialog closed with no selection; ignoring", data)
}
})
return false;
}
@ -2093,6 +2150,9 @@
$screen = $('#session-screen');
$mixModeDropdown = $screen.find('select.monitor-mode')
$templateMixerModeChange = $('#template-mixer-mode-change');
$otherAudioContainer = $('#session-recordedtracks-container');
$myTracksContainer = $('#session-mytracks-container')
$liveTracksContainer = $('#session-livetracks-container');
events();

View File

@ -66,4 +66,5 @@
*= require jquery.Jcrop
*= require icheck/minimal/minimal
*= require users/syncViewer
*= require ./downloadJamTrack
*/

View File

@ -14,6 +14,10 @@
margin-top:10px;
}
.msg {
white-space: normal;
}
.spinner-large {
margin:20px auto 0;
text-align:center;

View File

@ -133,6 +133,10 @@
margin-bottom:8px;
font-size:16px;
}
.download-jamtrack {
margin-top:50px;
}
}

View File

@ -2,6 +2,10 @@ object @jam_track
attributes :id, :name, :description, :initial_play_silence, :original_artist
node :jam_track_right_id do |jam_track|
jam_track.right_for_user(current_user).id
end
child(:jam_track_tracks => :tracks) {
attributes :id, :part, :instrument
}

View File

@ -31,10 +31,11 @@ script type="text/template" id="template-download-jamtrack-state-keying"
script type="text/template" id="template-download-jamtrack-state-initial"
.state-initial
.msg
| Initializing...
| Initializing JamTrack...
.spinner-large
script type="text/template" id="template-download-jamtrack-state-errored"
.state-errored
.msg
.retry
.a.button-orange.retry-button RETRY
a.button-orange.retry-button RETRY

View File

@ -1,6 +1,6 @@
require 'factory_girl'
require 'open-uri'
require './spec/factories.rb' # useful when run on a server
namespace :db do
desc "Add a simple one track recording to the database"

View File

@ -101,6 +101,7 @@ describe ApiJamTracksController do
response.should be_success
json = JSON.parse(response.body)
json['jamtracks'].length.should eq(1)
json['jamtracks'][0]['jam_track_right_id'].should eq(right.id)
json['next'].should be_nil
end
end