diff --git a/app/workers/thumbnail_generator_worker.rb b/app/workers/thumbnail_generator_worker.rb index a4c2d287d54112932f3e22369e6e1f6d406930c1..d84aedf5016787fdf9264efd84a4fb4a7813926c 100644 --- a/app/workers/thumbnail_generator_worker.rb +++ b/app/workers/thumbnail_generator_worker.rb @@ -2,42 +2,23 @@ class ThumbnailGeneratorWorker include Sidekiq::Worker include RepositoriesProxy + include Thumbnail::Creation def perform(learning_object_id) - root_dir = Rails.root.join('public') - thumbnails_dir = "/thumbnails" - create_dir("#{root_dir}#{thumbnails_dir}") - - default_size = "600x600" - default_thumbnail = "#{thumbnails_dir}/default_thumbnail.jpg" - item = learning_object_repository.find(learning_object_id) - retrieve_link = item.get_bitstream_retrievelink_of "ORIGINAL" filename = item.get_bitstream_filename_of "ORIGINAL" - unless accepted_formats.include? File.extname(filename) - item.thumbnail = default_thumbnail - else - begin - file = download_bitstream(retrieve_link,filename) - rescue - puts "ERROR!!!" - else - item_hash = encode_hash_from item.to_json - - item.thumbnail = "#{thumbnails_dir}/#{item_hash}_#{default_size}.jpg" - - thumbnail_output_path = "#{root_dir}#{item.thumbnail}" - - if accepted_video_formats.include? File.extname(filename) - generate_video_thumbnail(file,default_size,thumbnail_output_path) - else - generate_image_thumbnail(file,default_size,thumbnail_output_path) - end + size = "360x360" - delete_downloaded_bitstream(file) - end + begin + retrieve_link = item.get_bitstream_retrievelink_of "ORIGINAL" + file = download_bitstream(retrieve_link,filename) + rescue + puts "ERROR!!! Some error occurred during file download." + else + item.thumbnail = generate_thumbnail(file,filename,size) + delete_downloaded_bitstream(file) end learning_object_repository.update_property(item,"thumbnail",item.thumbnail) @@ -46,33 +27,6 @@ class ThumbnailGeneratorWorker private - def encode_hash_from(object) - Digest::SHA1.hexdigest object - end - - def create_dir(target) - unless File.directory?(target) - FileUtils.mkdir(target, :mode => 0700) - end - end - - def generate_video_thumbnail(input,geom,output) - movie = FFMPEG::Movie.new(input) - frame = (movie.duration * 25/100).floor - movie.screenshot(output, - { seek_time: frame, resolution: geom }, - preserve_aspect_ratio: :width) - end - - def generate_image_thumbnail(input,geom,output) - # Read the image and resize it. The `change_geometry' method - # computes the new image geometry and yields to a block. The - # return value of the block is the return value of the method. - img = Magick::Image.read(input)[0] - img.change_geometry!(geom) { |cols, rows| img.thumbnail! cols, rows } - img.write(output) - end - def delete_downloaded_bitstream(file) File.unlink(file) if File.exist?(file) end @@ -96,20 +50,4 @@ class ThumbnailGeneratorWorker return output_file end - def accepted_video_formats - [".mp4", ".wmv"] - end - - def accepted_image_formats - [".jpg", ".gif", ".png"] - end - - def accepted_other_formats - [".pdf"] - end - - def accepted_formats - return accepted_video_formats + accepted_image_formats + accepted_other_formats - end - end