revisted fix for #462
Moved validation to services/post_status_service.rb
This commit is contained in:
		@@ -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));
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user