Preload thread mutes/bookmarks in get_context
authorrinpatch <rinpatch@sdf.org>
Tue, 13 Aug 2019 23:36:54 +0000 (02:36 +0300)
committerrinpatch <rinpatch@sdf.org>
Tue, 13 Aug 2019 23:36:54 +0000 (02:36 +0300)
Also removes filtering for creates (was done on the database side
already) and filtering for the requested activity (moved to the database
side) from application side.

lib/pleroma/web/activity_pub/activity_pub.ex
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex

index 1a279a7df1b7f00e06c6ef3120d8f77585221f2d..d473a3ed99c9f6dbccb371af06f22faef2fc9675 100644 (file)
@@ -518,6 +518,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
 
     from(activity in Activity)
     |> maybe_preload_objects(opts)
+    |> maybe_preload_bookmarks(opts)
+    |> maybe_set_thread_muted_field(opts)
     |> restrict_blocked(opts)
     |> restrict_recipients(recipients, opts["user"])
     |> where(
@@ -531,6 +533,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
       )
     )
     |> exclude_poll_votes(opts)
+    |> exclude_id(opts)
     |> order_by([activity], desc: activity.id)
   end
 
@@ -870,6 +873,12 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     end
   end
 
+  defp exclude_id(query, %{"exclude_id" => id}) when is_binary(id) do
+    from(activity in query, where: activity.id != ^id)
+  end
+
+  defp exclude_id(query, _), do: query
+
   defp maybe_preload_objects(query, %{"skip_preload" => true}), do: query
 
   defp maybe_preload_objects(query, _) do
index c3c75bd9a5a6b6f654426c0785f8edf17fe52dd0..7ce2b5b0608d2c2059dd7179a67dea79d4cd4d35 100644 (file)
@@ -497,12 +497,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
          activities <-
            ActivityPub.fetch_activities_for_context(activity.data["context"], %{
              "blocking_user" => user,
-             "user" => user
+             "user" => user,
+             "exclude_id" => activity.id
            }),
-         activities <-
-           activities |> Enum.filter(fn %{id: aid} -> to_string(aid) != to_string(id) end),
-         activities <-
-           activities |> Enum.filter(fn %{data: %{"type" => type}} -> type == "Create" end),
          grouped_activities <- Enum.group_by(activities, fn %{id: id} -> id < activity.id end) do
       result = %{
         ancestors: