commit: ef2ada59e0b4a1b203b6edd1969518f63bf5eff5
parent 9e3633501bca98a9df34ed3231e55ed038dd86b7
Author: feld <feld@feld.me>
Date:   Sat,  6 Jul 2024 21:33:07 +0000
Merge branch 'refactor/group-posts' into 'develop'
Refactor maybe_handle_group_posts/1
See merge request pleroma/pleroma!4170
Diffstat:
2 files changed, 7 insertions(+), 18 deletions(-)
diff --git a/changelog.d/group-repeats.fix b/changelog.d/group-repeats.fix
@@ -0,0 +1 @@
+Deactivated groups would still try to repeat a post.
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex
@@ -939,26 +939,14 @@ defmodule Pleroma.Web.ActivityPub.Utils do
     |> Repo.all()
   end
 
+  @spec maybe_handle_group_posts(Activity.t()) :: :ok
+  @doc "Automatically repeats posts for local group actor recipients"
   def maybe_handle_group_posts(activity) do
     poster = User.get_cached_by_ap_id(activity.actor)
 
-    mentions =
-      activity.data["to"]
-      |> Enum.filter(&(&1 != activity.actor))
-
-    mentioned_local_groups =
-      User.get_all_by_ap_id(mentions)
-      |> Enum.filter(fn user ->
-        user.actor_type == "Group" and
-          user.local and
-          not User.blocks?(user, poster)
-      end)
-
-    mentioned_local_groups
-    |> Enum.each(fn group ->
-      Pleroma.Web.CommonAPI.repeat(activity.id, group)
-    end)
-
-    :ok
+    User.get_recipients_from_activity(activity)
+    |> Enum.filter(&match?("Group", &1.actor_type))
+    |> Enum.reject(&User.blocks?(&1, poster))
+    |> Enum.each(&Pleroma.Web.CommonAPI.repeat(activity.id, &1))
   end
 end