Show images, video, and audio attachments to notices.
[akkoma] / lib / pleroma / web / static_fe / activity_representer.ex
index 9c43156109b1f5b4a87967c81c237fe58680824d..7b7e1730cc87adebe969735468e56ba712b879aa 100644 (file)
@@ -7,19 +7,23 @@ defmodule Pleroma.Web.StaticFE.ActivityRepresenter do
   alias Pleroma.Object
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.Visibility
+  alias Pleroma.Web.Router.Helpers
+
+  def prepare_activity(%User{} = user, %Activity{} = activity) do
+    object = Object.normalize(activity.data["object"])
 
-  def prepare_activity(%User{} = user, %Object{} = object) do
     %{}
     |> set_user(user)
     |> set_object(object)
     |> set_title(object)
     |> set_content(object)
+    |> set_link(activity.id)
+    |> set_published(object)
+    |> set_sensitive(object)
+    |> set_attachment(object.data["attachment"])
     |> set_attachments(object)
   end
 
-  def prepare_activity(%User{} = user, %Activity{} = activity), do:
-    prepare_activity(user, Object.normalize(activity.data["object"]))
-
   defp set_user(data, %User{} = user), do: Map.put(data, :user, user)
 
   defp set_object(data, %Object{} = object), do: Map.put(data, :object, object)
@@ -37,16 +41,26 @@ defmodule Pleroma.Web.StaticFE.ActivityRepresenter do
 
   defp set_content(data, _), do: Map.put(data, :content, nil)
 
+  defp set_attachment(data, attachment), do: Map.put(data, :attachment, attachment)
+
+  defp set_link(data, activity_id),
+    do: Map.put(data, :link, Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, activity_id))
+
+  defp set_published(data, %Object{data: %{"published" => published}}),
+    do: Map.put(data, :published, published)
+
+  defp set_sensitive(data, %Object{data: %{"sensitive" => sensitive}}),
+    do: Map.put(data, :sensitive, sensitive)
+
   # TODO: attachments
   defp set_attachments(data, _), do: Map.put(data, :attachments, [])
 
   def represent(activity_id) do
-    with %Activity{data: %{"type" => "Create"}} = activity <- Activity.get_by_id(activity_id),
+    with %Activity{data: %{"type" => "Create"}} = activity <-
+           Activity.get_by_id_with_object(activity_id),
          true <- Visibility.is_public?(activity),
-         %Object{} = object <- Object.normalize(activity.data["object"]),
-         %User{} = user <- User.get_or_fetch(activity.data["actor"]),
-         data <- prepare_activity(user, object) do
-      {:ok, data}
+         {:ok, %User{} = user} <- User.get_or_fetch(activity.data["actor"]) do
+      {:ok, prepare_activity(user, activity)}
     else
       e ->
         {:error, e}