22 lines
873 B
Ruby
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
|