Add webpush front-end support
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
47
lib/service/activity/renderer/renderer.ex
Normal file
47
lib/service/activity/renderer/renderer.ex
Normal file
@@ -0,0 +1,47 @@
|
||||
defmodule Mobilizon.Service.Activity.Renderer do
|
||||
@moduledoc """
|
||||
Behavior for Activity renderers
|
||||
"""
|
||||
|
||||
alias Mobilizon.Config
|
||||
alias Mobilizon.Activities.Activity
|
||||
alias Mobilizon.Service.Activity.Renderer.{Discussion, Event, Group, Member, Post, Resource}
|
||||
require Logger
|
||||
import Mobilizon.Web.Gettext, only: [dgettext: 3]
|
||||
|
||||
@type render :: %{body: String.t(), url: String.t()}
|
||||
|
||||
@callback render(entity :: Activity.t(), Keyword.t()) :: render()
|
||||
|
||||
@spec render(Activity.t()) :: render()
|
||||
def render(%Activity{} = activity, options \\ []) do
|
||||
locale = Keyword.get(options, :locale, "en")
|
||||
Gettext.put_locale(locale)
|
||||
|
||||
res =
|
||||
activity
|
||||
|> do_render(options)
|
||||
|> Map.put(:timestamp, DateTime.utc_now() |> DateTime.to_iso8601())
|
||||
|> Map.put(:locale, Keyword.get(options, :locale, "en"))
|
||||
|> Map.put(
|
||||
:title,
|
||||
dgettext("activity", "Activity on %{instance}", %{instance: Config.instance_name()})
|
||||
)
|
||||
|
||||
Logger.debug("notification to be sent")
|
||||
Logger.debug(inspect(res))
|
||||
res
|
||||
end
|
||||
|
||||
defp do_render(%Activity{type: type} = activity, options) do
|
||||
case type do
|
||||
:discussion -> Discussion.render(activity, options)
|
||||
:event -> Event.render(activity, options)
|
||||
:group -> Group.render(activity, options)
|
||||
:member -> Member.render(activity, options)
|
||||
:post -> Post.render(activity, options)
|
||||
:resource -> Resource.render(activity, options)
|
||||
_ -> nil
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user