aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoman Chvanikov <chvanikoff@gmail.com>2019-04-21 23:14:27 +0700
committerRoman Chvanikov <chvanikoff@gmail.com>2019-04-21 23:14:27 +0700
commite56afefef9c0f256561c6ecab79e5520fdeb6d5e (patch)
treecac8c7ce5cc31cd6e794a891088c13aaa04e90d4 /lib
parent2662bea4e0d945edf7a24a44edf3ed39b2e64de9 (diff)
downloadpleroma-e56afefef9c0f256561c6ecab79e5520fdeb6d5e.tar.gz
Refactor conversation function in MastodonAPIController to use a View
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex44
-rw-r--r--lib/pleroma/web/mastodon_api/views/conversation_view.ex38
2 files changed, 43 insertions, 39 deletions
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
index 86cacb0b0..d5b6a943f 100644
--- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
+++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
@@ -22,6 +22,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MastodonAPI.AppView
+ alias Pleroma.Web.MastodonAPI.ConversationView
alias Pleroma.Web.MastodonAPI.FilterView
alias Pleroma.Web.MastodonAPI.ListView
alias Pleroma.Web.MastodonAPI.MastodonAPI
@@ -1590,22 +1591,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
conversations =
Enum.map(participations, fn participation ->
- activity = Activity.get_by_id_with_object(participation.last_activity_id)
-
- last_status = StatusView.render("status.json", %{activity: activity, for: user})
-
- accounts =
- AccountView.render("accounts.json", %{
- users: participation.conversation.users,
- as: :user
- })
-
- %{
- id: participation.id |> to_string(),
- accounts: accounts,
- unread: !participation.read,
- last_status: last_status
- }
+ ConversationView.render("participation.json", %{participation: participation, user: user})
end)
conn
@@ -1617,31 +1603,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
with %Participation{} = participation <-
Repo.get_by(Participation, id: participation_id, user_id: user.id),
{:ok, participation} <- Participation.mark_as_read(participation) do
- participation = Repo.preload(participation, conversation: :users)
-
- accounts =
- AccountView.render("accounts.json", %{
- users: participation.conversation.users,
- as: :user
- })
-
- last_activity_id =
- ActivityPub.fetch_latest_activity_id_for_context(participation.conversation.ap_id, %{
- "user" => user,
- "blocking_user" => user
- })
-
- activity = Activity.get_by_id_with_object(last_activity_id)
-
- last_status = StatusView.render("status.json", %{activity: activity, for: user})
+ participation_view =
+ ConversationView.render("participation.json", %{participation: participation, user: user})
conn
- |> json(%{
- id: participation.id,
- accounts: accounts,
- unread: !participation.read,
- last_status: last_status
- })
+ |> json(participation_view)
end
end
diff --git a/lib/pleroma/web/mastodon_api/views/conversation_view.ex b/lib/pleroma/web/mastodon_api/views/conversation_view.ex
new file mode 100644
index 000000000..d841a840c
--- /dev/null
+++ b/lib/pleroma/web/mastodon_api/views/conversation_view.ex
@@ -0,0 +1,38 @@
+defmodule Pleroma.Web.MastodonAPI.ConversationView do
+ use Pleroma.Web, :view
+
+ alias Pleroma.Activity
+ alias Pleroma.Repo
+ alias Pleroma.Web.ActivityPub.ActivityPub
+ alias Pleroma.Web.MastodonAPI.StatusView
+ alias Pleroma.Web.MastodonAPI.AccountView
+
+ def render("participation.json", %{participation: participation, user: user}) do
+ participation = Repo.preload(participation, conversation: :users)
+
+ last_activity_id =
+ with nil <- participation.last_activity_id do
+ ActivityPub.fetch_latest_activity_id_for_context(participation.conversation.ap_id, %{
+ "user" => user,
+ "blocking_user" => user
+ })
+ end
+
+ activity = Activity.get_by_id_with_object(last_activity_id)
+
+ last_status = StatusView.render("status.json", %{activity: activity, for: user})
+
+ accounts =
+ AccountView.render("accounts.json", %{
+ users: participation.conversation.users,
+ as: :user
+ })
+
+ %{
+ id: participation.id |> to_string(),
+ accounts: accounts,
+ unread: !participation.read,
+ last_status: last_status
+ }
+ end
+end