1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.ScheduledActivityWorker do
7 Sends scheduled activities to the job queue.
12 alias Pleroma.ScheduledActivity
14 alias Pleroma.Web.CommonAPI
19 @schedule_interval :timer.minutes(1)
21 defdelegate worker_args(queue), to: Pleroma.Workers.Helper
24 GenServer.start_link(__MODULE__, nil)
28 if Config.get([ScheduledActivity, :enabled]) do
36 def perform(:execute, scheduled_activity_id) do
38 {:ok, scheduled_activity} = ScheduledActivity.delete(scheduled_activity_id)
39 %User{} = user = User.get_cached_by_id(scheduled_activity.user_id)
40 {:ok, _result} = CommonAPI.post(user, scheduled_activity.params)
44 "#{__MODULE__} Couldn't create a status from the scheduled activity: #{inspect(error)}"
49 def handle_info(:perform, state) do
50 ScheduledActivity.due_activities(@schedule_interval)
51 |> Enum.each(fn scheduled_activity ->
52 %{"op" => "execute", "activity_id" => scheduled_activity.id}
53 |> Pleroma.Workers.ScheduledActivityWorker.new(worker_args(:scheduled_activities))
62 Process.send_after(self(), :perform, @schedule_interval)