X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Fside_effects.ex;h=439268470c544d0c4cbf7b55989a4f1635635d8b;hb=0f132b802dde7f217ecb07767e0d34e3edb517b7;hp=913b664ca94c22ef99bfec70fc53bfeeda52f4ee;hpb=dbdf0c005ee155407410e353fb43a8aaa9da559f;p=akkoma diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 913b664ca..439268470 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -1,5 +1,5 @@ # Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors +# Copyright © 2017-2022 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.ActivityPub.SideEffects do @@ -10,8 +10,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do collection, and so on. """ alias Pleroma.Activity - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference alias Pleroma.FollowingRelationship alias Pleroma.Notification alias Pleroma.Object @@ -27,7 +25,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do require Logger - @cachex Pleroma.Config.get([:cachex, :provider], Cachex) @logger Pleroma.Config.get([:side_effects, :logger], Logger) @behaviour Pleroma.Web.ActivityPub.SideEffects.Handling @@ -193,14 +190,16 @@ 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), %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do {:ok, notifications} = Notification.create_notifications(activity, do_send: false) {:ok, _user} = ActivityPub.increase_note_count_if_public(user, object) + {:ok, _user} = ActivityPub.update_last_status_at_if_public(user, object) - if in_reply_to = object.data["inReplyTo"] && object.data["type"] != "Answer" do + if in_reply_to = object.data["type"] != "Answer" && object.data["inReplyTo"] do Object.increase_replies_count(in_reply_to) end @@ -221,6 +220,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 +282,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 = @@ -301,8 +303,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do Object.decrease_replies_count(in_reply_to) end - MessageReference.delete_for_object(deleted_object) - ap_streamer().stream_out(object) ap_streamer().stream_out_participations(deleted_object, user) :ok @@ -320,6 +320,12 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do if result == :ok do Notification.create_notifications(object) + + # Only remove from index when deleting actual objects, not users or anything else + with %Pleroma.Object{} <- deleted_object do + Pleroma.Search.remove_from_index(deleted_object) + end + {:ok, object, meta} else {:error, result} @@ -389,41 +395,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do {:ok, object, meta} end - def handle_object_creation(%{"type" => "ChatMessage"} = object, _activity, meta) do - with {:ok, object, meta} <- Pipeline.common_pipeline(object, meta) do - actor = User.get_cached_by_ap_id(object.data["actor"]) - recipient = User.get_cached_by_ap_id(hd(object.data["to"])) - - streamables = - [[actor, recipient], [recipient, actor]] - |> Enum.uniq() - |> Enum.map(fn [user, other_user] -> - if user.local do - {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) - {:ok, cm_ref} = MessageReference.create(chat, object, user.ap_id != actor.ap_id) - - @cachex.put( - :chat_message_id_idempotency_key_cache, - cm_ref.id, - meta[:idempotency_key] - ) - - { - ["user", "user:pleroma_chat"], - {user, %{cm_ref | chat: chat, object: object}} - } - end - end) - |> Enum.filter(& &1) - - meta = - meta - |> add_streamables(streamables) - - {:ok, object, meta} - end - end - def handle_object_creation(%{"type" => "Question"} = object, activity, meta) do with {:ok, object, meta} <- Pipeline.common_pipeline(object, meta) do PollWorker.schedule_poll_end(activity) @@ -522,13 +493,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do meta end - defp add_streamables(meta, streamables) do - existing = Keyword.get(meta, :streamables, []) - - meta - |> Keyword.put(:streamables, streamables ++ existing) - end - defp add_notifications(meta, notifications) do existing = Keyword.get(meta, :notifications, []) @@ -537,16 +501,9 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do end @impl true - @impl true - def handle_after_transaction(%{data: %{"type" => "Create"}} = activity) do - Elasticsearch.put_by_id(activity.id) - end - def handle_after_transaction(meta) do meta |> send_notifications() |> send_streamables() end - - def handle_after_transaction(_), do: :ok end