notification: add non_follows/non_followers notification control settings

This commit is contained in:
William Pitcock 2019-05-25 05:19:47 +00:00
parent 9f44fa0686
commit 4030837d91
2 changed files with 40 additions and 3 deletions

View File

@ -166,7 +166,17 @@ defmodule Pleroma.Notification do
def get_notified_from_activity(_, _local_only), do: [] def get_notified_from_activity(_, _local_only), do: []
def skip?(activity, user) do def skip?(activity, user) do
[:self, :blocked, :local, :muted, :followers, :follows, :recently_followed] [
:self,
:blocked,
:local,
:muted,
:followers,
:follows,
:non_followers,
:non_follows,
:recently_followed
]
|> Enum.any?(&skip?(&1, activity, user)) |> Enum.any?(&skip?(&1, activity, user))
end end
@ -201,12 +211,32 @@ defmodule Pleroma.Notification do
User.following?(follower, user) User.following?(follower, user)
end end
def skip?(
:non_followers,
activity,
%{info: %{notification_settings: %{"non_followers" => false}}} = user
) do
actor = activity.data["actor"]
follower = User.get_cached_by_ap_id(actor)
!User.following?(follower, user)
end
def skip?(:follows, activity, %{info: %{notification_settings: %{"follows" => false}}} = user) do def skip?(:follows, activity, %{info: %{notification_settings: %{"follows" => false}}} = user) do
actor = activity.data["actor"] actor = activity.data["actor"]
followed = User.get_cached_by_ap_id(actor) followed = User.get_cached_by_ap_id(actor)
User.following?(user, followed) User.following?(user, followed)
end end
def skip?(
:non_follows,
activity,
%{info: %{notification_settings: %{"non_follows" => false}}} = user
) do
actor = activity.data["actor"]
followed = User.get_cached_by_ap_id(actor)
!User.following?(user, followed)
end
def skip?(:recently_followed, %{data: %{"type" => "Follow"}} = activity, user) do def skip?(:recently_followed, %{data: %{"type" => "Follow"}} = activity, user) do
actor = activity.data["actor"] actor = activity.data["actor"]

View File

@ -47,7 +47,14 @@ defmodule Pleroma.User.Info do
field(:emoji, {:array, :map}, default: []) field(:emoji, {:array, :map}, default: [])
field(:notification_settings, :map, field(:notification_settings, :map,
default: %{"remote" => true, "local" => true, "followers" => true, "follows" => true} default: %{
"remote" => true,
"local" => true,
"followers" => true,
"follows" => true,
"non_follows" => true,
"non_followers" => true
}
) )
# Found in the wild # Found in the wild
@ -71,7 +78,7 @@ defmodule Pleroma.User.Info do
notification_settings = notification_settings =
info.notification_settings info.notification_settings
|> Map.merge(settings) |> Map.merge(settings)
|> Map.take(["remote", "local", "followers", "follows"]) |> Map.take(["remote", "local", "followers", "follows", "non_follows", "non_followers"])
params = %{notification_settings: notification_settings} params = %{notification_settings: notification_settings}