X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Fbuilder.ex;h=97ceaf08ecfa8ec008d753948bd0a502903162e4;hb=1419eee5dfe1f3d76c28ab7c6f3cb24ba652fef2;hp=647ccf432d9ef60fe953e05332c42025000137c5;hpb=bc62a352820cf0cf56852e187b157b1d609a3ab3;p=akkoma diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 647ccf432..97ceaf08e 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -16,6 +16,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.CommonAPI.ActivityDraft + alias Pleroma.Web.Endpoint require Pleroma.Constants @@ -58,9 +59,34 @@ defmodule Pleroma.Web.ActivityPub.Builder do def emoji_react(actor, object, emoji) do with {:ok, data, meta} <- object_action(actor, object) do data = - data - |> Map.put("content", emoji) - |> Map.put("type", "EmojiReact") + if Emoji.is_unicode_emoji?(emoji) do + data + |> Map.put("content", emoji) + |> Map.put("type", "EmojiReact") + else + with %{} = emojo <- Emoji.get(emoji) do + path = emojo |> Map.get(:file) + url = "#{Endpoint.url()}#{path}" + + data + |> Map.put("content", emoji) + |> Map.put("type", "EmojiReact") + |> Map.put("tag", [ + %{} + |> Map.put("id", url) + |> Map.put("type", "Emoji") + |> Map.put("name", emojo.code) + |> Map.put( + "icon", + %{} + |> Map.put("type", "Image") + |> Map.put("url", url) + ) + ]) + else + _ -> {:error, "Emoji does not exist"} + end + end {:ok, data, meta} end @@ -142,6 +168,7 @@ defmodule Pleroma.Web.ActivityPub.Builder do "tag" => Keyword.values(draft.tags) |> Enum.uniq() } |> add_in_reply_to(draft.in_reply_to) + |> add_quote(draft.quote) |> Map.merge(draft.extra) {:ok, data, []} @@ -157,27 +184,13 @@ defmodule Pleroma.Web.ActivityPub.Builder do end end - def chat_message(actor, recipient, content, opts \\ []) do - basic = %{ - "id" => Utils.generate_object_id(), - "actor" => actor.ap_id, - "type" => "ChatMessage", - "to" => [recipient], - "content" => content, - "published" => DateTime.utc_now() |> DateTime.to_iso8601(), - "emoji" => Emoji.Formatter.get_emoji_map(content) - } - - case opts[:attachment] do - %Object{data: attachment_data} -> - { - :ok, - Map.put(basic, "attachment", attachment_data), - [] - } + defp add_quote(object, nil), do: object - _ -> - {:ok, basic, []} + defp add_quote(object, quote) do + with %Object{} = quote_object <- Object.normalize(quote, fetch: false) do + Map.put(object, "quoteUri", quote_object.data["id"]) + else + _ -> object end end