Add quote_approval_policy parameter when posting and editing statuses (#35699)

This commit is contained in:
Claire 2025-08-06 16:23:12 +02:00 committed by GitHub
parent 6e48322055
commit 9ec99ffef1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 70 additions and 2 deletions

View file

@ -82,6 +82,7 @@ class Api::V1::StatusesController < Api::BaseController
text: status_params[:status],
thread: @thread,
quoted_status: @quoted_status,
quote_approval_policy: quote_approval_policy,
media_ids: status_params[:media_ids],
sensitive: status_params[:sensitive],
spoiler_text: status_params[:spoiler_text],
@ -113,7 +114,8 @@ class Api::V1::StatusesController < Api::BaseController
sensitive: status_params[:sensitive],
language: status_params[:language],
spoiler_text: status_params[:spoiler_text],
poll: status_params[:poll]
poll: status_params[:poll],
quote_approval_policy: quote_approval_policy
)
render json: @status, serializer: REST::StatusSerializer
@ -180,6 +182,7 @@ class Api::V1::StatusesController < Api::BaseController
:status,
:in_reply_to_id,
:quoted_status_id,
:quote_approval_policy,
:sensitive,
:spoiler_text,
:visibility,
@ -202,6 +205,23 @@ class Api::V1::StatusesController < Api::BaseController
)
end
def quote_approval_policy
# TODO: handle `nil` separately
return nil unless Mastodon::Feature.outgoing_quotes_enabled? && status_params[:quote_approval_policy].present?
case status_params[:quote_approval_policy]
when 'public'
Status::QUOTE_APPROVAL_POLICY_FLAGS[:public] << 16
when 'followers'
Status::QUOTE_APPROVAL_POLICY_FLAGS[:followers] << 16
when 'nobody'
0
else
# TODO: raise more useful message
raise ActiveRecord::RecordInvalid
end
end
def serializer_for_status
@status.is_a?(ScheduledStatus) ? REST::ScheduledStatusSerializer : REST::StatusSerializer
end

View file

@ -19,6 +19,7 @@ class PostStatusService < BaseService
# @option [String] :text Message
# @option [Status] :thread Optional status to reply to
# @option [Status] :quoted_status Optional status to quote
# @option [String] :quote_approval_policy Approval policy for quotes, one of `public`, `followers` or `nobody`
# @option [Boolean] :sensitive
# @option [String] :visibility
# @option [String] :spoiler_text
@ -215,6 +216,7 @@ class PostStatusService < BaseService
language: valid_locale_cascade(@options[:language], @account.user&.preferred_posting_language, I18n.default_locale),
application: @options[:application],
rate_limit: @options[:with_rate_limit],
quote_approval_policy: @options[:quote_approval_policy],
}.compact
end

View file

@ -115,6 +115,7 @@ class UpdateStatusService < BaseService
@status.spoiler_text = @options[:spoiler_text] || '' if @options.key?(:spoiler_text)
@status.sensitive = @options[:sensitive] || @options[:spoiler_text].present? if @options.key?(:sensitive) || @options.key?(:spoiler_text)
@status.language = valid_locale_cascade(@options[:language], @status.language, @status.account.user&.preferred_posting_language, I18n.default_locale)
@status.quote_approval_policy = @options[:quote_approval_policy] if @options[:quote_approval_policy].present?
# We raise here to rollback the entire transaction
raise NoChangesSubmittedError unless significant_changes?