diff options
| -rw-r--r-- | lib/pleroma/web/streamer.ex | 45 | 
1 files changed, 30 insertions, 15 deletions
| diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index 0c9e95485..ce38f3cc3 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -1,7 +1,7 @@  defmodule Pleroma.Web.Streamer do    use GenServer    require Logger -  alias Pleroma.{User, Notification} +  alias Pleroma.{User, Notification, Activity, Object}    def init(args) do      {:ok, args} @@ -138,6 +138,34 @@ defmodule Pleroma.Web.Streamer do      {:noreply, state}    end +  defp represent_update(%Activity{} = activity, %User{} = user) do +    %{ +      event: "update", +      payload: +        Pleroma.Web.MastodonAPI.StatusView.render( +          "status.json", +          activity: activity, +          for: user +        ) +        |> Jason.encode!() +    } +    |> Jason.encode!() +  end + +  def push_to_socket(topics, topic, %Activity{data: %{"type" => "Announce"}} = item) do +    Enum.each(topics[topic] || [], fn socket -> +      # Get the current user so we have up-to-date blocks etc. +      user = User.get_cached_by_ap_id(socket.assigns[:user].ap_id) +      blocks = user.info["blocks"] || [] + +      parent = Object.get_by_ap_id(item.data["object"]) + +      unless is_nil(parent) or item.actor in blocks or parent.data["actor"] in blocks do +        send(socket.transport_pid, {:text, represent_update(item, user)}) +      end +    end) +  end +    def push_to_socket(topics, topic, item) do      Enum.each(topics[topic] || [], fn socket ->        # Get the current user so we have up-to-date blocks etc. @@ -145,20 +173,7 @@ defmodule Pleroma.Web.Streamer do        blocks = user.info["blocks"] || []        unless item.actor in blocks do -        json = -          %{ -            event: "update", -            payload: -              Pleroma.Web.MastodonAPI.StatusView.render( -                "status.json", -                activity: item, -                for: user -              ) -              |> Jason.encode!() -          } -          |> Jason.encode!() - -        send(socket.transport_pid, {:text, json}) +        send(socket.transport_pid, {:text, represent_update(item, user)})        end      end)    end | 
