add custom emoji reaction support
[akkoma] / lib / pleroma / web / mastodon_api / views / status_view.ex
index da44e0a74a1918124f7e58b20e03e932a5d3963f..e4057f108850c27bbaa6dd9378685c5250c0f238 100644 (file)
@@ -65,11 +65,19 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
 
   defp get_context_id(_), do: nil
 
-  defp reblogged?(activity, user) do
-    object = Object.normalize(activity, fetch: false) || %{}
-    present?(user && user.ap_id in (object.data["announcements"] || []))
+  # Check if the user reblogged this status
+  defp reblogged?(activity, %User{ap_id: ap_id}) do
+    with %Object{data: %{"announcements" => announcements}} when is_list(announcements) <-
+           Object.normalize(activity, fetch: false) do
+      ap_id in announcements
+    else
+      _ -> false
+    end
   end
 
+  # False if the user is logged out
+  defp reblogged?(_activity, _user), do: false
+
   def render("index.json", opts) do
     reading_user = opts[:for]
 
@@ -296,7 +304,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
         _e ->
           nil
       end
-
     emoji_reactions =
       object.data
       |> Map.get("reactions", [])
@@ -304,8 +311,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
         opts[:for],
         Map.get(opts, :with_muted, false)
       )
-      |> Stream.map(fn {emoji, users} ->
-        build_emoji_map(emoji, users, opts[:for])
+      |> Stream.map(fn {emoji, users, url} ->
+        build_emoji_map(emoji, users, url, opts[:for])
       end)
       |> Enum.to_list()
 
@@ -561,10 +568,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
     end
   end
 
-  defp build_emoji_map(emoji, users, current_user) do
+  defp build_emoji_map(emoji, users, url, current_user) do
     %{
       name: emoji,
       count: length(users),
+      url: url,
       me: !!(current_user && current_user.ap_id in users)
     }
   end