summaryrefslogtreecommitdiffstats
path: root/app/controllers/api
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2020-03-08 23:56:18 +0100
committerGitHub <noreply@github.com>2020-03-08 23:56:18 +0100
commit9660aa4543deff41c60d131e081137f84e771499 (patch)
tree8809339341484045802fa46526c798ad0e68fb2c /app/controllers/api
parent764b89939fe2fcb8c4389738af8685949104c144 (diff)
Change local media attachments to perform heavy processing asynchronously (#13210)
Fix #9106
Diffstat (limited to 'app/controllers/api')
-rw-r--r--app/controllers/api/v1/media_controller.rb29
-rw-r--r--app/controllers/api/v2/media_controller.rb12
2 files changed, 35 insertions, 6 deletions
diff --git a/app/controllers/api/v1/media_controller.rb b/app/controllers/api/v1/media_controller.rb
index d87d7b94668..0bb3d0d27b7 100644
--- a/app/controllers/api/v1/media_controller.rb
+++ b/app/controllers/api/v1/media_controller.rb
@@ -3,25 +3,42 @@
class Api::V1::MediaController < Api::BaseController
before_action -> { doorkeeper_authorize! :write, :'write:media' }
before_action :require_user!
+ before_action :set_media_attachment, except: [:create]
+ before_action :check_processing, except: [:create]
def create
- @media = current_account.media_attachments.create!(media_params)
- render json: @media, serializer: REST::MediaAttachmentSerializer
+ @media_attachment = current_account.media_attachments.create!(media_attachment_params)
+ render json: @media_attachment, serializer: REST::MediaAttachmentSerializer
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
render json: file_type_error, status: 422
rescue Paperclip::Error
render json: processing_error, status: 500
end
+ def show
+ render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment
+ end
+
def update
- @media = current_account.media_attachments.where(status_id: nil).find(params[:id])
- @media.update!(media_params)
- render json: @media, serializer: REST::MediaAttachmentSerializer
+ @media_attachment.update!(media_attachment_params)
+ render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment
end
private
- def media_params
+ def status_code_for_media_attachment
+ @media_attachment.not_processed? ? 206 : 200
+ end
+
+ def set_media_attachment
+ @media_attachment = current_account.media_attachments.unattached.find(params[:id])
+ end
+
+ def check_processing
+ render json: processing_error, status: 422 if @media_attachment.processing_failed?
+ end
+
+ def media_attachment_params
params.permit(:file, :description, :focus)
end
diff --git a/app/controllers/api/v2/media_controller.rb b/app/controllers/api/v2/media_controller.rb
new file mode 100644
index 00000000000..0c1baf01d0b
--- /dev/null
+++ b/app/controllers/api/v2/media_controller.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+class Api::V2::MediaController < Api::V1::MediaController
+ def create
+ @media_attachment = current_account.media_attachments.create!({ delay_processing: true }.merge(media_attachment_params))
+ render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: 202
+ rescue Paperclip::Errors::NotIdentifiedByImageMagickError
+ render json: file_type_error, status: 422
+ rescue Paperclip::Error
+ render json: processing_error, status: 500
+ end
+end