diff --git a/ruby/lib/jam_ruby/app/uploaders/jam_track_track_uploader.rb b/ruby/lib/jam_ruby/app/uploaders/jam_track_track_uploader.rb index 9defe1099..d2a80ce3d 100644 --- a/ruby/lib/jam_ruby/app/uploaders/jam_track_track_uploader.rb +++ b/ruby/lib/jam_ruby/app/uploaders/jam_track_track_uploader.rb @@ -23,6 +23,12 @@ class JamTrackTrackUploader < CarrierWave::Uploader::Base end def filename - "#{model.store_dir}/#{model.filename}" if model.id + if model.id + if mounted_as==:url_48 + "#{model.store_dir}/#{model.filename}" + else + "#{model.store_dir}/#{mounted_as}/#{model.filename}" + end + end end end diff --git a/ruby/lib/jam_ruby/jam_tracks_manager.rb b/ruby/lib/jam_ruby/jam_tracks_manager.rb index 81a1b7b4e..cf7ed79c7 100644 --- a/ruby/lib/jam_ruby/jam_tracks_manager.rb +++ b/ruby/lib/jam_ruby/jam_tracks_manager.rb @@ -12,13 +12,13 @@ module JamRuby @@log = Logging.logger[JamTracksManager] class << self - def save_jam_track_jkz(user, jam_track) + def save_jam_track_jkz(user, jam_track, bitrate=48) jam_track_right = jam_track.right_for_user(user) raise ArgumentError if jam_track_right.nil? - save_jam_track_right_jkz(jam_track_right) + save_jam_track_right_jkz(jam_track_right, bitrate) end - def save_jam_track_right_jkz(jam_track_right) + def save_jam_track_right_jkz(jam_track_right, bitrate=48) jam_track = jam_track_right.jam_track #py_root = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "jamtracks")) py_root = APP_CONFIG.jamtracks_dir @@ -31,7 +31,7 @@ module JamRuby # 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.filename) track_filename = File.join(tmp_dir, nm) - track_url = jam_track_track.sign_url + track_url = jam_track_track.sign_url(120, bitrate) copy_url_to_file(track_url, track_filename) copy_url_to_file(track_url, File.join(".", nm)) jam_file_opts << " -i '#{track_filename}+#{jam_track_track.part}'" @@ -54,11 +54,14 @@ module JamRuby #puts "stdout: #{out}, stderr: #{err}" raise ArgumentError, "Error calling python script: #{err}" if err.present? raise ArgumentError, "Error calling python script: #{out}" if out && (out.index("No track files specified") || out.index("Cannot find file")) - jam_track_right[:url] - + #raise ArgumentError, "output_jkz is empty #{output_jkz}" unless File.exists?(output_jkz) - - jam_track_right.url_48.store!(File.open(output_jkz, "rb")) + if bitrate==48 + jam_track_right.url_48.store!(File.open(output_jkz, "rb")) + else + jam_track_right.url_44.store!(File.open(output_jkz, "rb")) + end + jam_track_right.signed=true jam_track_right.downloaded_since_sign=false jam_track_right.private_key=File.read("#{tmp_dir}/skey.pem") diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index 3fb7fabdd..557316541 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -114,7 +114,7 @@ module JamRuby jam_track_rights.where("user_id=?", user).first end - def self.list_downloads(user, limit = 100, since = 0) + def self.list_downloads(user, limit = 100, since = 0, bitrate = 48) since = 0 unless since || since == '' # guard against nil downloads = [] @@ -122,16 +122,23 @@ module JamRuby .limit(limit) .where('jam_track_rights.id > ?', since) .each do |jam_track_right| - downloads << { + download = { :type => "jam_track", :id => jam_track_right.id.to_s, :jam_track_id => jam_track_right.jam_track_id, - :length => jam_track_right.length_48, - :md5 => jam_track_right.md5_48, - :url => jam_track_right.url_48, :created_at => jam_track_right.created_at, :next => jam_track_right.id } + if(bitrate==48) + download[:length] = jam_track_right.length_48 + download[:md5] = jam_track_right.md5_48 + download[:url] = jam_track_right.url_48 + else + download[:length] = jam_track_right.length_44 + download[:md5] = jam_track_right.md5_44 + download[:url] = jam_track_right.url_44 + end + downloads << download end next_id = downloads[-1][:next] if downloads.length > 0 diff --git a/ruby/lib/jam_ruby/models/jam_track_right.rb b/ruby/lib/jam_ruby/models/jam_track_right.rb index e113670b5..094339e27 100644 --- a/ruby/lib/jam_ruby/models/jam_track_right.rb +++ b/ruby/lib/jam_ruby/models/jam_track_right.rb @@ -62,12 +62,17 @@ module JamRuby else raise "Error sending notification #{self.errors}" end - end - def finish_sign(length, md5) + + def finish_sign(length, md5, bitrate) self.last_signed_at = Time.now - self.length = length - self.md5 = md5 + if bitrate==48 + self.length_48 = length + self.md5_48 = md5 + else + self.length_44 = length + self.md5_44 = md5 + end self.signed = true self.error_count = 0 self.error_reason = nil @@ -91,30 +96,41 @@ module JamRuby def delete_s3_files remove_url_48! + remove_url_44! end - def enqueue + def enqueue(bitrate=48) begin JamTrackRight.where(:id => self.id).update_all(:signing_queued_at => Time.now, :signing_started_at => nil, :last_signed_at => nil) - Resque.enqueue(JamTracksBuilder, self.id) + Resque.enqueue(JamTracksBuilder, self.id, bitrate: bitrate) true rescue Exception => e + puts "e: #{e}" # implies redis is down. we don't update started_at by bailing out here false 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 + def enqueue_if_needed(bitrate=48) state = signing_state - if state == 'SIGNED' || state == 'SIGNING' || state == 'QUEUED' false else - enqueue + enqueue(bitrate) true end end + + # @return true if signed && file exists for the bitrate specifed: + def ready?(bitrate=48) + if bitrate==48 + self.signed && self.url_48.present? && self.url_48.file.exists? + else + self.signed && self.url_44.present? && self.url_44.file.exists? + end + end + # returns easy to digest state field # SIGNED - the package is ready to be downloaded # ERROR - the package was built unsuccessfully diff --git a/ruby/lib/jam_ruby/resque/jam_tracks_builder.rb b/ruby/lib/jam_ruby/resque/jam_tracks_builder.rb index 6d352dece..f60d1f26b 100644 --- a/ruby/lib/jam_ruby/resque/jam_tracks_builder.rb +++ b/ruby/lib/jam_ruby/resque/jam_tracks_builder.rb @@ -7,7 +7,7 @@ require 'digest/md5' module JamRuby class JamTracksBuilder extend JamRuby::ResqueStats - + attr_accessor :bitrate @queue = :jam_tracks_builder def log @@ -16,9 +16,10 @@ module JamRuby attr_accessor :jam_track_right_id - def self.perform(jam_track_right_id) + def self.perform(jam_track_right_id, bitrate) jam_track_builder = JamTracksBuilder.new() jam_track_builder.jam_track_right_id = jam_track_right_id + jam_track_builder.bitrate=bitrate jam_track_builder.run end @@ -38,12 +39,11 @@ module JamRuby # track that it's started ( and avoid db validations ) JamTrackRight.where(:id => @jam_track_right.id).update_all(:signing_started_at => Time.now, :should_retry => false) - JamRuby::JamTracksManager.save_jam_track_right_jkz(@jam_track_right) + JamRuby::JamTracksManager.save_jam_track_right_jkz(@jam_track_right, bitrate) - length = @jam_track_right.url_48.size() + length = bitrate==48 ? @jam_track_right.url_48.size() : @jam_track_right.url_44.size() md5 = Digest::MD5.new - - @jam_track_right.finish_sign(length, md5.to_s) + @jam_track_right.finish_sign(length, md5.to_s, bitrate) log.info "Signed jamtrack to #{@jam_track_right[:url]}" diff --git a/ruby/spec/jam_ruby/models/jam_track_right_spec.rb b/ruby/spec/jam_ruby/models/jam_track_right_spec.rb index 4d81c68c4..e06e212b2 100644 --- a/ruby/spec/jam_ruby/models/jam_track_right_spec.rb +++ b/ruby/spec/jam_ruby/models/jam_track_right_spec.rb @@ -67,7 +67,7 @@ describe JamTrackRight do jam_track_track = FactoryGirl.create(:jam_track_track) jam_track = jam_track_track.jam_track - uploader = JamTrackTrackUploader.new(jam_track_track, :url) + uploader = JamTrackTrackUploader.new(jam_track_track, :url_48) uploader.store!(File.open(ogg_path, 'rb')) jam_track_track.save! diff --git a/ruby/spec/jam_ruby/models/jam_track_track_spec.rb b/ruby/spec/jam_ruby/models/jam_track_track_spec.rb index 7ffa09edd..ed128a097 100644 --- a/ruby/spec/jam_ruby/models/jam_track_track_spec.rb +++ b/ruby/spec/jam_ruby/models/jam_track_track_spec.rb @@ -47,7 +47,7 @@ describe JamTrackTrack do it "uploads to s3 with correct name, and then downloads via signed URL" do jam_track_track = FactoryGirl.create(:jam_track_track) - uploader = JamTrackTrackUploader.new(jam_track_track, :url) + uploader = JamTrackTrackUploader.new(jam_track_track, :url_48) uploader.store!(File.open(TRACK_NAME)) # uploads file jam_track_track.save!