Apply all suggested changes from reviewers.
[akkoma] / lib / pleroma / web / static_fe / static_fe_controller.ex
index 7d7cb6ddd55d77aac23004f1b2c6d8628d7b0dfd..6e8d0d622e462134774028c8b7800c210ef01c32 100644 (file)
@@ -5,30 +5,49 @@
 defmodule Pleroma.Web.StaticFE.StaticFEController do
   use Pleroma.Web, :controller
 
+  alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Web.StaticFE.ActivityRepresenter
+  alias Pleroma.Web.StaticFE.UserRepresenter
 
-  require Logger
+  plug(:put_layout, :static_fe)
+  plug(:put_view, Pleroma.Web.StaticFE.StaticFEView)
+  plug(:assign_id)
+  action_fallback(:not_found)
 
-  def show_notice(conn, %{"notice_id" => notice_id}) do
+  def show_notice(%{assigns: %{notice_id: notice_id}} = conn, _params) do
     with {:ok, data} <- ActivityRepresenter.represent(notice_id) do
-      conn
-      |> put_layout(:static_fe)
-      |> put_status(200)
-      |> put_view(Pleroma.Web.StaticFE.StaticFEView)
-      |> render("notice.html", data)
-    else
-      _ ->
-        conn
-        |> put_status(404)
-        |> text("Not found")
+      context = data.object.data["context"]
+      activities = ActivityPub.fetch_activities_for_context(context, %{})
+
+      data =
+        for a <- Enum.reverse(activities) do
+          ActivityRepresenter.prepare_activity(data.user, a)
+          |> Map.put(:selected, a.object.id == data.object.id)
+        end
+
+      render(conn, "conversation.html", data: data)
+    end
+  end
+
+  def show_user(%{assigns: %{username_or_id: username_or_id}} = conn, _params) do
+    with {:ok, data} <- UserRepresenter.represent(username_or_id) do
+      render(conn, "profile.html", data: data)
     end
   end
 
-  def show(%{path_info: ["notice", notice_id]} = conn, _params),
-    do: show_notice(conn, %{"notice_id" => notice_id})
+  def assign_id(%{path_info: ["notice", notice_id]} = conn, _opts),
+    do: assign(conn, :notice_id, notice_id)
+
+  def assign_id(%{path_info: ["users", user_id]} = conn, _opts),
+    do: assign(conn, :username_or_id, user_id)
+
+  def assign_id(%{path_info: [user_id]} = conn, _opts),
+    do: assign(conn, :username_or_id, user_id)
+
+  def assign_id(conn, _opts), do: conn
 
   # Fallback for unhandled types
-  def show(conn, _params) do
+  def not_found(conn, _opts) do
     conn
     |> put_status(404)
     |> text("Not found")