diff options
author | Alex Gleason <alex@alexgleason.me> | 2021-06-04 21:12:37 -0500 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2021-06-04 21:12:37 -0500 |
commit | 3be08e7c2ec8b77e02e3d0572227221d68163df0 (patch) | |
tree | 0f1d9ab79c29060edd3f95c4795e634a10d1a5a3 /lib/pleroma/web/common_api/activity_draft.ex | |
parent | 1c3fe43d231428fee392afd726363193fdcb8008 (diff) | |
parent | 94687e23938b808a3fff95c92956ec337160cd0b (diff) | |
download | pleroma-3be08e7c2ec8b77e02e3d0572227221d68163df0.tar.gz |
Merge remote-tracking branch 'pleroma/develop' into cycles-reverse-proxy
Diffstat (limited to 'lib/pleroma/web/common_api/activity_draft.ex')
-rw-r--r-- | lib/pleroma/web/common_api/activity_draft.ex | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index 73f1b0931..80a9fa7bb 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do alias Pleroma.Activity alias Pleroma.Conversation.Participation + alias Pleroma.Object alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils @@ -179,13 +180,39 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do end defp sensitive(draft) do - sensitive = draft.params[:sensitive] || Enum.member?(draft.tags, {"#nsfw", "nsfw"}) + sensitive = draft.params[:sensitive] %__MODULE__{draft | sensitive: sensitive} end defp object(draft) do emoji = Map.merge(Pleroma.Emoji.Formatter.get_emoji_map(draft.full_payload), draft.emoji) + # Sometimes people create posts with subject containing emoji, + # since subjects are usually copied this will result in a broken + # subject when someone replies from an instance that does not have + # the emoji or has it under different shortcode. This is an attempt + # to mitigate this by copying emoji from inReplyTo if they are present + # in the subject. + summary_emoji = + with %Activity{} <- draft.in_reply_to, + %Object{data: %{"tag" => [_ | _] = tag}} <- Object.normalize(draft.in_reply_to) do + Enum.reduce(tag, %{}, fn + %{"type" => "Emoji", "name" => name, "icon" => %{"url" => url}}, acc -> + if String.contains?(draft.summary, name) do + Map.put(acc, name, url) + else + acc + end + + _, acc -> + acc + end) + else + _ -> %{} + end + + emoji = Map.merge(emoji, summary_emoji) + object = Utils.make_note_data(draft) |> Map.put("emoji", emoji) |