Add emoji_url to notifications to allow rendering
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Sun, 12 Jun 2022 12:35:14 +0000 (13:35 +0100)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Sun, 12 Jun 2022 12:35:14 +0000 (13:35 +0100)
Ref #5

CHANGELOG.md
lib/pleroma/emoji.ex
lib/pleroma/web/mastodon_api/views/notification_view.ex
test/pleroma/web/mastodon_api/views/notification_view_test.exs

index 9e772de0ac4034ba47500223fee73dfce96272d3..4b3847049d8ac5c866e24ff5c6067770089ec963 100644 (file)
@@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file.
 
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
-## Unreleased
+## 2.5.0 - 10/06/2022
 
 ### Changed
 - Allow users to remove their emails if instance does not need email to register
@@ -21,6 +21,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Ability to log slow Ecto queries by configuring `:pleroma, :telemetry, :slow_queries_logging`
 - Added Phoenix LiveDashboard at `/phoenix/live_dashboard`
 - Added `/manifest.json` for progressive web apps.
+- Readded mastoFE
+- Added support for custom emoji reactions
+- Added `emoji_url` in notifications to allow for custom emoji rendering
 
 ### Fixed
 - Subscription(Bell) Notifications: Don't create from Pipeline Ingested replies
index d421f2ccb42d74cec2748b905941769de4004418..f4043ac80b9d317ab6c39369b5d7cc69cd74ecdf 100644 (file)
@@ -164,4 +164,22 @@ defmodule Pleroma.Emoji do
   end
 
   def maybe_quote(name), do: name
+
+  def emoji_url(%{"type" => "EmojiReact", "content" => emoji, "tag" => []}), do: nil
+
+  def emoji_url(%{"type" => "EmojiReact", "content" => emoji, "tag" => tags}) do
+    tag =
+      tags
+      |> Enum.find(fn tag -> tag["type"] == "Emoji" && tag["name"] == stripped_name(emoji) end)
+
+    if is_nil(tag) do
+      nil
+    else
+      tag
+      |> Map.get("icon")
+      |> Map.get("url")
+    end
+  end
+
+  def emoji_url(_), do: nil
 end
index 35c636d4e8c24679ae5be3a5c87ecbd703d49272..ff7adeb2b303e6ead43e32697f8569bc2266b6d5 100644 (file)
@@ -138,7 +138,9 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do
   end
 
   defp put_emoji(response, activity) do
-    Map.put(response, :emoji, activity.data["content"])
+    response
+    |> Map.put(:emoji, activity.data["content"])
+    |> Map.put(:emoji_url, Pleroma.Emoji.emoji_url(activity.data))
   end
 
   defp put_chat_message(response, activity, reading_user, opts) do
index 8070c03c950032c64f2b833fd3d14cb638a47937..00e90239ec28b6ead33f4340fc10543b14e26fce 100644 (file)
@@ -188,6 +188,34 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do
       pleroma: %{is_seen: false, is_muted: false},
       type: "pleroma:emoji_reaction",
       emoji: "☕",
+      emoji_url: nil,
+      account: AccountView.render("show.json", %{user: other_user, for: user}),
+      status: StatusView.render("show.json", %{activity: activity, for: user}),
+      created_at: Utils.to_masto_date(notification.inserted_at)
+    }
+
+    test_notifications_rendering([notification], user, [expected])
+  end
+
+  test "EmojiReact notification with custom emoji" do
+    user = insert(:user)
+    other_user = insert(:user)
+
+    {:ok, activity} = CommonAPI.post(user, %{status: "#morb"})
+    {:ok, _activity} = CommonAPI.react_with_emoji(activity.id, other_user, ":dinosaur:")
+
+    activity = Repo.get(Activity, activity.id)
+
+    [notification] = Notification.for_user(user)
+
+    assert notification
+
+    expected = %{
+      id: to_string(notification.id),
+      pleroma: %{is_seen: false, is_muted: false},
+      type: "pleroma:emoji_reaction",
+      emoji: ":dinosaur:",
+      emoji_url: "http://localhost:4001/emoji/dino walking.gif",
       account: AccountView.render("show.json", %{user: other_user, for: user}),
       status: StatusView.render("show.json", %{activity: activity, for: user}),
       created_at: Utils.to_masto_date(notification.inserted_at)