Also index incoming federated posts
authorEkaterina Vaartis <vaartis@kotobank.ch>
Sun, 22 Aug 2021 13:37:52 +0000 (16:37 +0300)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Wed, 29 Jun 2022 19:48:29 +0000 (20:48 +0100)
lib/pleroma/search/search.ex [new file with mode: 0644]
lib/pleroma/web/activity_pub/activity_pub.ex
lib/pleroma/web/activity_pub/side_effects.ex
lib/pleroma/web/common_api.ex

diff --git a/lib/pleroma/search/search.ex b/lib/pleroma/search/search.ex
new file mode 100644 (file)
index 0000000..e363abf
--- /dev/null
@@ -0,0 +1,18 @@
+defmodule Pleroma.Search do
+  def add_to_index(activity) do
+    search_module = Pleroma.Config.get([Pleroma.Search, :module])
+
+    ConcurrentLimiter.limit(Pleroma.Search, fn ->
+      Task.start(fn -> search_module.add_to_index(activity) end)
+    end)
+  end
+
+  def remove_from_index(object) do
+    # Also delete from search index
+    search_module = Pleroma.Config.get([Pleroma.Search, :module])
+
+    ConcurrentLimiter.limit(Pleroma.Search, fn ->
+      Task.start(fn -> search_module.remove_from_index(object) end)
+    end)
+  end
+end
index 615bee42812ce0c70552212a868a9f3678ae30eb..5f068cef043ff42798ca139aee0d676ee6e411db 100644 (file)
@@ -140,11 +140,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
         Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end)
       end)
 
-      search_module = Pleroma.Config.get([Pleroma.Search, :module])
-
-      ConcurrentLimiter.limit(Pleroma.Search, fn ->
-        Task.start(fn -> search_module.add_to_index(activity) end)
-      end)
+      # Add local posts to search index
+      Pleroma.Search.add_to_index(activity)
 
       {:ok, activity}
     else
index 9c2f89e72e290752360de257cf61def2040f869c..98911f28f0075a5859474fa6ad2f272df37f2eb3 100644 (file)
@@ -193,6 +193,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
   # - Increase replies count
   # - Set up ActivityExpiration
   # - Set up notifications
+  # - Index incoming posts for search (if needed)
   @impl true
   def handle(%{data: %{"type" => "Create"}} = activity, meta) do
     with {:ok, object, meta} <- handle_object_creation(meta[:object_data], activity, meta),
@@ -222,6 +223,8 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
         Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end)
       end)
 
+      Pleroma.Search.add_to_index(Map.put(activity, :object, object))
+
       meta =
         meta
         |> add_notifications(notifications)
@@ -281,6 +284,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
   # - Reduce the user note count
   # - Reduce the reply count
   # - Stream out the activity
+  # - Removes posts from search index (if needed)
   @impl true
   def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do
     deleted_object =
@@ -320,6 +324,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
 
     if result == :ok do
       Notification.create_notifications(object)
+
+      Pleroma.Search.remove_from_index(object)
+
       {:ok, object, meta}
     else
       {:error, result}
index 0b7be42e076365482e82a481914d0e85807cd442..b4887d4244056157e7abfe61bd3bb59b44150e98 100644 (file)
@@ -146,12 +146,8 @@ defmodule Pleroma.Web.CommonAPI do
          true <- User.superuser?(user) || user.ap_id == object.data["actor"],
          {:ok, delete_data, _} <- Builder.delete(user, object.data["id"]),
          {:ok, delete, _} <- Pipeline.common_pipeline(delete_data, local: true) do
-      # Also delete from search index
-      search_module = Pleroma.Config.get([Pleroma.Search, :module])
-
-      ConcurrentLimiter.limit(Pleroma.Search, fn ->
-        Task.start(fn -> search_module.remove_from_index(object) end)
-      end)
+      # Remove from search index for local posts
+      Pleroma.Search.remove_from_index(object)
 
       {:ok, delete}
     else