diff --git a/db/up/recorded_jam_track_tracks.sql b/db/up/recorded_jam_track_tracks.sql new file mode 100644 index 000000000..246b76425 --- /dev/null +++ b/db/up/recorded_jam_track_tracks.sql @@ -0,0 +1,15 @@ +ALTER TABLE recordings ADD COLUMN jam_track_id VARCHAR(64) REFERENCES jam_tracks(id); +ALTER TABLE recordings ADD COLUMN jam_track_initiator_id VARCHAR(64) REFERENCES users(id); + +CREATE TABLE recorded_jam_track_tracks ( + id BIGINT PRIMARY KEY, + user_id VARCHAR(64) REFERENCES users(id) ON DELETE CASCADE, + jam_track_track_id VARCHAR(64), + recording_id VARCHAR(64) NOT NULL, + discard BOOLEAN, + timeline JSON, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +ALTER TABLE recorded_jam_tracks ALTER COLUMN id SET DEFAULT nextval('tracks_next_tracker_seq'); \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/recorded_jam_track_track.rb b/ruby/lib/jam_ruby/models/recorded_jam_track_track.rb new file mode 100644 index 000000000..19907eb1c --- /dev/null +++ b/ruby/lib/jam_ruby/models/recorded_jam_track_track.rb @@ -0,0 +1,21 @@ +module JamRuby + # BackingTrack analog to JamRuby::RecordedTrack + class RecordedJamTrackTrack < ActiveRecord::Base + + belongs_to :user, :class_name => "JamRuby::User", :inverse_of => :recorded_jam_track_tracks + belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :recorded_jam_track_tracks + belongs_to :jam_track_track, :class_name => "JamRuby::JamTrackTrack", :inverse_of => :recorded_jam_track_tracks + + validates :user, presence: true + validates :jam_track_track, presence:true + + def self.create_from_jam_track_track(jam_track_track, recording) + recorded_backing_track = self.new + recorded_backing_track.recording = recording + recorded_backing_track.jam_track_track = jam_track_track + recorded_backing_track.save + recorded_backing_track + end + + end +end diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 9aff18f4b..183a94e81 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -890,8 +890,11 @@ var mediaType = mixer.media_type; var groupId = mixer.group_id; - // mediaType == null is for backwards compat with older clients. Can be removed soon - if(mediaType == null || mediaType == "" || mediaType == 'RecordingTrack') { + if(mediaType == 'MetronomeTrack' || groupId==ChannelGroupIds.MetronomeGroup) { + // Metronomes come across with a blank media type, so check group_id: + metronomeTrackMixers.push(mixer); + } + else if(mediaType == null || mediaType == "" || mediaType == 'RecordingTrack') { // additional check; if we can match an id in backing tracks or recorded backing track, // we need to remove it from the recorded track set, but move it to the backing track set @@ -922,9 +925,6 @@ } else if(mediaType == 'PeerMediaTrack' || mediaType == 'BackingTrack') { // BackingTrack backingTrackMixers.push(mixer); - } else if(mediaType == 'MetronomeTrack' || groupId==ChannelGroupIds.MetronomeGroup) { - // Metronomes come across with a blank media type, so check group_id: - metronomeTrackMixers.push(mixer); } else if(mediaType == 'JamTrack') { jamTrackMixers.push(mixer); mixer.group_id == ChannelGroupIds.MediaTrackGroup; @@ -1980,11 +1980,22 @@ rest.openBackingTrack({id: context.JK.CurrentSessionModel.id(), backing_track_path: result.file}) .done(function(response) { var openResult = context.jamClient.SessionOpenBackingTrackFile(result.file, false); - //context.JK.CurrentSessionModel.refreshCurrentSession(true); - sessionModel.setBackingTrack(result.file); + + if(openResult) { + sessionModel.setBackingTrack(result.file); + } + else { + app.notify({ + "title": "Couldn't Open Backing Track", + "text": "Is the file a valid audio file?", + "icon_url": "/assets/content/icon_alert_big.png" + }); + closeBackingTrack(); + } + }) .fail(function(jqXHR) { - app.notifyServerError(jqXHR, "Unable to Open BackingTrack For Playback"); + app.notifyServerError(jqXHR, "Unable to Open Backing Track For Playback"); }) } else { @@ -2443,8 +2454,6 @@ rest.openMetronome({id: sessionModel.id()}) .done(function() { context.jamClient.SessionOpenMetronome(120, "Click", 1, 0) - context.JK.CurrentSessionModel.refreshCurrentSession(true) - context.JK.CurrentSessionModel.refreshCurrentSession(true) }) .fail(function(jqXHR) { logger.debug(jqXHR, jqXHR) @@ -2506,8 +2515,8 @@ }) .fail(function(jqXHR) { app.notify({ - "title": "Couldn't Close BackingTrack", - "text": "Couldn't inform the server to close BackingTrack. msg=" + jqXHR.responseText, + "title": "Couldn't Close Backing Track", + "text": "Couldn't inform the server to close Backing Track. msg=" + jqXHR.responseText, "icon_url": "/assets/content/icon_alert_big.png" }); });