From e7e099d1a06700d14fa10258f5509fc5c52738c8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 27 Nov 2020 15:48:31 +0100 Subject: Fix deletes not reaching every server that interacted with status (#15200) Extract logic for determining ActivityPub inboxes to send deletes to to its own class and explicitly include the person the status replied to (even if not mentioned), people who favourited it, and people who replied to it (though that one is still not recursive) --- app/lib/status_reach_finder.rb | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 app/lib/status_reach_finder.rb (limited to 'app/lib') diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb new file mode 100644 index 000000000..35b191dad --- /dev/null +++ b/app/lib/status_reach_finder.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +class StatusReachFinder + def initialize(status) + @status = status + end + + def inboxes + Account.where(id: reached_account_ids).inboxes + end + + private + + def reached_account_ids + [ + replied_to_account_id, + reblog_of_account_id, + mentioned_account_ids, + reblogs_account_ids, + favourites_account_ids, + replies_account_ids, + ].tap do |arr| + arr.flatten! + arr.compact! + arr.uniq! + end + end + + def replied_to_account_id + @status.in_reply_to_account_id + end + + def reblog_of_account_id + @status.reblog.account_id if @status.reblog? + end + + def mentioned_account_ids + @status.mentions.pluck(:account_id) + end + + def reblogs_account_ids + @status.reblogs.pluck(:account_id) + end + + def favourites_account_ids + @status.favourites.pluck(:account_id) + end + + def replies_account_ids + @status.replies.pluck(:account_id) + end +end -- cgit