Merge branch 'update-floki' into 'develop'
[akkoma] / lib / pleroma / web / mastodon_api / views / notification_view.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.NotificationView do
6 use Pleroma.Web, :view
7
8 alias Pleroma.Activity
9 alias Pleroma.Notification
10 alias Pleroma.User
11 alias Pleroma.Web.CommonAPI
12 alias Pleroma.Web.MastodonAPI.AccountView
13 alias Pleroma.Web.MastodonAPI.NotificationView
14 alias Pleroma.Web.MastodonAPI.StatusView
15
16 def render("index.json", %{notifications: notifications, for: user}) do
17 safe_render_many(notifications, NotificationView, "show.json", %{for: user})
18 end
19
20 def render("show.json", %{
21 notification: %Notification{activity: activity} = notification,
22 for: user
23 }) do
24 actor = User.get_cached_by_ap_id(activity.data["actor"])
25 parent_activity = Activity.get_create_by_object_ap_id(activity.data["object"])
26 mastodon_type = Activity.mastodon_notification_type(activity)
27
28 with %{id: _} = account <- AccountView.render("show.json", %{user: actor, for: user}) do
29 response = %{
30 id: to_string(notification.id),
31 type: mastodon_type,
32 created_at: CommonAPI.Utils.to_masto_date(notification.inserted_at),
33 account: account,
34 pleroma: %{
35 is_seen: notification.seen
36 }
37 }
38
39 case mastodon_type do
40 "mention" ->
41 response
42 |> Map.merge(%{
43 status: StatusView.render("show.json", %{activity: activity, for: user})
44 })
45
46 "favourite" ->
47 response
48 |> Map.merge(%{
49 status: StatusView.render("show.json", %{activity: parent_activity, for: user})
50 })
51
52 "reblog" ->
53 response
54 |> Map.merge(%{
55 status: StatusView.render("show.json", %{activity: parent_activity, for: user})
56 })
57
58 "follow" ->
59 response
60
61 _ ->
62 nil
63 end
64 else
65 _ -> nil
66 end
67 end
68 end