Add collection reach finder (#39346)
This commit is contained in:
1 parent
4ee893461d
commit
200fda1cdc
19 files changed
+98
-20
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user