Add visibility param to reblog REST API (#9851)
				
					
				
			Use async worker for creating reblog notification to improve performance
This commit is contained in:
		
							parent
							
								
									317c43b75b
								
							
						
					
					
						commit
						ba84b6d4d7
					
				@ -9,7 +9,7 @@ class Api::V1::Statuses::ReblogsController < Api::BaseController
 | 
			
		||||
  respond_to :json
 | 
			
		||||
 | 
			
		||||
  def create
 | 
			
		||||
    @status = ReblogService.new.call(current_user.account, status_for_reblog)
 | 
			
		||||
    @status = ReblogService.new.call(current_user.account, status_for_reblog, reblog_params)
 | 
			
		||||
    render json: @status, serializer: REST::StatusSerializer
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -32,4 +32,8 @@ class Api::V1::Statuses::ReblogsController < Api::BaseController
 | 
			
		||||
  def status_for_destroy
 | 
			
		||||
    current_user.account.statuses.where(reblog_of_id: params[:status_id]).first!
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def reblog_params
 | 
			
		||||
    params.permit(:visibility)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -70,6 +70,7 @@ class Status < ApplicationRecord
 | 
			
		||||
  validates_with StatusLengthValidator
 | 
			
		||||
  validates_with DisallowedHashtagsValidator
 | 
			
		||||
  validates :reblog, uniqueness: { scope: :account }, if: :reblog?
 | 
			
		||||
  validates :visibility, exclusion: { in: %w(direct limited) }, if: :reblog?
 | 
			
		||||
  validates_associated :owned_poll
 | 
			
		||||
 | 
			
		||||
  default_scope { recent }
 | 
			
		||||
 | 
			
		||||
@ -7,8 +7,9 @@ class ReblogService < BaseService
 | 
			
		||||
  # Reblog a status and notify its remote author
 | 
			
		||||
  # @param [Account] account Account to reblog from
 | 
			
		||||
  # @param [Status] reblogged_status Status to be reblogged
 | 
			
		||||
  # @param [Hash] options
 | 
			
		||||
  # @return [Status]
 | 
			
		||||
  def call(account, reblogged_status)
 | 
			
		||||
  def call(account, reblogged_status, options = {})
 | 
			
		||||
    reblogged_status = reblogged_status.reblog if reblogged_status.reblog?
 | 
			
		||||
 | 
			
		||||
    authorize_with account, reblogged_status, :reblog?
 | 
			
		||||
@ -17,7 +18,7 @@ class ReblogService < BaseService
 | 
			
		||||
 | 
			
		||||
    return reblog unless reblog.nil?
 | 
			
		||||
 | 
			
		||||
    reblog = account.statuses.create!(reblog: reblogged_status, text: '')
 | 
			
		||||
    reblog = account.statuses.create!(reblog: reblogged_status, text: '', visibility: options[:visibility] || account.user&.setting_default_privacy)
 | 
			
		||||
 | 
			
		||||
    DistributionWorker.perform_async(reblog.id)
 | 
			
		||||
    Pubsubhubbub::DistributionWorker.perform_async(reblog.stream_entry.id)
 | 
			
		||||
@ -35,7 +36,7 @@ class ReblogService < BaseService
 | 
			
		||||
    reblogged_status = reblog.reblog
 | 
			
		||||
 | 
			
		||||
    if reblogged_status.account.local?
 | 
			
		||||
      NotifyService.new.call(reblogged_status.account, reblog)
 | 
			
		||||
      LocalNotificationWorker.perform_async(reblogged_status.account_id, reblog.id, reblog.class.name)
 | 
			
		||||
    elsif reblogged_status.account.ostatus?
 | 
			
		||||
      NotificationWorker.perform_async(stream_entry_to_xml(reblog.stream_entry), reblog.account_id, reblogged_status.account_id)
 | 
			
		||||
    elsif reblogged_status.account.activitypub? && !reblogged_status.account.following?(reblog.account)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user