logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: cce9d008f984475a8f9180ac4fcbef1d7cb8f88a
parent: ded909120614e5b1fa1f9469c753a30b2d9b16ed
Author: William Pitcock <nenolod@dereferenced.org>
Date:   Wed, 29 Aug 2018 09:23:05 +0000

streamer: contain list updates in the same way as we do with the database query

Diffstat:

Mlib/pleroma/web/streamer.ex21+++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex @@ -1,7 +1,8 @@ defmodule Pleroma.Web.Streamer do use GenServer require Logger - alias Pleroma.{User, Notification, Activity, Object} + alias Pleroma.{User, Notification, Activity, Object, Repo} + alias Pleroma.Web.ActivityPub.ActivityPub def init(args) do {:ok, args} @@ -60,8 +61,24 @@ defmodule Pleroma.Web.Streamer do end def handle_cast(%{action: :stream, topic: "list", item: item}, topics) do + author = User.get_cached_by_ap_id(item.data["actor"]) + + # filter the recipient list if the activity is not public, see #270. + recipient_lists = + case ActivityPub.is_public?(item) do + true -> + Pleroma.List.get_lists_from_activity(item) + + _ -> + Pleroma.List.get_lists_from_activity(item) + |> Enum.filter(fn list -> + owner = Repo.get(User, list.user_id) + author.follower_address in owner.following + end) + end + recipient_topics = - Pleroma.List.get_lists_from_activity(item) + recipient_lists |> Enum.map(fn %{id: id} -> "list:#{id}" end) Enum.each(recipient_topics || [], fn list_topic ->