Store status data inside flag activity
[akkoma] / lib / pleroma / web / activity_pub / utils.ex
index 2ba182f4e6412de4beb1cf731478b0c1d8f97ff9..57982eb4adcf5ffa04c8bcb2cc17c8e66240e441 100644 (file)
@@ -251,16 +251,6 @@ defmodule Pleroma.Web.ActivityPub.Utils do
     |> Repo.one()
   end
 
-  @doc """
-  Returns like activities targeting an object
-  """
-  def get_object_likes(%{data: %{"id" => id}}) do
-    id
-    |> Activity.Queries.by_object_id()
-    |> Activity.Queries.by_type("Like")
-    |> Repo.all()
-  end
-
   @spec make_like_data(User.t(), map(), String.t()) :: map()
   def make_like_data(
         %User{ap_id: ap_id} = actor,
@@ -461,14 +451,16 @@ defmodule Pleroma.Web.ActivityPub.Utils do
   """
   def make_unannounce_data(
         %User{ap_id: ap_id} = user,
-        %Activity{data: %{"context" => context}} = activity,
+        %Activity{data: %{"context" => context, "object" => object}} = activity,
         activity_id
       ) do
+    object = Object.normalize(object)
+
     %{
       "type" => "Undo",
       "actor" => ap_id,
       "object" => activity.data,
-      "to" => [user.follower_address, activity.data["actor"]],
+      "to" => [user.follower_address, object.data["actor"]],
       "cc" => [Pleroma.Constants.as_public()],
       "context" => context
     }
@@ -477,14 +469,16 @@ defmodule Pleroma.Web.ActivityPub.Utils do
 
   def make_unlike_data(
         %User{ap_id: ap_id} = user,
-        %Activity{data: %{"context" => context}} = activity,
+        %Activity{data: %{"context" => context, "object" => object}} = activity,
         activity_id
       ) do
+    object = Object.normalize(object)
+
     %{
       "type" => "Undo",
       "actor" => ap_id,
       "object" => activity.data,
-      "to" => [user.follower_address, activity.data["actor"]],
+      "to" => [user.follower_address, object.data["actor"]],
       "cc" => [Pleroma.Constants.as_public()],
       "context" => context
     }
@@ -494,7 +488,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do
   @spec add_announce_to_object(Activity.t(), Object.t()) ::
           {:ok, Object.t()} | {:error, Ecto.Changeset.t()}
   def add_announce_to_object(
-        %Activity{data: %{"actor" => actor, "cc" => [Pleroma.Constants.as_public()]}},
+        %Activity{data: %{"actor" => actor}},
         object
       ) do
     announcements = take_announcements(object)
@@ -615,9 +609,33 @@ defmodule Pleroma.Web.ActivityPub.Utils do
   defp build_flag_object(%{account: account, statuses: statuses} = _) do
     [account.ap_id] ++
       Enum.map(statuses || [], fn
-        %Activity{} = act -> act.data["id"]
-        act when is_map(act) -> act["id"]
-        act when is_binary(act) -> act
+        %Activity{} = act ->
+          obj = Object.get_by_ap_id(act.data["object"])
+
+          %{
+            "type" => "Note",
+            "id" => act.data["id"],
+            "content" => obj.data["content"]
+          }
+
+        act when is_map(act) ->
+          obj = Object.get_by_ap_id(act["object"])
+
+          %{
+            "type" => "Note",
+            "id" => act["id"],
+            "content" => obj.data["content"]
+          }
+
+        act
+        when is_binary(act) ->
+          activity = Activity.get_by_ap_id_with_object(act)
+
+          %{
+            "type" => "Note",
+            "id" => activity.data["id"],
+            "content" => activity.data["object"]["content"]
+          }
       end)
   end
 
@@ -745,6 +763,6 @@ defmodule Pleroma.Web.ActivityPub.Utils do
     |> Repo.all()
   end
 
-  defp maybe_put(map, _key, nil), do: map
-  defp maybe_put(map, key, value), do: Map.put(map, key, value)
+  def maybe_put(map, _key, nil), do: map
+  def maybe_put(map, key, value), do: Map.put(map, key, value)
 end