diff options
author | Alex Gleason <alex@alexgleason.me> | 2021-07-17 20:35:35 -0500 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2021-07-17 22:19:38 -0500 |
commit | 0114754db2d9dde25b31729644f898f20121de27 (patch) | |
tree | 72c5f8bf0890ebbcf2f7876db99e1308b28689f9 /lib/pleroma/workers | |
parent | b221d77a6da07c684bdbc63ddf4500e0d7ffeae8 (diff) | |
download | pleroma-0114754db2d9dde25b31729644f898f20121de27.tar.gz |
MastodonAPI: Support poll notification
Diffstat (limited to 'lib/pleroma/workers')
-rw-r--r-- | lib/pleroma/workers/poll_worker.ex | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/pleroma/workers/poll_worker.ex b/lib/pleroma/workers/poll_worker.ex new file mode 100644 index 000000000..caec89cbe --- /dev/null +++ b/lib/pleroma/workers/poll_worker.ex @@ -0,0 +1,43 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.PollWorker do + @moduledoc """ + Generates notifications when a poll ends. + """ + use Pleroma.Workers.WorkerHelper, queue: "poll_notifications" + + alias Pleroma.Activity + alias Pleroma.Notification + alias Pleroma.Object + + @impl Oban.Worker + def perform(%Job{args: %{"op" => "poll_end", "activity_id" => activity_id}}) do + with %Activity{} = activity <- find_poll_activity(activity_id) do + Notification.create_poll_notifications(activity) + end + end + + defp find_poll_activity(activity_id) do + with nil <- Activity.get_by_id(activity_id) do + {:error, :poll_activity_not_found} + end + end + + def schedule_poll_end(%Activity{data: %{"type" => "Create"}, id: activity_id} = activity) do + with %Object{data: %{"type" => "Question", "closed" => closed}} <- Object.normalize(activity), + {:ok, end_time} <- NaiveDateTime.from_iso8601(closed) do + %{ + op: "poll_end", + activity_id: activity_id + } + |> new(scheduled_at: end_time) + |> Oban.insert() + else + _ -> {:error, activity} + end + end + + def schedule_poll_end(activity), do: {:error, activity} +end |