logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma

notification_view.ex (1780B)


      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.TwitterAPI.NotificationView do
      6   use Pleroma.Web, :view
      7   alias Pleroma.Notification
      8   alias Pleroma.User
      9   alias Pleroma.Web.CommonAPI.Utils
     10   alias Pleroma.Web.TwitterAPI.ActivityView
     11   alias Pleroma.Web.TwitterAPI.UserView
     12 
     13   require Pleroma.Constants
     14 
     15   defp get_user(ap_id, opts) do
     16     cond do
     17       user = opts[:users][ap_id] ->
     18         user
     19 
     20       String.ends_with?(ap_id, "/followers") ->
     21         nil
     22 
     23       ap_id == Pleroma.Constants.as_public() ->
     24         nil
     25 
     26       true ->
     27         User.get_cached_by_ap_id(ap_id)
     28     end
     29   end
     30 
     31   def render("notification.json", %{notifications: notifications, for: user}) do
     32     render_many(
     33       notifications,
     34       Pleroma.Web.TwitterAPI.NotificationView,
     35       "notification.json",
     36       for: user
     37     )
     38   end
     39 
     40   def render(
     41         "notification.json",
     42         %{
     43           notification: %Notification{
     44             id: id,
     45             seen: seen,
     46             activity: activity,
     47             inserted_at: created_at
     48           },
     49           for: user
     50         } = opts
     51       ) do
     52     ntype =
     53       case activity.data["type"] do
     54         "Create" -> "mention"
     55         "Like" -> "like"
     56         "Announce" -> "repeat"
     57         "Follow" -> "follow"
     58       end
     59 
     60     from = get_user(activity.data["actor"], opts)
     61 
     62     %{
     63       "id" => id,
     64       "ntype" => ntype,
     65       "notice" => ActivityView.render("activity.json", %{activity: activity, for: user}),
     66       "from_profile" => UserView.render("show.json", %{user: from, for: user}),
     67       "is_seen" => if(seen, do: 1, else: 0),
     68       "created_at" => created_at |> Utils.format_naive_asctime()
     69     }
     70   end
     71 end