Merge branch 'akoma/deactivated-users' into 'develop'
Timeline query performance improvements See merge request pleroma/pleroma!3779
This commit is contained in:
commit
7f0b3161ea
|
@ -58,6 +58,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Fixed account deletion API
|
- Fixed account deletion API
|
||||||
- Fixed lowercase HTTP HEAD method in the Media Proxy Preview code
|
- Fixed lowercase HTTP HEAD method in the Media Proxy Preview code
|
||||||
- Removed useless notification call on Delete activities
|
- Removed useless notification call on Delete activities
|
||||||
|
- Improved performance for filtering out deactivated and invisible users
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
- Quack, the logging backend that pushes to Slack channels
|
- Quack, the logging backend that pushes to Slack channels
|
||||||
|
|
|
@ -361,9 +361,11 @@ def following_requests_for_actor(%User{ap_id: ap_id}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def restrict_deactivated_users(query) do
|
def restrict_deactivated_users(query) do
|
||||||
deactivated_users_query = from(u in User.Query.build(%{deactivated: true}), select: u.ap_id)
|
query
|
||||||
|
|> join(:inner, [activity], user in User,
|
||||||
from(activity in query, where: activity.actor not in subquery(deactivated_users_query))
|
as: :user,
|
||||||
|
on: activity.actor == user.ap_id and user.is_active == true
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
defdelegate search(user, query, options \\ []), to: Pleroma.Activity.Search
|
defdelegate search(user, query, options \\ []), to: Pleroma.Activity.Search
|
||||||
|
|
|
@ -1239,15 +1239,15 @@ defp exclude_chat_messages(query, _) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp exclude_invisible_actors(query, %{type: "Flag"}), do: query
|
||||||
defp exclude_invisible_actors(query, %{invisible_actors: true}), do: query
|
defp exclude_invisible_actors(query, %{invisible_actors: true}), do: query
|
||||||
|
|
||||||
defp exclude_invisible_actors(query, _opts) do
|
defp exclude_invisible_actors(query, _opts) do
|
||||||
invisible_ap_ids =
|
query
|
||||||
User.Query.build(%{invisible: true, select: [:ap_id]})
|
|> join(:inner, [activity], u in User,
|
||||||
|> Repo.all()
|
as: :u,
|
||||||
|> Enum.map(fn %{ap_id: ap_id} -> ap_id end)
|
on: activity.actor == u.ap_id and u.invisible == false
|
||||||
|
)
|
||||||
from([activity] in query, where: activity.actor not in ^invisible_ap_ids)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp exclude_id(query, %{exclude_id: id}) when is_binary(id) do
|
defp exclude_id(query, %{exclude_id: id}) when is_binary(id) do
|
||||||
|
@ -1377,7 +1377,7 @@ def fetch_activities_query(recipients, opts \\ %{}) do
|
||||||
|> restrict_instance(opts)
|
|> restrict_instance(opts)
|
||||||
|> restrict_announce_object_actor(opts)
|
|> restrict_announce_object_actor(opts)
|
||||||
|> restrict_filtered(opts)
|
|> restrict_filtered(opts)
|
||||||
|> Activity.restrict_deactivated_users()
|
|> maybe_restrict_deactivated_users(opts)
|
||||||
|> exclude_poll_votes(opts)
|
|> exclude_poll_votes(opts)
|
||||||
|> exclude_chat_messages(opts)
|
|> exclude_chat_messages(opts)
|
||||||
|> exclude_invisible_actors(opts)
|
|> exclude_invisible_actors(opts)
|
||||||
|
@ -1789,4 +1789,9 @@ def fetch_direct_messages_query do
|
||||||
|> restrict_visibility(%{visibility: "direct"})
|
|> restrict_visibility(%{visibility: "direct"})
|
||||||
|> order_by([activity], asc: activity.id)
|
|> order_by([activity], asc: activity.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp maybe_restrict_deactivated_users(activity, %{type: "Flag"}), do: activity
|
||||||
|
|
||||||
|
defp maybe_restrict_deactivated_users(activity, _opts),
|
||||||
|
do: Activity.restrict_deactivated_users(activity)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue