Browse Source

revisted fix for #462

Moved validation to services/post_status_service.rb
closed-social-glitch-2
Rakib Hasan 7 years ago
parent
commit
6f9ecd899e
4 changed files with 18 additions and 15 deletions
  1. +1
    -4
      app/assets/javascripts/components/actions/compose.jsx
  2. +0
    -4
      app/controllers/api/v1/media_controller.rb
  3. +10
    -6
      app/controllers/api/v1/statuses_controller.rb
  4. +7
    -1
      app/services/post_status_service.rb

+ 1
- 4
app/assets/javascripts/components/actions/compose.jsx View File

@ -119,10 +119,7 @@ export function uploadCompose(files) {
let data = new FormData();
data.append('file', files[0]);
data.append('media_ids', getState().getIn(
['compose', 'media_attachments']
).map(item => item.get('id')));
api(getState).post('/api/v1/media', data, {
onUploadProgress: function (e) {
dispatch(uploadComposeProgress(e.loaded, e.total));

+ 0
- 4
app/controllers/api/v1/media_controller.rb View File

@ -11,10 +11,6 @@ class Api::V1::MediaController < ApiController
def create
@media = MediaAttachment.create!(account: current_user.account, file: params[:file])
if @media.video? and params[:media_ids] != "List []"
@media.destroy
render json: {error: 'Cannot attach a video to a toot that already contains images'}, status: 422
end
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
render json: { error: 'File type of uploaded media could not be verified' }, status: 422
rescue Paperclip::Error

+ 10
- 6
app/controllers/api/v1/statuses_controller.rb View File

@ -62,12 +62,16 @@ class Api::V1::StatusesController < ApiController
end
def create
@status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), media_ids: params[:media_ids],
sensitive: params[:sensitive],
spoiler_text: params[:spoiler_text],
visibility: params[:visibility],
application: doorkeeper_token.application)
begin
@status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), media_ids: params[:media_ids],
sensitive: params[:sensitive],
spoiler_text: params[:spoiler_text],
visibility: params[:visibility],
application: doorkeeper_token.application)
rescue Mastodon::NotPermitted => e
render json: {error: e.message}, status: 422
return
end
render action: :show
end

+ 7
- 1
app/services/post_status_service.rb View File

@ -35,8 +35,14 @@ class PostStatusService < BaseService
def attach_media(status, media_ids)
return if media_ids.nil? || !media_ids.is_a?(Enumerable)
media = MediaAttachment.where(status_id: nil).where(id: media_ids.take(4).map(&:to_i))
if media.length > 1
media.each do |m|
if m.video?
raise Mastodon::NotPermitted, 'Cannot attach a video to a toot that already contains images'
end
end
end
media.update(status_id: status.id)
end

Loading…
Cancel
Save