1
0
Fork 0
forked from gitea/nas

Merge commit 'df2611a10f' into kbtopic-remove-quote

This commit is contained in:
KMY 2025-04-26 07:48:46 +09:00
commit e4c72836a3
36 changed files with 1660 additions and 87 deletions

View file

@ -19,6 +19,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
@account = status.account
@media_attachments_changed = false
@poll_changed = false
@quote_changed = false
@request_id = request_id
# Only native types can be updated at the moment
@ -190,7 +191,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
sensitive: @status.sensitive,
media_count: @next_media_attachments.size,
poll_count: @status.poll&.options&.size || 0,
quote: quote,
quote: quote_url,
reply: @status.reply?,
mention_count: @status.mentions.count,
reference_count: reference_uris.size,
@ -217,7 +218,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
process_sensitive_words
@significant_changes = text_significantly_changed? || @status.spoiler_text_changed? || @media_attachments_changed || @poll_changed
@significant_changes = text_significantly_changed? || @status.spoiler_text_changed? || @media_attachments_changed || @poll_changed || @quote_changed
@status.edited_at = @status_parser.edited_at if significant_changes?
@ -252,6 +253,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
update_tags!
update_mentions!
update_emojis!
update_quote!
end
def update_tags!
@ -340,7 +342,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
def update_references!
references = reference_uris
ProcessReferencesService.call_service_without_error(@status, [], references, [quote].compact)
ProcessReferencesService.call_service_without_error(@status, [], references, [quote_url].compact)
end
def reference_uris
@ -350,7 +352,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
@reference_uris += ProcessReferencesService.extract_uris(@json['content'] || '')
end
def quote
def quote_url
# TODO: quote
nil
end
@ -365,6 +367,45 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
@local_referred_accounts = local_referred_statuses.map(&:account)
end
def update_quote!
return unless Mastodon::Feature.inbound_quotes_enabled?
quote = nil
quote_uri = @status_parser.quote_uri
if quote_uri.present?
approval_uri = @status_parser.quote_approval_uri
approval_uri = nil if unsupported_uri_scheme?(approval_uri)
if @status.quote.present?
# If the quoted post has changed, discard the old object and create a new one
if @status.quote.quoted_status.present? && ActivityPub::TagManager.instance.uri_for(@status.quote.quoted_status) != quote_uri
@status.quote.destroy
quote = Quote.create(status: @status, approval_uri: approval_uri)
@quote_changed = true
else
quote = @status.quote
quote.update(approval_uri: approval_uri, state: :pending) if quote.approval_uri != @status_parser.quote_approval_uri
end
else
quote = Quote.create(status: @status, approval_uri: approval_uri)
@quote_changed = true
end
end
if quote.present?
begin
quote.save
ActivityPub::VerifyQuoteService.new.call(quote, fetchable_quoted_uri: quote_uri, request_id: @request_id)
rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(30..600).seconds, quote.id, quote_uri, { 'request_id' => @request_id })
end
elsif @status.quote.present?
@status.quote.destroy!
@quote_changed = true
end
end
def update_counts!
likes = @status_parser.favourites_count
shares = @status_parser.reblogs_count