forked from AkkomaGang/akkoma
streamer: contain list updates in the same way as we do with the database query
This commit is contained in:
parent
ded9091206
commit
cce9d008f9
1 changed files with 19 additions and 2 deletions
|
@ -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
|
||||||
|
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 =
|
recipient_topics =
|
||||||
Pleroma.List.get_lists_from_activity(item)
|
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 ->
|
||||||
|
|
Loading…
Reference in a new issue