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

This commit is contained in:
William Pitcock 2018-08-29 09:23:05 +00:00
parent ded9091206
commit cce9d008f9
1 changed files with 19 additions and 2 deletions

View File

@ -1,7 +1,8 @@
defmodule Pleroma.Web.Streamer do defmodule Pleroma.Web.Streamer do
use GenServer use GenServer
require Logger require Logger
alias Pleroma.{User, Notification, Activity, Object} alias Pleroma.{User, Notification, Activity, Object, Repo}
alias Pleroma.Web.ActivityPub.ActivityPub
def init(args) do def init(args) do
{:ok, args} {:ok, args}
@ -60,8 +61,24 @@ def handle_cast(%{action: :stream, topic: "direct", item: item}, topics) do
end end
def handle_cast(%{action: :stream, topic: "list", item: item}, topics) do def handle_cast(%{action: :stream, topic: "list", item: item}, topics) do
recipient_topics = 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)
_ ->
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 =
recipient_lists
|> Enum.map(fn %{id: id} -> "list:#{id}" end) |> Enum.map(fn %{id: id} -> "list:#{id}" end)
Enum.each(recipient_topics || [], fn list_topic -> Enum.each(recipient_topics || [], fn list_topic ->