about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
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]