48 lines
1 KiB
Ruby
48 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ActivityPub::RawDistributionWorker
|
|
include Sidekiq::Worker
|
|
include Payloadable
|
|
|
|
sidekiq_options queue: 'push'
|
|
|
|
# Base worker for when you want to queue up a bunch of deliveries of
|
|
# some payload. In this case, we have already generated JSON and
|
|
# we are going to distribute it to the account's followers minus
|
|
# the explicitly provided inboxes
|
|
def perform(json, source_account_id, exclude_inboxes = [])
|
|
@account = Account.find(source_account_id)
|
|
@json = json
|
|
@exclude_inboxes = exclude_inboxes
|
|
|
|
distribute!
|
|
rescue ActiveRecord::RecordNotFound
|
|
true
|
|
end
|
|
|
|
protected
|
|
|
|
def distribute!
|
|
return if inboxes.empty?
|
|
|
|
ActivityPub::DeliveryWorker.push_bulk(inboxes, limit: 1_000) do |inbox_url|
|
|
[payload, source_account_id, inbox_url, options]
|
|
end
|
|
end
|
|
|
|
def payload
|
|
@json
|
|
end
|
|
|
|
def source_account_id
|
|
@account.id
|
|
end
|
|
|
|
def inboxes
|
|
@inboxes ||= @account.followers.inboxes - @exclude_inboxes
|
|
end
|
|
|
|
def options
|
|
{}
|
|
end
|
|
end
|