use Pleroma.Web, :view
alias Pleroma.Activity
- alias Pleroma.Chat.MessageReference
alias Pleroma.Notification
- alias Pleroma.Object
alias Pleroma.User
alias Pleroma.UserRelationship
alias Pleroma.Web.AdminAPI.Report
alias Pleroma.Web.AdminAPI.ReportView
alias Pleroma.Web.CommonAPI
+ alias Pleroma.Web.MediaProxy
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MastodonAPI.NotificationView
alias Pleroma.Web.MastodonAPI.StatusView
- alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView
- @parent_types ~w{Like Announce EmojiReact}
+ defp object_id_for(%{data: %{"object" => %{"id" => id}}}) when is_binary(id), do: id
+
+ defp object_id_for(%{data: %{"object" => id}}) when is_binary(id), do: id
+
+ @parent_types ~w{Like Announce EmojiReact Update}
def render("index.json", %{notifications: notifications, for: reading_user} = opts) do
activities = Enum.map(notifications, & &1.activity)
%{data: %{"type" => type}} ->
type in @parent_types
end)
- |> Enum.map(& &1.data["object"])
+ |> Enum.map(&object_id_for/1)
|> Activity.create_by_object_ap_id()
|> Activity.with_preloaded_object(:left)
|> Pleroma.Repo.all()
|> Map.put(:parent_activities, parent_activities)
|> Map.put(:relationships, relationships_opt)
- safe_render_many(notifications, NotificationView, "show.json", opts)
+ render_many(notifications, NotificationView, "show.json", opts)
end
def render(
parent_activity_fn = fn ->
if opts[:parent_activities] do
- Activity.Queries.find_by_object_ap_id(opts[:parent_activities], activity.data["object"])
+ Activity.Queries.find_by_object_ap_id(opts[:parent_activities], object_id_for(activity))
else
- Activity.get_create_by_object_ap_id(activity.data["object"])
+ Activity.get_create_by_object_ap_id(object_id_for(activity))
end
end
"reblog" ->
put_status(response, parent_activity_fn.(), reading_user, status_render_opts)
+ "update" ->
+ put_status(response, parent_activity_fn.(), reading_user, status_render_opts)
+
"move" ->
put_target(response, activity, reading_user, %{})
+ "poll" ->
+ put_status(response, activity, reading_user, status_render_opts)
+
"pleroma:emoji_reaction" ->
response
|> put_status(parent_activity_fn.(), reading_user, status_render_opts)
|> put_emoji(activity)
- "pleroma:chat_mention" ->
- put_chat_message(response, activity, reading_user, status_render_opts)
-
"pleroma:report" ->
put_report(response, activity)
end
defp put_emoji(response, activity) do
- Map.put(response, :emoji, activity.data["content"])
- end
-
- defp put_chat_message(response, activity, reading_user, opts) do
- object = Object.normalize(activity, fetch: false)
- author = User.get_cached_by_ap_id(object.data["actor"])
- chat = Pleroma.Chat.get(reading_user.id, author.ap_id)
- cm_ref = MessageReference.for_chat_and_object(chat, object)
- render_opts = Map.merge(opts, %{for: reading_user, chat_message_reference: cm_ref})
- chat_message_render = MessageReferenceView.render("show.json", render_opts)
-
- Map.put(response, :chat_message, chat_message_render)
+ response
+ |> Map.put(:emoji, activity.data["content"])
+ |> Map.put(:emoji_url, MediaProxy.url(Pleroma.Emoji.emoji_url(activity.data)))
end
defp put_status(response, activity, reading_user, opts) do