diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index d5d00d4a2..4b2ecfa3c 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -40,18 +40,23 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end def stream_out(activity) do + public = "https://www.w3.org/ns/activitystreams#Public" + if activity.data["type"] in ["Create", "Announce"] do Pleroma.Web.Streamer.stream("user", activity) - visibility = Pleroma.Web.MastodonAPI.StatusView.get_visibility(activity.data["object"]) + if Enum.member?(activity.data["to"], public) do + Pleroma.Web.Streamer.stream("public", activity) - case visibility do - "public" -> - Pleroma.Web.Streamer.stream("public", activity) - if activity.local, do: Pleroma.Web.Streamer.stream("public:local", activity) - - "direct" -> - Pleroma.Web.Streamer.stream("direct", activity) + if activity.local do + Pleroma.Web.Streamer.stream("public:local", activity) + end + else + if !Enum.member?(activity.data["cc"] || [], public) && + !Enum.member?( + activity.data["to"], + User.get_by_ap_id(activity.data["actor"]).follower_address + ), do: Pleroma.Web.Streamer.stream("direct", activity) end end end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 5c6fd05f3..301234412 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -195,6 +195,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do cond do public in to -> "public" public in cc -> "unlisted" + # this should use the sql for the object's activity Enum.any?(to, &String.contains?(&1, "/followers")) -> "private" true -> "direct" end