fedibird-fe/app/workers/status_reference_resolve_worker.rb

23 lines
873 B
Ruby
Raw Normal View History

2022-03-17 14:25:16 +00:00
# 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