* clicktrack support

This commit is contained in:
Seth Call 2015-11-30 17:54:17 -06:00
parent b7cbb86e3b
commit e3b4b2324b
20 changed files with 125 additions and 44 deletions

View File

@ -32,6 +32,7 @@ ActiveAdmin.register_page "Fake Purchaser" do
jam_track_right.user = user
jam_track_right.jam_track = jam_track
jam_track_right.is_test_purchase = true
jam_track_right.version = jam_track.version
jam_track_right.save!
count = count + 1
end

View File

@ -313,4 +313,5 @@ jam_track_lang_idx.sql
giftcard.sql
add_description_to_crash_dumps.sql
acappella.sql
purchasable_gift_cards.sql
purchasable_gift_cards.sql
versionable_jamtracks.sql

View File

@ -0,0 +1 @@
ALTER TABLE jam_track_rights ADD COLUMN version VARCHAR NOT NULL DEFAULT '0';

View File

@ -56,7 +56,7 @@ module JamRuby
#track.original_filename = wav_file
click_track.original_audio_s3_path = click_track_file[:original_filename]
click_track.track_type = 'Click'
click_track.part = 'Click'
click_track.part = 'Clicktrack'
click_track.instrument_id = 'computer'
click_track.jam_track = jam_track
click_track.position = 10000
@ -67,8 +67,12 @@ module JamRuby
end
end
jam_track.increment_version!
# with the click track in hand, flesh out the details
synchronize_audio_track(jam_track, tmp_dir, false, click_track)
finish('success', nil)
end
end
end
@ -1255,7 +1259,6 @@ module JamRuby
@@log.debug("#{self.name} track! instrument: #{parsed_wav[:instrument] ? parsed_wav[:instrument] : 'N/A'}, part: #{parsed_wav[:part] ? parsed_wav[:part] : 'N/A'}, filename: #{parsed_wav[:filename]} ")
end
track.instrument_id = parsed_wav[:instrument] || 'other'
track.track_type = 'Track'
track.part = parsed_wav[:part] || "Other #{unknowns}"
@ -1266,6 +1269,13 @@ module JamRuby
elsif parsed_wav[:type] == :clickwav
file.file_type = 'ClickWav'
addt_files << file
# and also add a JamTrackTrack for this click track
track.track_type = 'Click'
track.part = 'Clicktrack'
track.instrument_id = 'computer'
track.position = 10000
tracks << track
elsif parsed_wav[:type] == :precount
file.file_type = 'Precount'
file.precount_num = parsed_wav[:precount_num]

View File

@ -41,7 +41,7 @@ module JamRuby
jam_file_opts=""
jam_track.jam_track_tracks.each do |jam_track_track|
next if jam_track_track.track_type != "Track" # master mixes do not go into the JKZ
next if jam_track_track.track_type == "Master" # master mixes do not go into the JKZ
# use the jam_track_track ID as the filename.ogg/.wav, because it's important metadata
nm = jam_track_track.id + File.extname(jam_track_track.url_by_sample_rate(sample_rate))
@ -52,7 +52,8 @@ module JamRuby
step = bump_step(jam_track_right, step)
copy_url_to_file(track_url, track_filename)
jam_file_opts << " -i #{Shellwords.escape("#{track_filename}+#{jam_track_track.part}")}"
part = jam_track_track.track_type == 'Click' ? 'ClickTrack' : jam_track_track.part
jam_file_opts << " -i #{Shellwords.escape("#{track_filename}+#{part}")}"
end
#puts "LS + " + `ls -la '#{tmp_dir}'`

View File

@ -86,6 +86,10 @@ module JamRuby
after_save :sync_reproduction_royalty
after_save :sync_onboarding_exceptions
def increment_version
self.version = version.to_i + 1
save!
end
def sync_reproduction_royalty
@ -341,7 +345,7 @@ module JamRuby
query = query.where('genre_id = ? ', options[:genre])
end
query = query.where("jam_track_tracks.instrument_id = '#{options[:instrument]}' and jam_track_tracks.track_type != 'Master'") unless options[:instrument].blank?
query = query.where("jam_track_tracks.instrument_id = '#{options[:instrument]}' and jam_track_tracks.track_type = 'Track'") unless options[:instrument].blank?
query = query.where("jam_tracks.sales_region = '#{options[:availability]}'") unless options[:availability].blank?
# FIXME: n+1 queries for rights and genres

View File

