[#534] Made Salmon.send_to_user calls be handled through Federator.enqueue.
authorIvan Tashkinov <ivantashkinov@gmail.com>
Fri, 25 Jan 2019 17:38:13 +0000 (20:38 +0300)
committerIvan Tashkinov <ivantashkinov@gmail.com>
Fri, 25 Jan 2019 17:38:13 +0000 (20:38 +0300)
lib/pleroma/web/federator/federator.ex
lib/pleroma/web/salmon/salmon.ex

index f3a0e18b8b7536284ba8d23e2a06b774025d81d6..46f7a497341a143c12a7b527f05ab800eee8cd18 100644 (file)
@@ -6,7 +6,7 @@ defmodule Pleroma.Web.Federator do
   use GenServer
   alias Pleroma.User
   alias Pleroma.Activity
-  alias Pleroma.Web.{WebFinger, Websub}
+  alias Pleroma.Web.{WebFinger, Websub, Salmon}
   alias Pleroma.Web.Federator.RetryQueue
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.ActivityPub.Relay
@@ -124,6 +124,10 @@ defmodule Pleroma.Web.Federator do
     end
   end
 
+  def handle(:publish_single_salmon, {user_or_url, feed, poster}) do
+    Salmon.send_to_user(user_or_url, feed, poster)
+  end
+
   def handle(:publish_single_ap, params) do
     case ActivityPub.publish_one(params) do
       {:ok, _} ->
index 848131d52769be2636349698d042411fde1f6105..17ca7a6e8523c46c2df70c1303e465c2991f773a 100644 (file)
@@ -164,10 +164,10 @@ defmodule Pleroma.Web.Salmon do
 
   # push an activity to remote accounts
   #
-  defp send_to_user(%{info: %{salmon: salmon}}, feed, poster),
+  def send_to_user(%{info: %{salmon: salmon}}, feed, poster),
     do: send_to_user(salmon, feed, poster)
 
-  defp send_to_user(url, feed, poster) when is_binary(url) do
+  def send_to_user(url, feed, poster) when is_binary(url) do
     with {:reachable, true} <- {:reachable, Instances.reachable?(url)},
          {:ok, %{status: code}} when code in 200..299 <-
            poster.(
@@ -180,6 +180,7 @@ defmodule Pleroma.Web.Salmon do
            ) do
       Instances.set_reachable(url)
       Logger.debug(fn -> "Pushed to #{url}, code #{code}" end)
+      :ok
     else
       {:reachable, false} ->
         Logger.debug(fn -> "Pushing Salmon to #{url} skipped as marked unreachable)" end)
@@ -188,10 +189,11 @@ defmodule Pleroma.Web.Salmon do
       e ->
         Instances.set_unreachable(url)
         Logger.debug(fn -> "Pushing Salmon to #{url} failed, #{inspect(e)}" end)
+        :error
     end
   end
 
-  defp send_to_user(_, _, _), do: nil
+  def send_to_user(_, _, _), do: :noop
 
   @supported_activities [
     "Create",
@@ -229,10 +231,8 @@ defmodule Pleroma.Web.Salmon do
       remote_users
       |> Enum.filter(&(&1.info.salmon in reachable_salmon_urls))
       |> Enum.each(fn remote_user ->
-        Task.start(fn ->
-          Logger.debug(fn -> "Sending Salmon to #{remote_user.ap_id}" end)
-          send_to_user(remote_user, feed, poster)
-        end)
+        Logger.debug(fn -> "Sending Salmon to #{remote_user.ap_id}" end)
+        Pleroma.Web.Federator.enqueue(:publish_single_salmon, {remote_user, feed, poster})
       end)
     end
   end