@doc "Returns the path of the emoji `name`."
@spec get(String.t()) :: String.t() | nil
def get(name) do
- name = if String.starts_with?(name, ":") do
- name
- |> String.replace_leading(":", "")
- |> String.replace_trailing(":", "")
- else
- name
- end
+ name =
+ if String.starts_with?(name, ":") do
+ name
+ |> String.replace_leading(":", "")
+ |> String.replace_trailing(":", "")
+ else
+ name
+ end
case :ets.lookup(@ets, name) do
[{_, path}] -> path
@spec emoji_react(User.t(), Object.t(), String.t()) :: {:ok, map(), keyword()}
def emoji_react(actor, object, emoji) do
with {:ok, data, meta} <- object_action(actor, object) do
- data = if Emoji.is_unicode_emoji?(emoji) do
- data
- |> Map.put("content", emoji)
- |> Map.put("type", "EmojiReact")
- else
- emojo = Emoji.get(emoji)
- path = emojo |> Map.get(:file)
- url = "#{Endpoint.url()}#{path}"
- data
- |> Map.put("content", emoji)
- |> Map.put("type", "EmojiReact")
- |> Map.put("tag", [
+ data =
+ if Emoji.is_unicode_emoji?(emoji) do
+ data
+ |> Map.put("content", emoji)
+ |> Map.put("type", "EmojiReact")
+ else
+ emojo = Emoji.get(emoji)
+ path = emojo |> Map.get(:file)
+ url = "#{Endpoint.url()}#{path}"
+
+ data
+ |> Map.put("content", emoji)
+ |> Map.put("type", "EmojiReact")
+ |> Map.put("tag", [
%{}
|> Map.put("id", url)
|> Map.put("type", "Emoji")
|> Map.put("name", emojo.code)
- |> Map.put("icon",
- %{}
- |> Map.put("type", "Image")
- |> Map.put("url", url)
+ |> Map.put(
+ "icon",
+ %{}
+ |> Map.put("type", "Image")
+ |> Map.put("url", url)
)
- ])
- end
+ ])
+ end
{:ok, data, meta}
end
|> CommonFixes.fix_actor()
|> CommonFixes.fix_activity_addressing()
- data = if Map.has_key?(data, "tag") do
+ data =
+ if Map.has_key?(data, "tag") do
data
- else
+ else
Map.put(data, "tag", [])
- end
+ end
with %Object{} = object <- Object.normalize(data["object"]) do
data
defp validate_emoji(cng) do
content = get_field(cng, :content)
+
if Pleroma.Emoji.is_unicode_emoji?(content) || Regex.match?(@emoji_regex, content) do
cng
else
def handle_incoming(
%{
"type" => "Like",
- "_misskey_reaction" => reaction,
+ "_misskey_reaction" => reaction
} = data,
options
) 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, _, candidate_url] ->
- if is_nil(candidate_url) do
- emoji == candidate
- else
- url == candidate_url
- end
- end) do
+ if is_nil(candidate_url) do
+ emoji == candidate
+ else
+ url == candidate_url
+ end
+ end) do
nil ->
reactions ++ [[emoji, [actor], url]]
|> 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
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, _, candidate_url] ->
- if is_nil(candidate_url) do
- emoji == candidate
- else
- url == candidate_url
- end
- end) do
+ if is_nil(candidate_url) do
+ emoji == candidate
+ else
+ url == candidate_url
+ end
+ end) do
nil ->
reactions
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
+
+ emoji =
+ if String.starts_with?(emoji, ":") do
+ emoji
+ else
+ ":#{emoji}:"
+ end
"EmojiReact"
|> Activity.Queries.by_type()
_e ->
nil
end
+
emoji_reactions =
object.data
|> Map.get("reactions", [])
def render("show.json", %{emoji_reaction: {emoji, user_ap_ids, url}, user: user}) do
users = fetch_users(user_ap_ids)
+
%{
name: emoji,
count: length(users),
{:floki, "~> 0.27"},
{:timex, "~> 3.6"},
{:ueberauth, "~> 0.4"},
- {:linkify, git: "https://git.ihatebeinga.live/floatingghost/linkify.git", branch: "bugfix/line-ending-buffer"},
+ {:linkify,
+ git: "https://git.ihatebeinga.live/floatingghost/linkify.git",
+ branch: "bugfix/line-ending-buffer"},
{:http_signatures, "~> 0.1.1"},
{:telemetry, "~> 0.3"},
{:poolboy, "~> 1.5"},