forked from mirrors/akkoma
Simplify DM query.
Should also use indexes better.
This commit is contained in:
parent
4b3ec53514
commit
841ee8e3e4
|
@ -313,9 +313,11 @@ defp restrict_visibility(query, %{visibility: "direct"}) do
|
||||||
on: sender.ap_id == activity.actor,
|
on: sender.ap_id == activity.actor,
|
||||||
# Are non-direct statuses with no to/cc possible?
|
# Are non-direct statuses with no to/cc possible?
|
||||||
where:
|
where:
|
||||||
fragment("not coalesce(data->'to' \\? ?, false)", ^public) and
|
fragment(
|
||||||
fragment("not coalesce(data->'cc' \\? ?, false)", ^public) and
|
"not (? && ?)",
|
||||||
fragment("not coalesce(data->'to' \\? ?, false)", sender.follower_address)
|
[^public, sender.follower_address],
|
||||||
|
activity.recipients
|
||||||
|
)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -136,26 +136,47 @@ test "posting a direct status", %{conn: conn} do
|
||||||
|
|
||||||
assert %{"id" => id, "visibility" => "direct"} = json_response(conn, 200)
|
assert %{"id" => id, "visibility" => "direct"} = json_response(conn, 200)
|
||||||
assert activity = Repo.get(Activity, id)
|
assert activity = Repo.get(Activity, id)
|
||||||
assert user2.follower_address not in activity.data["to"]
|
assert activity.recipients == [user2.ap_id]
|
||||||
|
assert activity.data["to"] == [user2.ap_id]
|
||||||
|
assert activity.data["cc"] == []
|
||||||
end
|
end
|
||||||
|
|
||||||
test "direct timeline", %{conn: conn} do
|
test "direct timeline", %{conn: conn} do
|
||||||
dm = insert(:direct_note_activity)
|
user_one = insert(:user)
|
||||||
reg_note = insert(:note_activity)
|
user_two = insert(:user)
|
||||||
|
|
||||||
recipient = User.get_by_ap_id(hd(dm.recipients))
|
{:ok, user_two} = User.follow(user_two, user_one)
|
||||||
|
|
||||||
conn =
|
{:ok, direct} =
|
||||||
|
CommonAPI.post(user_one, %{
|
||||||
|
"status" => "Hi @#{user_two.nickname}!",
|
||||||
|
"visibility" => "direct"
|
||||||
|
})
|
||||||
|
|
||||||
|
{:ok, _follower_only} =
|
||||||
|
CommonAPI.post(user_one, %{
|
||||||
|
"status" => "Hi @#{user_two.nickname}!",
|
||||||
|
"visibility" => "private"
|
||||||
|
})
|
||||||
|
|
||||||
|
# Only direct should be visible here
|
||||||
|
res_conn =
|
||||||
conn
|
conn
|
||||||
|> assign(:user, recipient)
|
|> assign(:user, user_two)
|
||||||
|> get("api/v1/timelines/direct")
|
|> get("api/v1/timelines/direct")
|
||||||
|
|
||||||
resp = json_response(conn, 200)
|
[status] = json_response(res_conn, 200)
|
||||||
first_status = hd(resp)
|
|
||||||
|
|
||||||
assert length(resp) == 1
|
assert %{"visibility" => "direct"} = status
|
||||||
assert %{"visibility" => "direct"} = first_status
|
assert status["url"] != direct.data["id"]
|
||||||
assert first_status["url"] != reg_note.data["id"]
|
|
||||||
|
# Both should be visible here
|
||||||
|
res_conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user_two)
|
||||||
|
|> get("api/v1/timelines/home")
|
||||||
|
|
||||||
|
[_s1, _s2] = json_response(res_conn, 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "replying to a status", %{conn: conn} do
|
test "replying to a status", %{conn: conn} do
|
||||||
|
|
Loading…
Reference in a new issue