diff options
author | Francis Chong <francis@ignition.hk> | 2017-04-26 09:48:12 +0800 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-04-26 03:48:12 +0200 |
commit | 193dddb433f27cc61e1977148cbd01d61bb87fbf (patch) | |
tree | 1e99680980a3c294b5296e79ab9fbc1dafcd0f13 /app/models | |
parent | 8fe36654efff73cb9b6800f7d1a57e6466f2ded3 (diff) |
Add media dimensions (#2448)
* Fixes #1985 - add migration AddMediaAttachmentMeta, which add meta field to media_attachments - before saving attachment, set file meta if needed - add meta in api * add spec * align the “size” format for image and video * fix code climate * fixes media_attachment_spec.rb
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/media_attachment.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index a43c76c77..aae896d20 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -51,6 +51,7 @@ class MediaAttachment < ApplicationRecord before_create :set_shortcode before_post_process :set_type_and_extension + before_save :set_meta class << self private @@ -112,6 +113,30 @@ class MediaAttachment < ApplicationRecord file.instance_write :file_name, [basename, extension].delete_if(&:empty?).join('.') end + def set_meta + meta = populate_meta + return if meta == {} + file.instance_write :meta, meta + end + + def populate_meta + meta = {} + file.queued_for_write.each do |style, file| + begin + geo = Paperclip::Geometry.from_file file + meta[style] = { + width: geo.width.to_i, + height: geo.height.to_i, + size: "#{geo.width.to_i}x#{geo.height.to_i}", + aspect: geo.width.to_f / geo.height.to_f, + } + rescue Paperclip::Errors::NotIdentifiedByImageMagickError + meta[style] = {} + end + end + meta + end + def appropriate_extension mime_type = MIME::Types[file.content_type] |