logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

poll_worker.ex (1482B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Workers.PollWorker do
  5. @moduledoc """
  6. Generates notifications when a poll ends.
  7. """
  8. use Pleroma.Workers.WorkerHelper, queue: "poll_notifications"
  9. alias Pleroma.Activity
  10. alias Pleroma.Notification
  11. alias Pleroma.Object
  12. @impl Oban.Worker
  13. def perform(%Job{args: %{"op" => "poll_end", "activity_id" => activity_id}}) do
  14. with %Activity{} = activity <- find_poll_activity(activity_id) do
  15. Notification.create_poll_notifications(activity)
  16. end
  17. end
  18. @impl Oban.Worker
  19. def timeout(_job), do: :timer.seconds(5)
  20. defp find_poll_activity(activity_id) do
  21. with nil <- Activity.get_by_id(activity_id) do
  22. {:error, :poll_activity_not_found}
  23. end
  24. end
  25. def schedule_poll_end(%Activity{data: %{"type" => "Create"}, id: activity_id} = activity) do
  26. with %Object{data: %{"type" => "Question", "closed" => closed}} when is_binary(closed) <-
  27. Object.normalize(activity),
  28. {:ok, end_time} <- NaiveDateTime.from_iso8601(closed),
  29. :gt <- NaiveDateTime.compare(end_time, NaiveDateTime.utc_now()) do
  30. %{
  31. op: "poll_end",
  32. activity_id: activity_id
  33. }
  34. |> new(scheduled_at: end_time)
  35. |> Oban.insert()
  36. else
  37. _ -> {:error, activity}
  38. end
  39. end
  40. def schedule_poll_end(activity), do: {:error, activity}
  41. end