about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
authorFrancis Chong <francis@ignition.hk>2017-04-26 09:48:12 +0800
committerEugen Rochko <eugen@zeonfederated.com>2017-04-26 03:48:12 +0200
commit193dddb433f27cc61e1977148cbd01d61bb87fbf (patch)
tree1e99680980a3c294b5296e79ab9fbc1dafcd0f13 /app/models
parent8fe36654efff73cb9b6800f7d1a57e6466f2ded3 (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.rb25
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]