logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/
commit: f989626bad1498fd8d29f2a474e585610941938c
parent 0b8b98f979cf7e4f0b018f9b319e14bf3366ffcf
Author: nicole mikołajczyk <git@mkljczk.pl>
Date:   Fri, 10 Oct 2025 05:36:55 +0200

Fix publisher when publishing to a list of users

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>

Diffstat:

Mlib/pleroma/web/activity_pub/publisher.ex27+++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex @@ -331,17 +331,21 @@ defmodule Pleroma.Web.ActivityPub.Publisher do Repo.checkout(fn -> Enum.each([priority_inboxes, other_inboxes], fn inboxes -> Enum.each(inboxes, fn inbox -> - %User{ap_id: ap_id} = Enum.find(recipients, fn actor -> actor.inbox == inbox end) + {%User{ap_id: ap_id}, priority} = + get_user_with_priority(inbox, priority_recipients, recipients) # Get all the recipients on the same host and add them to cc. Otherwise, a remote # instance would only accept a first message for the first recipient and ignore the rest. cc = get_cc_ap_ids(ap_id, recipients) - __MODULE__.enqueue_one(%{ - inbox: inbox, - cc: cc, - activity_id: activity.id - }) + __MODULE__.enqueue_one( + %{ + inbox: inbox, + cc: cc, + activity_id: activity.id + }, + priority: priority + ) end) end) end) @@ -403,4 +407,15 @@ defmodule Pleroma.Web.ActivityPub.Publisher do end def gather_nodeinfo_protocol_names, do: ["activitypub"] + + defp get_user_with_priority(inbox, priority_recipients, recipients) do + [{priority_recipients, 0}, {recipients, 1}] + |> Enum.find_value(fn {recipients, priority} -> + with %User{} = user <- Enum.find(recipients, fn actor -> actor.inbox == inbox end) do + {user, priority} + else + _ -> nil + end + end) + end end