update mastofe paths (#95)
[akkoma] / lib / pleroma / web / activity_pub / utils.ex
index 83bb8a552a4ed6da55fb3e3f7d9dfcd0321049f8..0e92deb31120df665a1367930e6dfd18c48aa64c 100644 (file)
@@ -349,10 +349,18 @@ defmodule Pleroma.Web.ActivityPub.Utils do
       ) do
     reactions = get_cached_emoji_reactions(object)
     emoji = stripped_emoji_name(emoji)
+    url = emoji_url(emoji, activity)
+
     new_reactions =
-      case Enum.find_index(reactions, fn [candidate, _, _] -> emoji == candidate end) do
+      case Enum.find_index(reactions, fn [candidate, _, candidate_url] ->
+             if is_nil(candidate_url) do
+               emoji == candidate
+             else
+               url == candidate_url
+             end
+           end) do
         nil ->
-          reactions ++ [[emoji, [actor], emoji_url(emoji, activity)]]
+          reactions ++ [[emoji, [actor], url]]
 
         index ->
           List.update_at(
@@ -373,12 +381,18 @@ defmodule Pleroma.Web.ActivityPub.Utils do
     |> String.replace_trailing(":", "")
   end
 
-  defp emoji_url(name,
-    %Activity{
-        data: %{"tag" => [
-            %{"type" => "Emoji", "name" => name, "icon" => %{"url" => url}}
-        ]}
-    }), do: url
+  defp emoji_url(
+         name,
+         %Activity{
+           data: %{
+             "tag" => [
+               %{"type" => "Emoji", "name" => name, "icon" => %{"url" => url}}
+             ]
+           }
+         }
+       ),
+       do: url
+
   defp emoji_url(_, _), do: nil
 
   def emoji_count(reactions_list) do
@@ -386,12 +400,21 @@ defmodule Pleroma.Web.ActivityPub.Utils do
   end
 
   def remove_emoji_reaction_from_object(
-        %Activity{data: %{"content" => emoji, "actor" => actor}},
+        %Activity{data: %{"content" => emoji, "actor" => actor}} = activity,
         object
       ) do
+    emoji = stripped_emoji_name(emoji)
     reactions = get_cached_emoji_reactions(object)
+    url = emoji_url(emoji, activity)
+
     new_reactions =
-      case Enum.find_index(reactions, fn [candidate, _, _] -> emoji == candidate end) do
+      case Enum.find_index(reactions, fn [candidate, _, candidate_url] ->
+             if is_nil(candidate_url) do
+               emoji == candidate
+             else
+               url == candidate_url
+             end
+           end) do
         nil ->
           reactions
 
@@ -522,6 +545,8 @@ defmodule Pleroma.Web.ActivityPub.Utils do
   def get_latest_reaction(internal_activity_id, %{ap_id: ap_id}, emoji) do
     %{data: %{"object" => object_ap_id}} = Activity.get_by_id(internal_activity_id)
 
+    emoji = Pleroma.Emoji.maybe_quote(emoji)
+
     "EmojiReact"
     |> Activity.Queries.by_type()
     |> where(actor: ^ap_id)
@@ -688,21 +713,6 @@ defmodule Pleroma.Web.ActivityPub.Utils do
     |> Map.merge(additional)
   end
 
-  #### Listen-related helpers
-  def make_listen_data(params, additional) do
-    published = params.published || make_date()
-
-    %{
-      "type" => "Listen",
-      "to" => params.to |> Enum.uniq(),
-      "actor" => params.actor.ap_id,
-      "object" => params.object,
-      "published" => published,
-      "context" => params.context
-    }
-    |> Map.merge(additional)
-  end
-
   #### Flag-related helpers
   @spec make_flag_data(map(), map()) :: map()
   def make_flag_data(%{actor: actor, context: context, content: content} = params, additional) do