From 51429e8b5a1839208a61cabecb55d9c96ef36c7b Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 20 Nov 2015 06:57:32 -0600 Subject: [PATCH] * import of timtracks working --- db/manifest | 3 +- db/up/acappella.sql | 2 + ruby/lib/jam_ruby/jam_track_importer.rb | 45 +++++----- ruby/lib/jam_ruby/models/jam_track.rb | 21 +++++ ruby/lib/jam_ruby/models/jam_track_file.rb | 11 ++- .../lib/jam_ruby/models/jam_track_licensor.rb | 2 +- ruby/lib/jam_ruby/models/jam_track_track.rb | 83 +++++++++++++------ web/app/assets/javascripts/globals.js | 3 +- 8 files changed, 120 insertions(+), 50 deletions(-) create mode 100644 db/up/acappella.sql diff --git a/db/manifest b/db/manifest index d9e1fb8b2..825013c73 100755 --- a/db/manifest +++ b/db/manifest @@ -311,4 +311,5 @@ affiliate_partner_rate.sql track_downloads.sql jam_track_lang_idx.sql giftcard.sql -add_description_to_crash_dumps.sql \ No newline at end of file +add_description_to_crash_dumps.sql +acappella.sql \ No newline at end of file diff --git a/db/up/acappella.sql b/db/up/acappella.sql new file mode 100644 index 000000000..cf17e052d --- /dev/null +++ b/db/up/acappella.sql @@ -0,0 +1,2 @@ +INSERT INTO genres (id, description) values ('acapella', 'A Capella'); +ALTER TABLE jam_track_licensors ADD COLUMN slug VARCHAR UNIQUE; diff --git a/ruby/lib/jam_ruby/jam_track_importer.rb b/ruby/lib/jam_ruby/jam_track_importer.rb index 702c6200d..9f11806c5 100644 --- a/ruby/lib/jam_ruby/jam_track_importer.rb +++ b/ruby/lib/jam_ruby/jam_track_importer.rb @@ -431,7 +431,8 @@ module JamRuby if is_tim_tracks_storage? song = metalocation[(first_dash+3)..-1].strip - else + bits << song + elsif is_tency_storage? last_dash = metalocation.rindex('-') if last_dash song = metalocation[(first_dash+3)...last_dash].strip @@ -467,24 +468,14 @@ module JamRuby end end - # if you change this, it will (at least without some work )break development usage of jamtracks - def gen_plan_code(original_artist, name) - # remove all non-alphanumeric chars from artist as well as name - artist_code = original_artist.gsub(/[^0-9a-z]/i, '').downcase - name_code = name.gsub(/[^0-9a-z]/i, '').downcase - "jamtrack-#{artist_code[0...20]}-#{name_code}"[0...50] # make sure it's a max of 50 long - end - def dry_run_metadata(metadata, original_artist, name) self.name = metadata["name"] || name original_artist = metadata["original_artist"] || original_artist - plan_code = metadata["plan_code"] || gen_plan_code(original_artist, self.name) description = metadata["description"] @@log.debug("#{self.name} original_artist=#{original_artist}") - @@log.debug("#{self.name} plan_code=#{plan_code}") true end @@ -623,7 +614,6 @@ module JamRuby jam_track.year = metadata[:year] jam_track.genres = determine_genres(metadata) jam_track.language = determine_language(metadata) - jam_track.plan_code = metadata["plan_code"] || gen_plan_code(jam_track.original_artist, jam_track.name) jam_track.price = 1.99 jam_track.reproduction_royalty_amount = nil jam_track.reproduction_royalty = true @@ -636,19 +626,25 @@ module JamRuby jam_track.alternative_license_status = false jam_track.hfa_license_desired = true jam_track.server_fixation_date = Time.now - jam_track.slug = metadata['slug'] - unless jam_track.slug - jam_track.generate_slug - end - if is_tency_storage? jam_track.vendor_id = metadata[:id] - jam_track.licensor = JamTrackLicensor.find_by_name('Tency Music') + jam_track.licensor = JamTrackLicensor.find_by_name!('Tency Music') #add_licensor_metadata('Tency Music', metalocation) elsif is_tim_tracks_storage? jam_track.vendor_id = metadata[:id] - jam_track.licensor = JamTrackLicensor.find_by_name('Tim Waurick') + jam_track.licensor = JamTrackLicensor.find_by_name!('Tim Waurick') end + jam_track.slug = metadata['slug'] + if jam_track.slug.nil? + jam_track.generate_slug + end + jam_track.plan_code = metadata["plan_code"] + if jam_track.plan_code.nil? + jam_track.gen_plan_code + end + + + else if !options[:resync_audio] #@@log.debug("#{self.name} skipped because it already exists in database") @@ -798,6 +794,9 @@ module JamRuby elsif potential_instrument == 'claps' || potential_instrument == 'hand claps' instrument = 'other' part = 'Claps' + elsif potential_instrument == 'snaps' || potential_instrument == 'snap' + instrument = 'other' + part = 'Snaps' else found_instrument = Instrument.find_by_id(potential_instrument) if found_instrument @@ -1383,6 +1382,7 @@ module JamRuby next end + puts "track.original_audio_s3_path #{track.original_audio_s3_path}" basename = File.basename(track.original_audio_s3_path) s3_dirname = File.dirname(track.original_audio_s3_path) @@ -1393,6 +1393,7 @@ module JamRuby mp3_48000_s3_path = track.filename(mp3_48000_filename) aac_48000_s3_path = track.filename(aac_48000_filename) + puts "mp3_48000_s3_path #{mp3_48000_s3_path}" track.skip_uploader = true if skip_audio_upload @@ -2481,7 +2482,11 @@ module JamRuby else begin data = s3_manager.read_all(metalocation) - return YAML.load(data) + meta = YAML.load(data) + + if is_tim_tracks_storage? + meta[:genres] = ['acapella'] + end rescue AWS::S3::Errors::NoSuchKey return nil end diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index 611cdc029..aea976d89 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -469,6 +469,27 @@ module JamRuby def generate_slug self.slug = sluggarize(original_artist) + '-' + sluggarize(name) + + if licensor + raise "no slug on licensor #{licensor.id}" if licensor.slug.nil? + self.slug << "-" + licensor.slug + end + end + + def gen_plan_code + # remove all non-alphanumeric chars from artist as well as name + artist_code = original_artist.gsub(/[^0-9a-z]/i, '').downcase + name_code = name.gsub(/[^0-9a-z]/i, '').downcase + self.plan_code = "jamtrack-#{artist_code[0...20]}-#{name_code}" + + if licensor + raise "no slug on licensor #{licensor.id}" if licensor.slug.nil? + self.plan_code << "-" + licensor.slug + end + + self.plan_code = self.plan_code[0...50] # make sure it's a max of 50 long + + end def to_s diff --git a/ruby/lib/jam_ruby/models/jam_track_file.rb b/ruby/lib/jam_ruby/models/jam_track_file.rb index e7c880165..e31a95ba2 100644 --- a/ruby/lib/jam_ruby/models/jam_track_file.rb +++ b/ruby/lib/jam_ruby/models/jam_track_file.rb @@ -27,9 +27,18 @@ module JamRuby "jam_track_files" end + def licensor_suffix + suffix = '' + if jam_track.licensor + raise "no licensor name" if jam_track.licensor.name.nil? + suffix = " - #{jam_track.licensor.name}" + end + suffix + end + # create name of the file def filename(original_name) - "#{store_dir}/#{jam_track.original_artist}/#{jam_track.name}/#{original_name}" + "#{store_dir}/#{jam_track.original_artist}/#{jam_track.name}#{licensor_suffix}/#{original_name}" end def manually_uploaded_filename diff --git a/ruby/lib/jam_ruby/models/jam_track_licensor.rb b/ruby/lib/jam_ruby/models/jam_track_licensor.rb index e06e292bc..776418159 100644 --- a/ruby/lib/jam_ruby/models/jam_track_licensor.rb +++ b/ruby/lib/jam_ruby/models/jam_track_licensor.rb @@ -4,7 +4,7 @@ module JamRuby table_name = 'jam_track_licensors' attr_accessible :name, :description, :attention, :address_line_1, :address_line_2, - :city, :state, :zip_code, :contact, :email, :phone, as: :admin + :city, :state, :zip_code, :contact, :email, :phone, :slug, as: :admin validates :name, presence: true, uniqueness: true, length: {maximum: 200} validates :description, length: {maximum: 1000} diff --git a/ruby/lib/jam_ruby/models/jam_track_track.rb b/ruby/lib/jam_ruby/models/jam_track_track.rb index 22e8f17f3..f1cf8d8e0 100644 --- a/ruby/lib/jam_ruby/models/jam_track_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track_track.rb @@ -41,9 +41,19 @@ module JamRuby "jam_track_tracks" end + + def licensor_suffix + suffix = '' + if jam_track.licensor + raise "no licensor name" if jam_track.licensor.name.nil? + suffix = " - #{jam_track.licensor.name}" + end + suffix + end + # create name of the file def filename(original_name) - "#{store_dir}/#{jam_track.original_artist}/#{jam_track.name}/#{original_name}" + "#{store_dir}/#{jam_track.original_artist}/#{jam_track.name}#{licensor_suffix}/#{original_name}" end # create name of the preview file. @@ -54,7 +64,7 @@ module JamRuby end def preview_directory - "jam_track_previews/#{jam_track.original_artist}/#{jam_track.name}" + "jam_track_previews/#{jam_track.original_artist}/#{jam_track.name}#{licensor_suffix}" end def has_preview? @@ -196,6 +206,7 @@ module JamRuby uuid = SecureRandom.uuid output = File.join(tmp_dir, "#{uuid}.ogg") output_mp3 = File.join(tmp_dir, "#{uuid}.mp3") + output_aac = File.join(tmp_dir, "#{uuid}.aac") start = self.preview_start_time.to_f / 1000 stop = start + 20 @@ -225,35 +236,55 @@ module JamRuby @@log.debug("fail #{result_code}") @preview_generate_error = "unable to execute mp3 convert command #{convert_output}" else - ogg_digest = ::Digest::MD5.file(output) - mp3_digest = ::Digest::MD5.file(output_mp3) - self["preview_md5"] = ogg_md5 = ogg_digest.hexdigest - self["preview_mp3_md5"] = mp3_md5 = mp3_digest.hexdigest - @@log.debug("uploading ogg preview to #{self.preview_filename('ogg')}") - s3_public_manager.upload(self.preview_filename(ogg_md5, 'ogg'), output, content_type: 'audio/ogg', content_md5: ogg_digest.base64digest) - @@log.debug("uploading mp3 preview to #{self.preview_filename('mp3')}") - s3_public_manager.upload(self.preview_filename(mp3_md5, 'mp3'), output_mp3, content_type: 'audio/mpeg', content_md5: mp3_digest.base64digest) + convert_aac_cmd = "#{APP_CONFIG.ffmpeg_path} -i \"#{output}\" -c:a libfdk_aac -b:a 192k \"#{output_aac}\"" + @@log.debug("converting to aac using: " + convert_aac_cmd) - self.skip_uploader = true + convert_output = `#{convert_aac_cmd}` - original_ogg_preview_url = self["preview_url"] - original_mp3_preview_url = self["preview_mp3_url"] + result_code = $?.to_i - # and finally update the JamTrackTrack with the new info - self["preview_url"] = self.preview_filename(ogg_md5, 'ogg') - self["preview_length"] = File.new(output).size - # and finally update the JamTrackTrack with the new info - self["preview_mp3_url"] = self.preview_filename(mp3_md5, 'mp3') - self["preview_mp3_length"] = File.new(output_mp3).size - self.save! + if result_code != 0 + @@log.debug("fail #{result_code}") + @preview_generate_error = "unable to execute aac convert command #{convert_output}" + else - # if all that worked, now delete old previews, if present - begin - s3_public_manager.delete(original_ogg_preview_url) if original_ogg_preview_url && original_ogg_preview_url != self["preview_url"] - s3_public_manager.delete(original_mp3_preview_url) if original_mp3_preview_url && original_mp3_preview_url != track["preview_mp3_url"] - rescue - puts "UNABLE TO CLEANUP OLD PREVIEW URL" + ogg_digest = ::Digest::MD5.file(output) + mp3_digest = ::Digest::MD5.file(output_mp3) + aac_digest = ::Digest::MD5.file(output_aac) + self["preview_md5"] = ogg_md5 = ogg_digest.hexdigest + self["preview_mp3_md5"] = mp3_md5 = mp3_digest.hexdigest + self["preview_aac_md5"] = aac_md5 = mp3_digest.hexdigest + + @@log.debug("uploading ogg preview to #{self.preview_filename('ogg')}") + s3_public_manager.upload(self.preview_filename(ogg_md5, 'ogg'), output, content_type: 'audio/ogg', content_md5: ogg_digest.base64digest) + @@log.debug("uploading mp3 preview to #{self.preview_filename('mp3')}") + s3_public_manager.upload(self.preview_filename(mp3_md5, 'mp3'), output_mp3, content_type: 'audio/mpeg', content_md5: mp3_digest.base64digest) + @@log.debug("uploading aac preview to #{self.preview_filename('aac')}") + s3_public_manager.upload(self.preview_filename(aac_md5, 'aac'), output_aac, content_type: 'audio/aac', content_md5: aac_digest.base64digest) + + self.skip_uploader = true + + original_ogg_preview_url = self["preview_url"] + original_mp3_preview_url = self["preview_mp3_url"] + original_aac_preview_url = self["preview_aac_url"] + + self["preview_url"] = self.preview_filename(ogg_md5, 'ogg') + self["preview_length"] = File.new(output).size + self["preview_mp3_url"] = self.preview_filename(mp3_md5, 'mp3') + self["preview_mp3_length"] = File.new(output_mp3).size + self["preview_aac_url"] = self.preview_filename(aac_md5, 'aac') + self["preview_aac_length"] = File.new(output_aac).size + self.save! + + # if all that worked, now delete old previews, if present + begin + s3_public_manager.delete(original_ogg_preview_url) if original_ogg_preview_url && original_ogg_preview_url != self["preview_url"] + s3_public_manager.delete(original_mp3_preview_url) if original_mp3_preview_url && original_mp3_preview_url != track["preview_mp3_url"] + s3_public_manager.delete(original_aac_preview_url) if original_aac_preview_url && original_aac_preview_url != track["preview_aac_url"] + rescue + puts "UNABLE TO CLEANUP OLD PREVIEW URL" + end end end diff --git a/web/app/assets/javascripts/globals.js b/web/app/assets/javascripts/globals.js index f5b06edef..8c5895a7f 100644 --- a/web/app/assets/javascripts/globals.js +++ b/web/app/assets/javascripts/globals.js @@ -191,7 +191,8 @@ 48: {"title": "", "message": ""}, // RECORDING_DONE 49: {"title": "", "message": ""}, // VIDEO_WINDOW_OPENED 50: {"title": "", "message": ""}, // VIDEO_WINDOW_CLOSED - 51: {"title": "", "message": ""} // LAST_ALERT + 51: {"title": "", "message": ""}, // VST_CHANGED + 52: {"title": "", "message": ""} // LAST_ALERT }; // add the alert's name to the ALERT_TYPES structure