From 0865f36965f1583085af3a424dbbc89de724fd33 Mon Sep 17 00:00:00 2001 From: Sergey Suprunenko Date: Sat, 15 Aug 2020 15:27:41 +0200 Subject: [PATCH 1/2] Mark notifications about statuses from muted users as read automatically --- lib/pleroma/notification.ex | 6 ++++++ test/notification_test.exs | 6 +++++- test/web/mastodon_api/views/notification_view_test.exs | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 0b171563b..b4719896e 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -441,6 +441,7 @@ def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) |> Multi.insert(:notification, %Notification{ user_id: user.id, activity: activity, + seen: mark_as_read?(activity, user), type: type_from_activity(activity) }) |> Marker.multi_set_last_read_id(user, "notifications") @@ -634,6 +635,11 @@ def skip?(:filtered, activity, user) do def skip?(_, _, _), do: false + def mark_as_read?(activity, target_user) do + user = Activity.user_actor(activity) + User.mutes_user?(target_user, user) + end + def for_user_and_activity(user, activity) do from(n in __MODULE__, where: n.user_id == ^user.id, diff --git a/test/notification_test.exs b/test/notification_test.exs index 8243cfd34..93f4761da 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -217,7 +217,10 @@ test "it creates a notification for the user if the user mutes the activity auth muter = Repo.get(User, muter.id) {:ok, activity} = CommonAPI.post(muted, %{status: "Hi @#{muter.nickname}"}) - assert Notification.create_notification(activity, muter) + notification = Notification.create_notification(activity, muter) + + assert notification.id + assert notification.seen end test "notification created if user is muted without notifications" do @@ -1012,6 +1015,7 @@ test "it returns notifications for muted user without notifications", %{user: us [notification] = Notification.for_user(user) assert notification.activity.object + assert notification.seen end test "it doesn't return notifications for muted user with notifications", %{user: user} do diff --git a/test/web/mastodon_api/views/notification_view_test.exs b/test/web/mastodon_api/views/notification_view_test.exs index 8e0e58538..2f6a808f1 100644 --- a/test/web/mastodon_api/views/notification_view_test.exs +++ b/test/web/mastodon_api/views/notification_view_test.exs @@ -219,7 +219,7 @@ test "muted notification" do expected = %{ id: to_string(notification.id), - pleroma: %{is_seen: false, is_muted: true}, + pleroma: %{is_seen: true, is_muted: true}, type: "favourite", account: AccountView.render("show.json", %{user: another_user, for: user}), status: StatusView.render("show.json", %{activity: create_activity, for: user}), From 25c69e271a3ea6687805e0bd0d4b902cda06e364 Mon Sep 17 00:00:00 2001 From: Sergey Suprunenko Date: Mon, 17 Aug 2020 00:07:23 +0200 Subject: [PATCH 2/2] Make notifications about new statuses from muted threads read --- CHANGELOG.md | 1 + lib/pleroma/notification.ex | 3 ++- lib/pleroma/web/common_api/common_api.ex | 2 +- test/notification_test.exs | 7 ++++++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8e80eb3c..c462833d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). contents has been renamed to `hide_notification_contents` - Mastodon API: Added `pleroma.metadata.post_formats` to /api/v1/instance - Mastodon API (legacy): Allow query parameters for `/api/v1/domain_blocks`, e.g. `/api/v1/domain_blocks?domain=badposters.zone` +- Mastodon API: Make notifications about statuses from muted users and threads read automatically - Pleroma API: `/api/pleroma/captcha` responses now include `seconds_valid` with an integer value. diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index b4719896e..c1825f810 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -15,6 +15,7 @@ defmodule Pleroma.Notification do alias Pleroma.Repo alias Pleroma.ThreadMute alias Pleroma.User + alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.Push alias Pleroma.Web.Streamer @@ -637,7 +638,7 @@ def skip?(_, _, _), do: false def mark_as_read?(activity, target_user) do user = Activity.user_actor(activity) - User.mutes_user?(target_user, user) + User.mutes_user?(target_user, user) || CommonAPI.thread_muted?(target_user, activity) end def for_user_and_activity(user, activity) do diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index a8141b28f..5ad2b91c2 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -465,7 +465,7 @@ def remove_mute(user, activity) do end def thread_muted?(%User{id: user_id}, %{data: %{"context" => context}}) - when is_binary("context") do + when is_binary(context) do ThreadMute.exists?(user_id, context) end diff --git a/test/notification_test.exs b/test/notification_test.exs index 93f4761da..a09b08675 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -246,7 +246,10 @@ test "it creates a notification for an activity from a muted thread" do in_reply_to_status_id: activity.id }) - assert Notification.create_notification(activity, muter) + notification = Notification.create_notification(activity, muter) + + assert notification.id + assert notification.seen end test "it disables notifications from strangers" do @@ -320,6 +323,7 @@ test "it creates notifications if content matches with a not irreversible filter {:ok, [notification]} = Notification.create_notifications(status) assert notification + refute notification.seen end test "it creates notifications when someone likes user's status with a filtered word" do @@ -333,6 +337,7 @@ test "it creates notifications when someone likes user's status with a filtered {:ok, [notification]} = Notification.create_notifications(activity_two) assert notification + refute notification.seen end end