aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/workers/publisher_worker.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pleroma/workers/publisher_worker.ex')
-rw-r--r--lib/pleroma/workers/publisher_worker.ex28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/pleroma/workers/publisher_worker.ex b/lib/pleroma/workers/publisher_worker.ex
new file mode 100644
index 0000000..598ae37
--- /dev/null
+++ b/lib/pleroma/workers/publisher_worker.ex
@@ -0,0 +1,28 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Workers.PublisherWorker do
+ alias Pleroma.Activity
+ alias Pleroma.Web.Federator
+
+ use Pleroma.Workers.WorkerHelper, queue: "federator_outgoing"
+
+ def backoff(%Job{attempt: attempt}) when is_integer(attempt) do
+ Pleroma.Workers.WorkerHelper.sidekiq_backoff(attempt, 5)
+ end
+
+ @impl Oban.Worker
+ def perform(%Job{args: %{"op" => "publish", "activity_id" => activity_id}}) do
+ activity = Activity.get_by_id(activity_id)
+ 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)
+ end
+
+ @impl Oban.Worker
+ def timeout(_job), do: :timer.seconds(10)
+end