Also index incoming federated posts

This commit is contained in:
Ekaterina Vaartis 2021-08-22 16:37:52 +03:00
parent e35d87ea54
commit 2b2e409ad7
4 changed files with 29 additions and 11 deletions

View File

@ -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

View File

@ -140,11 +140,8 @@ def insert(map, local \\ true, fake \\ false, bypass_actor_check \\ false) when
Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end) Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end)
end) end)
search_module = Pleroma.Config.get([Pleroma.Search, :module]) # Add local posts to search index
Pleroma.Search.add_to_index(activity)
ConcurrentLimiter.limit(Pleroma.Search, fn ->
Task.start(fn -> search_module.add_to_index(activity) end)
end)
{:ok, activity} {:ok, activity}
else else

View File

@ -197,6 +197,7 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do
# - Increase replies count # - Increase replies count
# - Set up ActivityExpiration # - Set up ActivityExpiration
# - Set up notifications # - Set up notifications
# - Index incoming posts for search (if needed)
@impl true @impl true
def handle(%{data: %{"type" => "Create"}} = activity, meta) do def handle(%{data: %{"type" => "Create"}} = activity, meta) do
with {:ok, object, meta} <- handle_object_creation(meta[:object_data], activity, meta), with {:ok, object, meta} <- handle_object_creation(meta[:object_data], activity, meta),
@ -226,6 +227,8 @@ def handle(%{data: %{"type" => "Create"}} = activity, meta) do
Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end) Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end)
end) end)
Pleroma.Search.add_to_index(Map.put(activity, :object, object))
meta = meta =
meta meta
|> add_notifications(notifications) |> add_notifications(notifications)
@ -286,6 +289,7 @@ def handle(%{data: %{"type" => "EmojiReact"}} = object, meta) do
# - Reduce the user note count # - Reduce the user note count
# - Reduce the reply count # - Reduce the reply count
# - Stream out the activity # - Stream out the activity
# - Removes posts from search index (if needed)
@impl true @impl true
def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, meta) do
deleted_object = deleted_object =
@ -325,6 +329,9 @@ def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object,
if result == :ok do if result == :ok do
Notification.create_notifications(object) Notification.create_notifications(object)
Pleroma.Search.remove_from_index(object)
{:ok, object, meta} {:ok, object, meta}
else else
{:error, result} {:error, result}

View File

@ -147,12 +147,8 @@ def delete(activity_id, user) do
true <- User.superuser?(user) || user.ap_id == object.data["actor"], true <- User.superuser?(user) || user.ap_id == object.data["actor"],
{:ok, delete_data, _} <- Builder.delete(user, object.data["id"]), {:ok, delete_data, _} <- Builder.delete(user, object.data["id"]),
{:ok, delete, _} <- Pipeline.common_pipeline(delete_data, local: true) do {:ok, delete, _} <- Pipeline.common_pipeline(delete_data, local: true) do
# Also delete from search index # Remove from search index for local posts
search_module = Pleroma.Config.get([Pleroma.Search, :module]) Pleroma.Search.remove_from_index(object)
ConcurrentLimiter.limit(Pleroma.Search, fn ->
Task.start(fn -> search_module.remove_from_index(object) end)
end)
{:ok, delete} {:ok, delete}
else else