end
def inboxes
- Account.where(id: reached_account_ids).inboxes
+ (reached_account_inboxes + followers_inboxes + relay_inboxes).uniq
end
private
+ def reached_account_inboxes
+ # When the status is a reblog, there are no interactions with it
+ # directly, we assume all interactions are with the original one
+
+ if @status.reblog?
+ []
+ else
+ Account.where(id: reached_account_ids).inboxes
+ end
+ end
+
def reached_account_ids
[
replied_to_account_id,
def replies_account_ids
@status.replies.pluck(:account_id)
end
+
+ def followers_inboxes
+ @status.account.followers.inboxes
+ end
+
+ def relay_inboxes
+ if @status.public_visibility?
+ Relay.enabled.pluck(:inbox_url)
+ else
+ []
+ end
+ end
end
# original object being removed implicitly removes reblogs
# of it. The Delete activity of the original is forwarded
# separately.
- if @account.local? && !@options[:original_removed]
- remove_from_remote_followers
- remove_from_remote_reach
- end
+ remove_from_remote_reach if @account.local? && !@options[:original_removed]
# Since reblogs don't mention anyone, don't get reblogged,
# favourited and don't contain their own media attachments
end
def remove_from_remote_reach
- return if @status.reblog?
-
- # People who got mentioned in the status, or who
- # reblogged it from someone else might not follow
- # the author and wouldn't normally receive the
- # delete notification - so here, we explicitly
- # send it to them
+ # Followers, relays, people who got mentioned in the status,
+ # or who reblogged it from someone else might not follow
+ # the author and wouldn't normally receive the delete
+ # notification - so here, we explicitly send it to them
status_reach_finder = StatusReachFinder.new(@status)
end
end
- def remove_from_remote_followers
- ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url|
- [signed_activity_json, @account.id, inbox_url]
- end
-
- relay! if relayable?
- end
-
- def relayable?
- @status.public_visibility?
- end
-
- def relay!
- ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
- [signed_activity_json, @account.id, inbox_url]
- end
- end
-
def signed_activity_json
@signed_activity_json ||= Oj.dump(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer, signer: @account))
end