logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

conversation_view.ex (1800B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.MastodonAPI.ConversationView do
  5. use Pleroma.Web, :view
  6. alias Pleroma.Activity
  7. alias Pleroma.Repo
  8. alias Pleroma.Web.ActivityPub.ActivityPub
  9. alias Pleroma.Web.MastodonAPI.AccountView
  10. alias Pleroma.Web.MastodonAPI.StatusView
  11. def render("participations.json", %{participations: participations, for: user}) do
  12. safe_render_many(participations, __MODULE__, "participation.json", %{
  13. as: :participation,
  14. for: user
  15. })
  16. end
  17. def render("participation.json", %{participation: participation, for: user}) do
  18. participation = Repo.preload(participation, conversation: [], recipients: [])
  19. last_activity_id =
  20. with nil <- participation.last_activity_id do
  21. ActivityPub.fetch_latest_direct_activity_id_for_context(
  22. participation.conversation.ap_id,
  23. %{
  24. user: user,
  25. blocking_user: user
  26. }
  27. )
  28. end
  29. activity = Activity.get_by_id_with_object(last_activity_id)
  30. # Conversations return all users except the current user,
  31. # except when the current user is the only participant
  32. users =
  33. if length(participation.recipients) > 1 do
  34. Enum.reject(participation.recipients, &(&1.id == user.id))
  35. else
  36. participation.recipients
  37. end
  38. %{
  39. id: participation.id |> to_string(),
  40. accounts: render(AccountView, "index.json", users: users, for: user),
  41. unread: !participation.read,
  42. last_status:
  43. render(StatusView, "show.json",
  44. activity: activity,
  45. direct_conversation_id: participation.id,
  46. for: user
  47. )
  48. }
  49. end
  50. end