Update Copyrights
[akkoma] / lib / pleroma / web / mastodon_api / views / conversation_view.ex
index 5adaecdb03e41eb7afb31eb63661a0b3c44a6157..2b6f84c72bbea703236178cb8c78f2f93eb13c05 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.MastodonAPI.ConversationView do
@@ -11,8 +11,15 @@ defmodule Pleroma.Web.MastodonAPI.ConversationView do
   alias Pleroma.Web.MastodonAPI.AccountView
   alias Pleroma.Web.MastodonAPI.StatusView
 
-  def render("participation.json", %{participation: participation, user: user}) do
-    participation = Repo.preload(participation, conversation: :users, recipients: [])
+  def render("participations.json", %{participations: participations, for: user}) do
+    safe_render_many(participations, __MODULE__, "participation.json", %{
+      as: :participation,
+      for: user
+    })
+  end
+
+  def render("participation.json", %{participation: participation, for: user}) do
+    participation = Repo.preload(participation, conversation: [], recipients: [])
 
     last_activity_id =
       with nil <- participation.last_activity_id do
@@ -23,34 +30,18 @@ defmodule Pleroma.Web.MastodonAPI.ConversationView do
       end
 
     activity = Activity.get_by_id_with_object(last_activity_id)
-
-    last_status = StatusView.render("status.json", %{activity: activity, for: user})
-
     # Conversations return all users except the current user.
-    users =
-      participation.conversation.users
-      |> Enum.reject(&(&1.id == user.id))
-
-    accounts =
-      AccountView.render("accounts.json", %{
-        users: users,
-        as: :user
-      })
-
-    recipients =
-      AccountView.render("accounts.json", %{
-        users: participation.recipients,
-        as: :user
-      })
+    users = Enum.reject(participation.recipients, &(&1.id == user.id))
 
     %{
       id: participation.id |> to_string(),
-      accounts: accounts,
+      accounts: render(AccountView, "index.json", users: users, as: :user),
       unread: !participation.read,
-      last_status: last_status,
-      pleroma: %{
-        recipients: recipients
-      }
+      last_status:
+        render(StatusView, "show.json",
+          activity: activity,
+          direct_conversation_id: participation.id
+        )
     }
   end
 end