From e910f21d8d0246010956385be5bad486243d8e4c Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 8 Jun 2022 13:27:25 +0100 Subject: [PATCH] allow undoing --- lib/pleroma/web/activity_pub/utils.ex | 28 +++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 83bb8a552..cca58e0da 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -349,10 +349,17 @@ def add_emoji_reaction_to_object( ) 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( @@ -386,12 +393,20 @@ def emoji_count(reactions_list) 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 @@ -521,6 +536,11 @@ def fetch_latest_undo(%User{ap_id: ap_id}) 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 = if String.starts_with?(emoji, ":") do + emoji + else + ":#{emoji}:" + end "EmojiReact" |> Activity.Queries.by_type()