fedibird-fe/app/workers/status_reference_resolve_worker.rb
2023-01-16 12:58:29 +09:00

22 lines
873 B
Ruby

# frozen_string_literal: true
class StatusReferenceResolveWorker
include Sidekiq::Worker
include ExponentialBackoff
sidekiq_options queue: 'pull', retry: 3
def perform(status_id, reference_url)
status = Status.find(status_id)
target_status = FetchRemoteStatusService.new.call(reference_url)
return if target_status.nil? || !(target_status.distributable? || target_status&.private_visibility?)
EntityCache.instance.update_holding_status(reference_url, target_status)
reference = StatusReference.create!(status_id: status.id, target_status_id: target_status.id)
NotifyService.new.call(reference.target_status.account, :status_reference, reference) if reference.target_status.account.local?
PublishStatusUpdateWorker.perform_async(status.id)
rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid
true
end
end