diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/user.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/user/query.ex | 24 | 
2 files changed, 17 insertions, 15 deletions
| diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 3e8f19e30..fbfdc68e8 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1199,8 +1199,12 @@ defmodule Pleroma.User do    end    @spec get_recipients_from_activity(Activity.t()) :: [User.t()] -  def get_recipients_from_activity(%Activity{recipients: to}) do -    User.Query.build(%{recipients_from_activity: to, local: true, deactivated: false}) +  def get_recipients_from_activity(%Activity{recipients: to, actor: actor}) do +    to = [actor | to] + +    query = User.Query.build(%{recipients_from_activity: to, local: true, deactivated: false}) + +    query      |> Repo.all()    end diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index ec88088cf..a387f9b77 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -162,20 +162,18 @@ defmodule Pleroma.User.Query do    end    defp compose_query({:recipients_from_activity, to}, query) do -    query -    |> join(:left, [u], r in FollowingRelationship, -      as: :relationships, -      on: r.follower_id == u.id -    ) -    |> join(:left, [relationships: r], f in User, -      as: :following, -      on: f.id == r.following_id -    ) -    |> where( -      [u, following: f, relationships: r], -      u.ap_id in ^to or (f.follower_address in ^to and r.state == ^:follow_accept) +    following_query = +      from(u in User, +        join: f in FollowingRelationship, +        on: u.id == f.following_id, +        where: f.state == ^:follow_accept, +        where: u.follower_address in ^to, +        select: f.follower_id +      ) + +    from(u in query, +      where: u.ap_id in ^to or u.id in subquery(following_query)      ) -    |> distinct(true)    end    defp compose_query({:order_by, key}, query) do | 
