56 lines
1.6 KiB
Ruby
56 lines
1.6 KiB
Ruby
class PixivUgoiraService
|
|
attr_reader :width, :height, :frame_data, :content_type
|
|
|
|
def self.regen(post)
|
|
service = new()
|
|
service.load(
|
|
:is_ugoira => true,
|
|
:ugoira_frame_data => post.pixiv_ugoira_frame_data.data
|
|
)
|
|
service.generate_resizes(post.file_path, post.large_file_path, post.preview_file_path, false)
|
|
end
|
|
|
|
def save_frame_data(post)
|
|
PixivUgoiraFrameData.create(:data => @frame_data, :content_type => @content_type, :post_id => post.id)
|
|
end
|
|
|
|
def generate_resizes(source_path, output_path, preview_path, delay = true)
|
|
# Run this a bit in the future to give the upload process time to move the file
|
|
if delay
|
|
PixivUgoiraConverter.delay(:queue => Socket.gethostname, :run_at => 2.seconds.from_now, :priority => -1).convert(source_path, output_path, preview_path, @frame_data)
|
|
else
|
|
PixivUgoiraConverter.convert(source_path, output_path, preview_path, @frame_data)
|
|
end
|
|
|
|
# since the resizes will be delayed, just touch the output file so the
|
|
# file distribution wont break
|
|
FileUtils.touch([output_path, preview_path])
|
|
end
|
|
|
|
def calculate_dimensions(source_path)
|
|
folder = Zip::File.new(source_path)
|
|
tempfile = Tempfile.new("ugoira-dimensions")
|
|
|
|
begin
|
|
folder.first.extract(tempfile.path) {true}
|
|
image_size = ImageSpec.new(tempfile.path)
|
|
@width = image_size.width
|
|
@height = image_size.height
|
|
ensure
|
|
tempfile.close
|
|
tempfile.unlink
|
|
end
|
|
end
|
|
|
|
def load(data)
|
|
if data[:is_ugoira]
|
|
@frame_data = data[:ugoira_frame_data]
|
|
@content_type = data[:ugoira_content_type]
|
|
end
|
|
end
|
|
|
|
def empty?
|
|
@frame_data.nil?
|
|
end
|
|
end
|