1
0
Fork 0
mirror of https://github.com/mastodon/mastodon.git synced 2024-08-20 21:08:15 -07:00
mastodon/app/workers/thread_resolve_worker.rb

32 lines
1 KiB
Ruby

# frozen_string_literal: true
class ThreadResolveWorker
include Sidekiq::Worker
include ExponentialBackoff
sidekiq_options queue: 'pull', retry: 3
def perform(child_status_id, parent_url, options = {})
child_status = Status.find(child_status_id)
return if child_status.in_reply_to_id.present?
skip_fetching = options.delete('skip_fetching')
parent_status = ActivityPub::TagManager.instance.uri_to_resource(parent_url, Status)
parent_status ||= FetchRemoteStatusService.new.call(parent_url, **options.deep_symbolize_keys) unless skip_fetching
if parent_status.nil?
raise 'presumably private parent not found, retrying later' if skip_fetching
ThreadResolveWorker.perform_async(child_status_id, parent_url, { 'skip_fetching' => true })
return
end
child_status.thread = parent_status
child_status.save!
DistributionWorker.perform_async(child_status_id, { 'skip_notifications' => true }) if child_status.within_realtime_window?
rescue ActiveRecord::RecordNotFound
true
end
end