mirror of
https://github.com/mastodon/mastodon.git
synced 2025-05-07 12:16:14 +00:00
Add quoted_status
attribute to PostStatusService
for local testing (#34553)
This commit is contained in:
parent
9ed6a14d45
commit
17e4345eb2
|
@ -18,6 +18,7 @@ class PostStatusService < BaseService
|
||||||
# @param [Hash] options
|
# @param [Hash] options
|
||||||
# @option [String] :text Message
|
# @option [String] :text Message
|
||||||
# @option [Status] :thread Optional status to reply to
|
# @option [Status] :thread Optional status to reply to
|
||||||
|
# @option [Status] :quoted_status Optional status to quote
|
||||||
# @option [Boolean] :sensitive
|
# @option [Boolean] :sensitive
|
||||||
# @option [String] :visibility
|
# @option [String] :visibility
|
||||||
# @option [String] :spoiler_text
|
# @option [String] :spoiler_text
|
||||||
|
@ -35,6 +36,7 @@ class PostStatusService < BaseService
|
||||||
@options = options
|
@options = options
|
||||||
@text = @options[:text] || ''
|
@text = @options[:text] || ''
|
||||||
@in_reply_to = @options[:thread]
|
@in_reply_to = @options[:thread]
|
||||||
|
@quoted_status = @options[:quoted_status]
|
||||||
|
|
||||||
@antispam = Antispam.new
|
@antispam = Antispam.new
|
||||||
|
|
||||||
|
@ -78,6 +80,7 @@ class PostStatusService < BaseService
|
||||||
@status = @account.statuses.new(status_attributes)
|
@status = @account.statuses.new(status_attributes)
|
||||||
process_mentions_service.call(@status, save_records: false)
|
process_mentions_service.call(@status, save_records: false)
|
||||||
safeguard_mentions!(@status)
|
safeguard_mentions!(@status)
|
||||||
|
attach_quote!(@status)
|
||||||
@antispam.local_preflight_check!(@status)
|
@antispam.local_preflight_check!(@status)
|
||||||
|
|
||||||
# The following transaction block is needed to wrap the UPDATEs to
|
# The following transaction block is needed to wrap the UPDATEs to
|
||||||
|
@ -87,6 +90,21 @@ class PostStatusService < BaseService
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def attach_quote!(status)
|
||||||
|
return if @quoted_status.nil?
|
||||||
|
|
||||||
|
# NOTE: for now this is only for convenience in testing, as we don't support the request flow nor serialize quotes in ActivityPub
|
||||||
|
# we only support incoming quotes so far
|
||||||
|
|
||||||
|
status.quote = Quote.new(quoted_status: @quoted_status)
|
||||||
|
status.quote.accept! if @status.account == @quoted_status.account || @quoted_status.active_mentions.exists?(mentions: { account_id: status.account_id })
|
||||||
|
|
||||||
|
# TODO: the following has yet to be implemented:
|
||||||
|
# - handle approval of local users (requires the interactionPolicy PR)
|
||||||
|
# - produce a QuoteAuthorization for quotes of local users
|
||||||
|
# - send a QuoteRequest for quotes of remote users
|
||||||
|
end
|
||||||
|
|
||||||
def safeguard_mentions!(status)
|
def safeguard_mentions!(status)
|
||||||
return if @options[:allowed_mentions].nil?
|
return if @options[:allowed_mentions].nil?
|
||||||
|
|
||||||
|
@ -223,6 +241,7 @@ class PostStatusService < BaseService
|
||||||
@options.dup.tap do |options_hash|
|
@options.dup.tap do |options_hash|
|
||||||
options_hash[:in_reply_to_id] = options_hash.delete(:thread)&.id
|
options_hash[:in_reply_to_id] = options_hash.delete(:thread)&.id
|
||||||
options_hash[:application_id] = options_hash.delete(:application)&.id
|
options_hash[:application_id] = options_hash.delete(:application)&.id
|
||||||
|
options_hash[:quoted_status_id] = options_hash.delete(:quoted_status)&.id
|
||||||
options_hash[:scheduled_at] = nil
|
options_hash[:scheduled_at] = nil
|
||||||
options_hash[:idempotency] = nil
|
options_hash[:idempotency] = nil
|
||||||
options_hash[:with_rate_limit] = false
|
options_hash[:with_rate_limit] = false
|
||||||
|
|
Loading…
Reference in New Issue
Block a user