Allow for embedding object data in publish
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Sat, 25 Jun 2022 17:41:26 +0000 (18:41 +0100)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Sat, 25 Jun 2022 17:41:26 +0000 (18:41 +0100)
lib/pleroma/web/federator.ex
lib/pleroma/web/federator/publisher.ex
lib/pleroma/workers/publisher_worker.ex

index 69cfc2d52c8e5d2f76b11a732ce70fee6e6d723d..82fb9e4e005b70a92523b328529ae7dff1d281b7 100644 (file)
@@ -47,8 +47,16 @@ defmodule Pleroma.Web.Federator do
   end
 
   @impl true
-  def publish(activity) do
-    PublisherWorker.enqueue("publish", %{"activity_id" => activity.id})
+  def publish(%{data: %{"object" => object}} = activity) when is_binary(object) do
+    PublisherWorker.enqueue("publish", %{"activity_id" => activity.id, "object_data" => nil})
+  end
+
+  @impl true
+  def publish(%{data: %{"object" => object}} = activity) when is_map(object) or is_list(object) do
+    PublisherWorker.enqueue("publish", %{
+      "activity_id" => activity.id,
+      "object_data" => Jason.encode!(object)
+    })
   end
 
   # Job Worker Callbacks
index b7ee56803a3c9b2792a502fae1d68aae7df1f4af..74084558d49fb8935d054864eaae4945559ec8f2 100644 (file)
@@ -31,6 +31,9 @@ defmodule Pleroma.Web.Federator.Publisher do
   """
   @spec enqueue_one(module(), Map.t()) :: :ok
   def enqueue_one(module, %{} = params) do
+    IO.puts("ENQUEUE")
+    IO.inspect(params)
+
     PublisherWorker.enqueue(
       "publish_one",
       %{"module" => to_string(module), "params" => params}
index 6209715b3f66370bfc5aecda8e55073138d26560..545887071046339bed7a0a68e1b67277d69c6a96 100644 (file)
@@ -13,11 +13,20 @@ defmodule Pleroma.Workers.PublisherWorker do
   end
 
   @impl Oban.Worker
-  def perform(%Job{args: %{"op" => "publish", "activity_id" => activity_id}}) do
+  def perform(%Job{args: %{"op" => "publish", "activity_id" => activity_id, "object_data" => nil}}) do
     activity = Activity.get_by_id(activity_id)
     Federator.perform(:publish, activity)
   end
 
+  @impl Oban.Worker
+  def perform(%Job{
+        args: %{"op" => "publish", "activity_id" => activity_id, "object_data" => object_data}
+      }) do
+    activity = Activity.get_by_id(activity_id)
+    activity = %{activity | data: Map.put(activity.data, "object", Jason.decode!(object_data))}
+    Federator.perform(:publish, activity)
+  end
+
   def perform(%Job{args: %{"op" => "publish_one", "module" => module_name, "params" => params}}) do
     params = Map.new(params, fn {k, v} -> {String.to_atom(k), v} end)
     Federator.perform(:publish_one, String.to_atom(module_name), params)