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