@ -14,6 +14,7 @@ module JamRuby
belongs_to :last_mixdown, class_name: 'JamRuby::JamTrackMixdown', foreign_key: 'last_mixdown_id', inverse_of: :jam_track_right
belongs_to :last_stem, class_name: 'JamRuby::JamTrackTrack', foreign_key: 'last_stem_id', inverse_of: :jam_track_right
validates :version, presence: true
validates :user, presence: true
validates :jam_track, presence: true
validates :is_test_purchase, inclusion: {in: [true, false]}
@ -133,8 +134,33 @@ module JamRuby
end
end
def cleanup_old_package!
if self.jam_track.version != self.version
delete_s3_files
self[:url_48] = nil
self[:url_44] = nil
self.signing_queued_at = nil
self.signing_started_at_48 = nil
self.signing_started_at_44 = nil
self.last_signed_at = nil
self.current_packaging_step = nil
self.packaging_steps = nil
self.should_retry = false
self.signing_44 = false
self.signing_48 = false
self.signed_44 = false
self.signed_48 = false
self.queued = false
self.version = self.jam_track.version
self.save!
end
end
# if the job is already signed, just queued up for signing, or currently signing, then don't enqueue... otherwise fire it off
def enqueue_if_needed(sample_rate=48)
# delete any package that's out dated
cleanup_old_package!
state = signing_state(sample_rate)
if state == 'SIGNED' || state == 'SIGNING' || state == 'QUEUED'
false
@ -148,9 +174,9 @@ module JamRuby
# @return true if signed && file exists for the sample_rate specifed:
def ready?(sample_rate=48)
if sample_rate==48
self.signed_48 && self.url_48.present? && self.url_48.file.exists?
self.signed_48 && self.url_48.present? && self.url_48.file.exists? && self.version == self.jam_track.version
else
self.signed_44 && self.url_44.present? && self.url_44.file.exists?
self.signed_44 && self.url_44.present? && self.url_44.file.exists? && self.version == self.jam_track.version
end
end

View File

@ -75,7 +75,7 @@ module JamRuby
sqlstr = "'#{instruments.join("','")}'"
rel = rel.joins(:jam_track_tracks)
rel = rel.where("jam_track_tracks.instrument_id IN (#{sqlstr})")
rel = rel.where("jam_track_tracks.track_type != 'Master'")
rel = rel.where("jam_track_tracks.track_type = 'Track'")
end
end

View File

@ -73,6 +73,7 @@ module JamRuby
def self.ios_purchase(current_user, jam_track, receipt)
jam_track_right = JamRuby::JamTrackRight.find_or_create_by_user_id_and_jam_track_id(current_user.id, jam_track.id) do |jam_track_right|
jam_track_right.redeemed = false
jam_track_right.version = jam_track.version
end
end
@ -328,6 +329,7 @@ module JamRuby
# create a JamTrackRight (this needs to be in a transaction too to make sure we don't make these by accident)
jam_track_right = JamRuby::JamTrackRight.find_or_create_by_user_id_and_jam_track_id(current_user.id, jam_track.id) do |jam_track_right|
jam_track_right.redeemed = shopping_cart.free?
jam_track_right.version = jam_track.version
end
# also if the purchase was a free one, then:

View File

@ -369,8 +369,8 @@ context.JK.DownloadJamTrack = class DownloadJamTrack
@trackDetail = context.jamClient.JamTrackGetTrackDetail ("#{@jamTrack.id}-#{@sampleRateForFilename}")
if @trackDetail.version?
@logger.error("after invalidating package, the version is still wrong!")
throw "after invalidating package, the version is still wrong!"
@logger.error("after invalidating package, the version is still wrong!", @trackDetail)
throw "after invalidating package, the version is still wrong! #{@trackDetail.version}"
switch @trackDetail.key_state
when 'pending'

View File

@ -30,19 +30,21 @@ MIX_MODES = context.JK.MIX_MODES
)
for track in jamtrack.tracks
trackRow.tracks.push(track)
if track.track_type=='Master'
track.instrument_desc = "Master"
else
inst = '../assets/content/icon_instrument_default24.png'
if track.instrument?
if track.instrument.id in @instrument_logo_map
inst = @instrument_logo_map[track.instrument.id].asset
track.instrument_desc = track.instrument.description
track.instrument_url = inst
if track.part != ''
track.instrument_desc += ' (' + track.part + ')'
if track.track_type == 'Master' || track.track_type == 'Track'
trackRow.tracks.push(track)
if track.track_type == 'Master'
track.instrument_desc = "Master"
else if track.track_type == 'Track'
inst = '../assets/content/icon_instrument_default24.png'
if track.instrument?
if track.instrument.id in @instrument_logo_map
inst = @instrument_logo_map[track.instrument.id].asset
track.instrument_desc = track.instrument.description
track.instrument_url = inst
if track.part != ''
track.instrument_desc += ' (' + track.part + ')'
trackRow.free_state = if @state.is_free then 'free' else 'non-free'

View File

