Merge pull request 'Allow for embedding object data in publish' (#16) from undo-emoji...
authorfloatingghost <hannah@coffee-and-dreams.uk>
Sat, 25 Jun 2022 17:45:38 +0000 (17:45 +0000)
committerfloatingghost <hannah@coffee-and-dreams.uk>
Sat, 25 Jun 2022 17:45:38 +0000 (17:45 +0000)
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/16

lib/pleroma/web/federator.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 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)