forked from AkkomaGang/akkoma
NotificationController: Don't return chat_mentions by default.
This commit is contained in:
parent
805ab86933
commit
127ccc4e1c
4 changed files with 37 additions and 15 deletions
|
@ -204,7 +204,7 @@ Returned data is the deleted message.
|
||||||
|
|
||||||
### Notifications
|
### Notifications
|
||||||
|
|
||||||
There's a new `pleroma:chat_mention` notification, which has this form:
|
There's a new `pleroma:chat_mention` notification, which has this form. It is not given out in the notifications endpoint by default, you need to explicitly request it with `include_types[]=pleroma:chat_mention`:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,8 +42,20 @@ def index(conn, %{account_id: account_id} = params) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@default_notification_types ~w{
|
||||||
|
mention
|
||||||
|
follow
|
||||||
|
follow_request
|
||||||
|
reblog
|
||||||
|
favourite
|
||||||
|
move
|
||||||
|
pleroma:emoji_reaction
|
||||||
|
}
|
||||||
def index(%{assigns: %{user: user}} = conn, params) do
|
def index(%{assigns: %{user: user}} = conn, params) do
|
||||||
params = Map.new(params, fn {k, v} -> {to_string(k), v} end)
|
params =
|
||||||
|
Map.new(params, fn {k, v} -> {to_string(k), v} end)
|
||||||
|
|> Map.put_new("include_types", @default_notification_types)
|
||||||
|
|
||||||
notifications = MastodonAPI.get_notifications(user, params)
|
notifications = MastodonAPI.get_notifications(user, params)
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|
|
|
@ -6,7 +6,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
import Ecto.Changeset
|
import Ecto.Changeset
|
||||||
|
|
||||||
alias Pleroma.Activity
|
|
||||||
alias Pleroma.Notification
|
alias Pleroma.Notification
|
||||||
alias Pleroma.Pagination
|
alias Pleroma.Pagination
|
||||||
alias Pleroma.ScheduledActivity
|
alias Pleroma.ScheduledActivity
|
||||||
|
@ -82,15 +81,11 @@ defp cast_params(params) do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp restrict(query, :include_types, %{include_types: mastodon_types = [_ | _]}) do
|
defp restrict(query, :include_types, %{include_types: mastodon_types = [_ | _]}) do
|
||||||
ap_types = convert_and_filter_mastodon_types(mastodon_types)
|
where(query, [n], n.type in ^mastodon_types)
|
||||||
|
|
||||||
where(query, [q, a], fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp restrict(query, :exclude_types, %{exclude_types: mastodon_types = [_ | _]}) do
|
defp restrict(query, :exclude_types, %{exclude_types: mastodon_types = [_ | _]}) do
|
||||||
ap_types = convert_and_filter_mastodon_types(mastodon_types)
|
where(query, [n], n.type not in ^mastodon_types)
|
||||||
|
|
||||||
where(query, [q, a], not fragment("? @> ARRAY[?->>'type']::varchar[]", ^ap_types, a.data))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp restrict(query, :account_ap_id, %{account_ap_id: account_ap_id}) do
|
defp restrict(query, :account_ap_id, %{account_ap_id: account_ap_id}) do
|
||||||
|
@ -98,10 +93,4 @@ defp restrict(query, :account_ap_id, %{account_ap_id: account_ap_id}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp restrict(query, _, _), do: query
|
defp restrict(query, _, _), do: query
|
||||||
|
|
||||||
defp convert_and_filter_mastodon_types(types) do
|
|
||||||
types
|
|
||||||
|> Enum.map(&Activity.from_mastodon_notification_type/1)
|
|
||||||
|> Enum.filter(& &1)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -54,6 +54,27 @@ test "list of notifications" do
|
||||||
assert response == expected_response
|
assert response == expected_response
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "by default, does not contain pleroma:chat_mention" do
|
||||||
|
%{user: user, conn: conn} = oauth_access(["read:notifications"])
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, _activity} = CommonAPI.post_chat_message(other_user, user, "hey")
|
||||||
|
|
||||||
|
result =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/notifications")
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
assert [] == result
|
||||||
|
|
||||||
|
result =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/notifications?include_types[]=pleroma:chat_mention")
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
assert [_] = result
|
||||||
|
end
|
||||||
|
|
||||||
test "getting a single notification" do
|
test "getting a single notification" do
|
||||||
%{user: user, conn: conn} = oauth_access(["read:notifications"])
|
%{user: user, conn: conn} = oauth_access(["read:notifications"])
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
Loading…
Reference in a new issue