@ -35,19 +35,22 @@ MIX_MODES = context.JK.MIX_MODES
)
###
for track in jamtrack.tracks
trackRow.tracks.push(track)
if track.track_type=='Master'
track.instrument_desc = "Master"
else
inst = '../assets/content/icon_instrument_default24.png'
if track.instrument?
if track.instrument.id in @instrument_logo_map
inst = @instrument_logo_map[track.instrument.id].asset
track.instrument_desc = track.instrument.description
track.instrument_url = inst
if track.part != ''
track.instrument_desc += ' (' + track.part + ')'
if track.track_type == 'Master' || track.track_type == 'Track'
trackRow.tracks.push(track)
if track.track_type == 'Master'
track.instrument_desc = "Master"
else if track.track_type == 'Track'
inst = '../assets/content/icon_instrument_default24.png'
if track.instrument?
if track.instrument.id in @instrument_logo_map
inst = @instrument_logo_map[track.instrument.id].asset
track.instrument_desc = track.instrument.description
track.instrument_url = inst
if track.part != ''
track.instrument_desc += ' (' + track.part + ')'
trackRow.free_state = if @state.is_free then 'free' else 'non-free'

View File

@ -32,6 +32,11 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
mixins: mixins
computeWeight: (jam_track_track) ->
weight = switch
when jam_track_track.track_type == 'Master' then 0
when jam_track_track.track_type == 'Click' then 10000
else jam_track_track.position
onJamTrackPlayerStoreChanged: (changes) ->
#logger.debug("PopupMediaControls: jamtrack changed", changes)
@ -222,9 +227,16 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
active = jamTrack.last_stem_id?
trackOptions = []
for track in jamTrack.tracks
if track.track_type == 'Track'
jamTrack.tracks.sort((a, b) =>
aWeight = @computeWeight(a)
bWeight = @computeWeight(b)
return aWeight - bWeight
)
for track in jamTrack.tracks
if track.track_type == 'Track' || track.track_type == 'Click'
if track.instrument
instrumentId = track.instrument.id
@ -239,7 +251,6 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
boundStemPlayClick = this.downloadStem.bind(this)
boundStemChange = this.stemChanged.bind(this)
console.log("jamTrack.lastStemId", jamTrack.last_stem_id)
myMixdowns.push `
<div key={track.id} className={classNames({'stem-track' : true, 'mixdown-display': true, 'active' : active})}>
<div className="mixdown-name">
@ -267,8 +278,12 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
tracks = []
if jamTrack?
for track in jamTrack.tracks
if track.track_type == 'Track'
if track.instrument
if track.track_type == 'Track' || track.track_type == 'Click'
if track.track_type == 'Click'
instrumentId = track.instrument.id
instrumentDescription = 'Clicktrack'
part = ''
else if track.instrument
instrumentId = track.instrument.id
instrumentDescription = track.instrument.description
if track.part? && track.part != instrumentDescription
@ -280,7 +295,7 @@ mixins.push(Reflux.listenTo(JamTrackPlayerStore, 'onJamTrackPlayerStoreChanged')
tracks.push(`
<tr className="stem">
<td><img src={context.JK.getInstrumentIcon24(instrumentId)} className="instrument-icon" /> {instrumentDescription} {part}</td>
<td className="mute"><input type="checkbox" className="stem-mute" data-stem-id={track.id} /></td>
<td className="mute"><input type="checkbox" className="stem-mute" data-stem-id={track.id} defaultChecked={track.track_type == 'Click'}/></td>
</tr>`)
stems = `<div key="stems" className="stems">

View File

@ -248,7 +248,7 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged'))
trackOptions = []
for track in jamTrack.tracks
if track.track_type == 'Track'
if track.track_type == 'Track' || track.track_type == 'Click'
if track.instrument
instrumentId = track.instrument.id

View File

@ -402,6 +402,9 @@ MIX_MODES = context.JK.MIX_MODES;
else
trackName = instrumentName
if jamTrack.track_type == 'Click'
trackName = 'Clicktrack'
data =
name: jamTrackName
trackName: trackName

View File

@ -70,7 +70,7 @@ context = window
jamTracks: () ->
if @session && @session.jam_track
@session.jam_track.tracks.filter((track)->
track.track_type == 'Track'
track.track_type == 'Track' || track.track_type == 'Click'
)
else
null

View File

@ -135,7 +135,7 @@ JamTrackActions = @JamTrackActions
@trackDetail = context.jamClient.JamTrackGetTrackDetail (fqId)
if @trackDetail.version?
logger.error("after invalidating package, the version is still wrong!")
logger.error("after invalidating package, the version is still wrong!", @trackDetail)
throw "after invalidating package, the version is still wrong!"
if @jamTrack.activeMixdown.client_state == 'cant_open'

View File

@ -41,6 +41,10 @@
context._.each(jam_track.tracks, function (track) {
if (track.track_type == 'Click') {
return;
}
var $element = $('<div class="jam-track-preview-holder"></div>')
$previews.append($element);

View File

@ -30,6 +30,10 @@
context._.each(jam_track.tracks, function (track) {
if (track.track_type == 'Click') {
return;
}
var $element = $('<div class="jam-track-preview-holder"></div>')
$previews.append($element);

View File

@ -40,6 +40,10 @@
context._.each(jam_track.tracks, function (track) {
if (track.track_type == 'Click') {
return;
}
var $element = $('<div class="jam-track-preview-holder"></div>')
$previews.append($element);