Return "audio" info in mastodon api.
[akkoma] / lib / pleroma / web / activity_pub / transmogrifier.ex
index d759ca2b2faf21a65074a0a09d7fac1cc21dc6b4..6561b8d762923a485283aa2b9e2bb519013f691f 100644 (file)
@@ -22,6 +22,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     |> fix_context
     |> fix_in_reply_to
     |> fix_emoji
+    |> fix_tag
   end
 
   def fix_in_reply_to(%{"inReplyTo" => in_reply_to_id} = object) when not is_nil(in_reply_to_id) do
@@ -76,6 +77,17 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     |> Map.put("emoji", emoji)
   end
 
+  def fix_tag(object) do
+    tags = (object["tag"] || [])
+    |> Enum.filter(fn (data) -> data["type"] == "Hashtag" and data["name"] end)
+    |> Enum.map(fn (data) -> String.slice(data["name"], 1..-1) end)
+
+    combined = (object["tag"] || []) ++ tags
+
+    object
+    |> Map.put("tag", combined)
+  end
+
   # TODO: validate those with a Ecto scheme
   # - tags
   # - emoji
@@ -183,6 +195,17 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     if object = Object.get_by_ap_id(id), do: {:ok, object}, else: nil
   end
 
+  def set_reply_to_uri(%{"inReplyTo" => inReplyTo} = object) do
+    with false <- String.starts_with?(inReplyTo, "http"),
+         {:ok, %{data: replied_to_object}} <- get_obj_helper(inReplyTo) do
+      Map.put(object, "inReplyTo", replied_to_object["external_url"] || inReplyTo)
+    else
+      _e -> object
+    end
+  end
+  def set_reply_to_uri(obj), do: obj
+
+  # Prepares the object of an outgoing create activity.
   def prepare_object(object) do
     object
     |> set_sensitive
@@ -192,6 +215,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     |> add_attributed_to
     |> prepare_attachments
     |> set_conversation
+    |> set_reply_to_uri
   end
 
   @doc