diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 13 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 9 | 
2 files changed, 22 insertions, 0 deletions
| diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 7807fa9cd..82e2d8f76 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -452,6 +452,19 @@ defmodule Pleroma.Web.ActivityPub.Utils do      |> Repo.one()    end +  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) + +    "EmojiReaction" +    |> Activity.Queries.by_type() +    |> where(actor: ^ap_id) +    |> where([activity], fragment("?->>'content' = ?", activity.data, ^emoji)) +    |> Activity.Queries.by_object_id(object_ap_id) +    |> order_by([activity], fragment("? desc nulls last", activity.id)) +    |> limit(1) +    |> Repo.one() +  end +    #### Announce-related helpers    @doc """ diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 53ada8fab..995d4b1af 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -125,6 +125,15 @@ defmodule Pleroma.Web.CommonAPI do      end    end +  def unreact_with_emoji(id, user, emoji) do +    with %Activity{} = reaction_activity <- Utils.get_latest_reaction(id, user, emoji) do +      ActivityPub.unreact_with_emoji(user, reaction_activity.data["id"]) +    else +      _ -> +        {:error, dgettext("errors", "Could not remove reaction emoji")} +    end +  end +    def vote(user, %{data: %{"type" => "Question"}} = object, choices) do      with :ok <- validate_not_author(object, user),           :ok <- validate_existing_votes(user, object), | 
