about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/models/media_attachment.rb25
-rw-r--r--app/views/api/v1/statuses/_media.rabl1
2 files changed, 26 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]
 
diff --git a/app/views/api/v1/statuses/_media.rabl b/app/views/api/v1/statuses/_media.rabl
index 2f56c6d07..bcba78c95 100644
--- a/app/views/api/v1/statuses/_media.rabl
+++ b/app/views/api/v1/statuses/_media.rabl
@@ -3,3 +3,4 @@ attributes :id, :remote_url, :type
 node(:url)         { |media| full_asset_url(media.file.url(:original)) }
 node(:preview_url) { |media| full_asset_url(media.file.url(:small)) }
 node(:text_url)    { |media| media.local? ? medium_url(media) : nil }
+node(:meta)       { |media| media.file.meta }
\ No newline at end of file