73 lines
2.4 KiB
Ruby
73 lines
2.4 KiB
Ruby
require "find"
|
|
|
|
namespace :images do
|
|
task manifest: :environment do
|
|
root = ENV.fetch("DIR", Rails.root.join("public/data/original"))
|
|
|
|
paths = Find.find(root).lazy
|
|
paths = paths.reject { |path| File.directory?(path) }
|
|
|
|
paths.each do |path|
|
|
file = MediaFile.open(path)
|
|
|
|
hash = {
|
|
path: File.absolute_path(path),
|
|
name: File.basename(path, ".*"),
|
|
md5: file.md5,
|
|
size: file.file_size,
|
|
ext: file.file_ext,
|
|
w: file.width,
|
|
h: file.height,
|
|
}
|
|
|
|
puts hash.to_json
|
|
rescue StandardError => e
|
|
hash = {
|
|
path: File.absolute_path(path),
|
|
name: File.basename(path, ".*"),
|
|
md5: file.md5,
|
|
size: file.file_size,
|
|
error: e.message,
|
|
}
|
|
|
|
puts hash.to_json
|
|
end
|
|
end
|
|
|
|
desc "Backup images"
|
|
task :backup => :environment do
|
|
CurrentUser.user = User.system
|
|
sm = Danbooru.config.backup_storage_manager
|
|
tags = ENV["BACKUP_TAGS"]
|
|
posts = Post.system_tag_match(tags)
|
|
|
|
posts.find_each do |post|
|
|
sm.store_file(post.file(:preview), post, :preview) if post.has_preview?
|
|
sm.store_file(post.file(:crop), post, :crop) if post.has_cropped?
|
|
sm.store_file(post.file(:sample), post, :sample) if post.has_large?
|
|
sm.store_file(post.file(:original), post, :original)
|
|
end
|
|
end
|
|
|
|
desc "Regenerate thumbnails and samples"
|
|
task :regen => :environment do
|
|
tags = ENV["TAGS"]
|
|
|
|
Post.system_tag_match(tags).find_each do |post|
|
|
original_file = MediaFile.open(post.file(:original))
|
|
preview_file, crop_file, sample_file = UploadService::Utils.generate_resizes(original_file)
|
|
|
|
line = ""
|
|
line << "post ##{post.id}: "
|
|
line << "preview=#{preview_file.width}x#{preview_file.height}:#{preview_file.file_size.to_s(:human_size)} " if preview_file.present?
|
|
line << "crop=#{crop_file.width}x#{crop_file.height}:#{crop_file.file_size.to_s(:human_size)} " if crop_file.present?
|
|
line << "sample=#{sample_file.width}x#{sample_file.height}:#{sample_file.file_size.to_s(:human_size)} " if sample_file.present?
|
|
puts line
|
|
|
|
UploadService::Utils.distribute_files(preview_file, post, :preview) if preview_file.present?
|
|
UploadService::Utils.distribute_files(crop_file, post, :crop) if crop_file.present?
|
|
UploadService::Utils.distribute_files(sample_file, post, :large) if sample_file.present?
|
|
end
|
|
end
|
|
end
|