From 6b4064fa5ddd8396faf7d6afef891d70e7a2e881 Mon Sep 17 00:00:00 2001
From: William Pitcock <nenolod@dereferenced.org>
Date: Thu, 8 Nov 2018 19:31:59 +0000
Subject: [PATCH] activitypub: transmogrifier: unify mention extraction

---
 lib/pleroma/user.ex                            | 5 ++++-
 lib/pleroma/web/activity_pub/transmogrifier.ex | 7 ++-----
 lib/pleroma/web/activity_pub/utils.ex          | 4 ++++
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index acb355a05..260d904bc 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -482,7 +482,10 @@ def get_notified_from_activity_query(to, true) do
 
   def get_notified_from_activity(activity, local_only \\ true)
 
-  def get_notified_from_activity(%Activity{data: %{"type" => "Announce", "to" => to} = data}, local_only) do
+  def get_notified_from_activity(
+        %Activity{data: %{"type" => "Announce", "to" => to} = data},
+        local_only
+      ) do
     object = Object.normalize(data["object"])
     actor = User.get_cached_by_ap_id(data["actor"])
 
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 1471c9416..6a0fdb433 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -693,12 +693,9 @@ def add_hashtags(object) do
   end
 
   def add_mention_tags(object) do
-    recipients = object["to"] || []
-
     mentions =
-      recipients
-      |> Enum.map(fn ap_id -> User.get_cached_by_ap_id(ap_id) end)
-      |> Enum.filter(& &1)
+      object
+      |> Utils.get_notified_from_object()
       |> Enum.map(fn user ->
         %{"type" => "Mention", "href" => user.ap_id, "name" => "@#{user.nickname}"}
       end)
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex
index d81c824f0..fd9c5eb59 100644
--- a/lib/pleroma/web/activity_pub/utils.ex
+++ b/lib/pleroma/web/activity_pub/utils.ex
@@ -95,6 +95,10 @@ def generate_id(type) do
     "#{Web.base_url()}/#{type}/#{UUID.generate()}"
   end
 
+  def get_notified_from_object(object) do
+    User.get_notified_from_activity(%Activity{data: object}, false)
+  end
+
   def create_context(context) do
     context = context || generate_id("contexts")
     changeset = Object.context_mapping(context)