Add collection reach finder (#39346)

This commit is contained in:
David Roetzel authored and GitHub committed 2026-06-09 14:22:21 +00:00
1 parent 4ee893461d
commit 200fda1cdc
19 files changed
+98 -20

No files matched your search

+1 -1
View File
@@ -53,7 +53,7 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity
collection_item.update!(approval_uri:, state: :accepted)
activity_json = ActiveModelSerializers::SerializableResource.new(collection_item, serializer: ActivityPub::AddFeaturedItemSerializer, adapter: ActivityPub::Adapter).to_json
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, collection_item.collection.account_id)
ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, collection_item.collection_id)
end
def accept_quote!(quote)
+18
View File
@@ -0,0 +1,18 @@
# frozen_string_literal: true
class CollectionReachFinder < AccountReachFinder
def initialize(collection)
@collection = collection
super(@collection.account)
end
def inboxes
(super + collection_member_inboxes).uniq
end
private
def collection_member_inboxes
@collection.accounts.inboxes
end
end
+1
View File
@@ -32,6 +32,7 @@ class Collection < ApplicationRecord
has_many :collection_items, dependent: :delete_all
has_many :accepted_collection_items, -> { accepted }, class_name: 'CollectionItem', inverse_of: :collection # rubocop:disable Rails/HasManyOrHasOneDependent
has_many :collection_reports, dependent: :delete_all
has_many :accounts, -> { merge(CollectionItem.pending_or_accepted) }, through: :collection_items
validates :name, presence: true
validates :name, length: { maximum: 40 }, if: :local?
@@ -30,7 +30,7 @@ class AddAccountToCollectionService
end
def distribute_add_activity
ActivityPub::AccountRawDistributionWorker.perform_async(add_activity_json, @collection.account_id)
ActivityPub::CollectionRawDistributionWorker.perform_async(add_activity_json, @collection.id)
end
def distribute_feature_request_activity
+1 -1
View File
@@ -19,7 +19,7 @@ class CreateCollectionService
private
def distribute_add_activity
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @account.id)
ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, @collection.id)
end
def distribute_feature_request_activities
@@ -16,7 +16,7 @@ class DeleteCollectionItemService
private
def distribute_remove_activity
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id)
ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, @collection.id)
end
def activity_json
+6 -2
View File
@@ -3,6 +3,7 @@
class DeleteCollectionService
def call(collection)
@collection = collection
@account_ids = @collection.account_ids
@collection.destroy!
distribute_remove_activity
@@ -11,10 +12,13 @@ class DeleteCollectionService
private
def distribute_remove_activity
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id)
@account_ids.each do |account_id|
ActivityPub::DeliveryWorker.perform_async(activity_json, account_id, @collection.account.inbox_url)
end
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account_id)
end
def activity_json
ActiveModelSerializers::SerializableResource.new(@collection, serializer: ActivityPub::RemoveFeaturedCollectionSerializer, adapter: ActivityPub::Adapter).to_json
@activity_json ||= ActiveModelSerializers::SerializableResource.new(@collection, serializer: ActivityPub::RemoveFeaturedCollectionSerializer, adapter: ActivityPub::Adapter).to_json
end
end
@@ -17,7 +17,7 @@ class RevokeCollectionItemService < BaseService
def distribute_stamp_deletion!
ActivityPub::DeliveryWorker.perform_async(signed_activity_json, @account.id, @collection.account.inbox_url)
ActivityPub::AccountRawDistributionWorker.perform_async(signed_activity_json, @collection.account_id)
ActivityPub::CollectionRawDistributionWorker.perform_async(signed_activity_json, @collection.id)
end
def signed_activity_json
+1 -1
View File
@@ -16,7 +16,7 @@ class UpdateCollectionService
def distribute_update_activity
return unless relevant_attributes_changed?
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id)
ActivityPub::CollectionRawDistributionWorker.perform_async(activity_json, @collection.id)
end
def notify_about_update
@@ -0,0 +1,15 @@
# frozen_string_literal: true
class ActivityPub::CollectionRawDistributionWorker < ActivityPub::RawDistributionWorker
def perform(json, collection_id, exclude_inboxes = [])
@collection = Collection.find(collection_id)
super(json, @collection.account_id, exclude_inboxes)
end
private
def inboxes
@inboxes ||= CollectionReachFinder.new(@collection).inboxes
end
end