Merge develop
[akkoma] / lib / pleroma / application.ex
index f0cb7d9a8a7ace3873b1b7f20222c2afbf5be468..299f8807b51f449009d7c50abbface68c4fc7164 100644 (file)
@@ -105,14 +105,15 @@ defmodule Pleroma.Application do
           id: :cachex_idem
         ),
         worker(Pleroma.FlakeId, []),
-        worker(Pleroma.ScheduledActivityWorker, [])
+        worker(Pleroma.ScheduledActivityWorker, []),
+        worker(Pleroma.QuantumScheduler, [])
       ] ++
         hackney_pool_children() ++
         [
           worker(Pleroma.Web.Federator.RetryQueue, []),
           worker(Pleroma.Stats, []),
-          worker(Pleroma.Web.Push, []),
-          worker(Task, [&Pleroma.Web.Federator.init/0], restart: :temporary)
+          worker(Task, [&Pleroma.Web.Push.init/0], restart: :temporary, id: :web_push_init),
+          worker(Task, [&Pleroma.Web.Federator.init/0], restart: :temporary, id: :federator_init)
         ] ++
         streamer_child() ++
         chat_child() ++
@@ -125,7 +126,9 @@ defmodule Pleroma.Application do
     # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
     # for other strategies and supported options
     opts = [strategy: :one_for_one, name: Pleroma.Supervisor]
-    Supervisor.start_link(children, opts)
+    result = Supervisor.start_link(children, opts)
+    :ok = after_supervisor_start()
+    result
   end
 
   defp setup_instrumenters do
@@ -183,4 +186,19 @@ defmodule Pleroma.Application do
       :hackney_pool.child_spec(pool, options)
     end
   end
+
+  defp after_supervisor_start do
+    with digest_config <- Application.get_env(:pleroma, :email_notifications)[:digest],
+         true <- digest_config[:active],
+         %Crontab.CronExpression{} = schedule <-
+           Crontab.CronExpression.Parser.parse!(digest_config[:schedule]) do
+      Pleroma.QuantumScheduler.new_job()
+      |> Quantum.Job.set_name(:digest_emails)
+      |> Quantum.Job.set_schedule(schedule)
+      |> Quantum.Job.set_task(&Pleroma.DigestEmailWorker.run/0)
+      |> Pleroma.QuantumScheduler.add_job()
+    end
+
+    :ok
+  end
 end