Use PleromaJobQueue in Pleroma.Web.Push
This commit is contained in:
parent
9c9eec62c2
commit
f1712cd2f1
6 changed files with 23 additions and 47 deletions
|
@ -356,6 +356,7 @@
|
|||
config :pleroma_job_queue, :queues,
|
||||
federator_incoming: 50,
|
||||
federator_outgoing: 50,
|
||||
web_push: 50,
|
||||
mailer: 10
|
||||
|
||||
config :pleroma, :fetch_initial_posts,
|
||||
|
|
|
@ -218,14 +218,14 @@ This section is used to configure Pleroma-FE, unless ``:managed_config`` in ``:i
|
|||
- `port`
|
||||
* `url` - a list containing the configuration for generating urls, accepts
|
||||
- `host` - the host without the scheme and a post (e.g `example.com`, not `https://example.com:2020`)
|
||||
- `scheme` - e.g `http`, `https`
|
||||
- `scheme` - e.g `http`, `https`
|
||||
- `port`
|
||||
- `path`
|
||||
|
||||
|
||||
**Important note**: if you modify anything inside these lists, default `config.exs` values will be overwritten, which may result in breakage, to make sure this does not happen please copy the default value for the list from `config.exs` and modify/add only what you need
|
||||
|
||||
Example:
|
||||
Example:
|
||||
```elixir
|
||||
config :pleroma, Pleroma.Web.Endpoint,
|
||||
url: [host: "example.com", port: 2020, scheme: "https"],
|
||||
|
@ -317,6 +317,7 @@ Pleroma has the following queues:
|
|||
* `federator_outgoing` - Outgoing federation
|
||||
* `federator_incoming` - Incoming federation
|
||||
* `mailer` - Email sender, see [`Pleroma.Mailer`](#pleroma-mailer)
|
||||
* `web_push` - Web push notifications
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -109,8 +109,8 @@ def start(_type, _args) do
|
|||
[
|
||||
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() ++
|
||||
|
|
|
@ -19,8 +19,8 @@ defmodule Pleroma.Web.Push.Impl do
|
|||
@types ["Create", "Follow", "Announce", "Like"]
|
||||
|
||||
@doc "Performs sending notifications for user subscriptions"
|
||||
@spec perform_send(Notification.t()) :: list(any)
|
||||
def perform_send(
|
||||
@spec perform(Notification.t()) :: list(any) | :error
|
||||
def perform(
|
||||
%{activity: %{data: %{"type" => activity_type}, id: activity_id}, user_id: user_id} =
|
||||
notif
|
||||
)
|
||||
|
@ -50,7 +50,7 @@ def perform_send(
|
|||
end
|
||||
end
|
||||
|
||||
def perform_send(_) do
|
||||
def perform(_) do
|
||||
Logger.warn("Unknown notification type")
|
||||
:error
|
||||
end
|
||||
|
|
|
@ -3,18 +3,20 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.Push do
|
||||
use GenServer
|
||||
|
||||
alias Pleroma.Web.Push.Impl
|
||||
|
||||
require Logger
|
||||
|
||||
##############
|
||||
# Client API #
|
||||
##############
|
||||
def init() do
|
||||
unless enabled() do
|
||||
Logger.warn("""
|
||||
VAPID key pair is not found. If you wish to enabled web push, please run
|
||||
|
||||
def start_link do
|
||||
GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
|
||||
mix web_push.gen.keypair
|
||||
|
||||
and add the resulting output to your configuration file.
|
||||
""")
|
||||
end
|
||||
end
|
||||
|
||||
def vapid_config do
|
||||
|
@ -30,35 +32,5 @@ def enabled do
|
|||
end
|
||||
|
||||
def send(notification),
|
||||
do: GenServer.cast(__MODULE__, {:send, notification})
|
||||
|
||||
####################
|
||||
# Server Callbacks #
|
||||
####################
|
||||
|
||||
@impl true
|
||||
def init(:ok) do
|
||||
if enabled() do
|
||||
{:ok, nil}
|
||||
else
|
||||
Logger.warn("""
|
||||
VAPID key pair is not found. If you wish to enabled web push, please run
|
||||
|
||||
mix web_push.gen.keypair
|
||||
|
||||
and add the resulting output to your configuration file.
|
||||
""")
|
||||
|
||||
:ignore
|
||||
end
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_cast({:send, notification}, state) do
|
||||
if enabled() do
|
||||
Impl.perform_send(notification)
|
||||
end
|
||||
|
||||
{:noreply, state}
|
||||
end
|
||||
do: PleromaJobQueue.enqueue(:web_push, Impl, [notification])
|
||||
end
|
||||
|
|
|
@ -64,17 +64,19 @@ test "performs sending notifications" do
|
|||
}
|
||||
)
|
||||
|
||||
assert Impl.perform_send(notif) == [:ok, :ok]
|
||||
assert Impl.perform(notif) == [:ok, :ok]
|
||||
end
|
||||
|
||||
@tag capture_log: true
|
||||
test "returns error if notif does not match " do
|
||||
assert Impl.perform_send(%{}) == :error
|
||||
assert Impl.perform(%{}) == :error
|
||||
end
|
||||
|
||||
test "successful message sending" do
|
||||
assert Impl.push_message(@message, @sub, @api_key, %Subscription{}) == :ok
|
||||
end
|
||||
|
||||
@tag capture_log: true
|
||||
test "fail message sending" do
|
||||
assert Impl.push_message(
|
||||
@message,
|
||||
|
|
Loading…
Reference in a new issue