--- /dev/null
+# frozen_string_literal: true
+
+class AccountReachFinder
+ def initialize(account)
+ @account = account
+ end
+
+ def inboxes
+ (followers_inboxes + reporters_inboxes + relay_inboxes).uniq
+ end
+
+ private
+
+ def followers_inboxes
+ @account.followers.inboxes
+ end
+
+ def reporters_inboxes
+ Account.where(id: @account.targeted_reports.select(:account_id)).inboxes
+ end
+
+ def relay_inboxes
+ Relay.enabled.pluck(:inbox_url)
+ end
+end
end
def distribute_update_actor!
- ActivityPub::UpdateDistributionWorker.perform_async(@account.id) if @account.local?
+ return unless @account.local?
+
+ account_reach_finder = AccountReachFinder.new(@account)
+
+ ActivityPub::DeliveryWorker.push_bulk(account_reach_finder.inboxes) do |inbox_url|
+ [signed_activity_json, @account.id, inbox_url]
+ end
end
def unmerge_from_home_timelines!
end
end
end
+
+ def signed_activity_json
+ @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateSerializer, signer: @account))
+ end
end
merge_into_home_timelines!
merge_into_list_timelines!
publish_media_attachments!
+ distribute_update_actor!
end
private
# @account would now be nil.
end
+ def distribute_update_actor!
+ return unless @account.local?
+
+ account_reach_finder = AccountReachFinder.new(@account)
+
+ ActivityPub::DeliveryWorker.push_bulk(account_reach_finder.inboxes) do |inbox_url|
+ [signed_activity_json, @account.id, inbox_url]
+ end
+ end
+
def merge_into_home_timelines!
@account.followers_for_local_distribution.find_each do |follower|
FeedManager.instance.merge_into_home(@account, follower)
end
end
end
+
+ def signed_activity_json
+ @signed_activity_json ||= Oj.dump(serialize_payload(@account, ActivityPub::UpdateSerializer, signer: @account))
+ end
end