Add a notification for Move activities
This commit is contained in:
parent
e6d7e27bd6
commit
27cd1374e3
|
@ -251,10 +251,13 @@ def create_notifications(%Activity{data: %{"to" => _, "type" => "Create"}} = act
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_notifications(%Activity{data: %{"to" => _, "type" => type}} = activity)
|
def create_notifications(%Activity{data: %{"type" => type}} = activity)
|
||||||
when type in ["Like", "Announce", "Follow"] do
|
when type in ["Like", "Announce", "Follow", "Move"] do
|
||||||
users = get_notified_from_activity(activity)
|
notifications =
|
||||||
notifications = Enum.map(users, fn user -> create_notification(activity, user) end)
|
activity
|
||||||
|
|> get_notified_from_activity()
|
||||||
|
|> Enum.map(&create_notification(activity, &1))
|
||||||
|
|
||||||
{:ok, notifications}
|
{:ok, notifications}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -276,19 +279,15 @@ def create_notification(%Activity{} = activity, %User{} = user) do
|
||||||
|
|
||||||
def get_notified_from_activity(activity, local_only \\ true)
|
def get_notified_from_activity(activity, local_only \\ true)
|
||||||
|
|
||||||
def get_notified_from_activity(
|
def get_notified_from_activity(%Activity{data: %{"type" => type}} = activity, local_only)
|
||||||
%Activity{data: %{"to" => _, "type" => type} = _data} = activity,
|
when type in ["Create", "Like", "Announce", "Follow", "Move"] do
|
||||||
local_only
|
|
||||||
)
|
|
||||||
when type in ["Create", "Like", "Announce", "Follow"] do
|
|
||||||
recipients =
|
|
||||||
[]
|
[]
|
||||||
|> Utils.maybe_notify_to_recipients(activity)
|
|> Utils.maybe_notify_to_recipients(activity)
|
||||||
|> Utils.maybe_notify_mentioned_recipients(activity)
|
|> Utils.maybe_notify_mentioned_recipients(activity)
|
||||||
|> Utils.maybe_notify_subscribers(activity)
|
|> Utils.maybe_notify_subscribers(activity)
|
||||||
|
|> Utils.maybe_notify_followers(activity)
|
||||||
|> Enum.uniq()
|
|> Enum.uniq()
|
||||||
|
|> User.get_users_from_set(local_only)
|
||||||
User.get_users_from_set(recipients, local_only)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_notified_from_activity(_, _local_only), do: []
|
def get_notified_from_activity(_, _local_only), do: []
|
||||||
|
|
|
@ -451,6 +451,8 @@ def maybe_notify_to_recipients(
|
||||||
recipients ++ to
|
recipients ++ to
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def maybe_notify_to_recipients(recipients, _), do: recipients
|
||||||
|
|
||||||
def maybe_notify_mentioned_recipients(
|
def maybe_notify_mentioned_recipients(
|
||||||
recipients,
|
recipients,
|
||||||
%Activity{data: %{"to" => _to, "type" => type} = data} = activity
|
%Activity{data: %{"to" => _to, "type" => type} = data} = activity
|
||||||
|
@ -484,12 +486,8 @@ def maybe_notify_subscribers(recipients, %Activity{
|
||||||
recipients
|
recipients
|
||||||
end
|
end
|
||||||
|
|
||||||
def maybe_notify_subscribers(
|
def maybe_notify_subscribers(recipients, %Activity{data: %{"type" => "Create"}} = activity) do
|
||||||
recipients,
|
with %User{} = user <- User.get_cached_by_ap_id(activity.actor) do
|
||||||
%Activity{data: %{"actor" => actor, "type" => type}} = activity
|
|
||||||
)
|
|
||||||
when type == "Create" do
|
|
||||||
with %User{} = user <- User.get_cached_by_ap_id(actor) do
|
|
||||||
subscriber_ids =
|
subscriber_ids =
|
||||||
user
|
user
|
||||||
|> User.subscribers()
|
|> User.subscribers()
|
||||||
|
@ -502,6 +500,17 @@ def maybe_notify_subscribers(
|
||||||
|
|
||||||
def maybe_notify_subscribers(recipients, _), do: recipients
|
def maybe_notify_subscribers(recipients, _), do: recipients
|
||||||
|
|
||||||
|
def maybe_notify_followers(recipients, %Activity{data: %{"type" => "Move"}} = activity) do
|
||||||
|
with %User{} = user <- User.get_cached_by_ap_id(activity.actor) do
|
||||||
|
user
|
||||||
|
|> User.get_followers()
|
||||||
|
|> Enum.map(& &1.ap_id)
|
||||||
|
|> Enum.concat(recipients)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def maybe_notify_followers(recipients, _), do: recipients
|
||||||
|
|
||||||
def maybe_extract_mentions(%{"tag" => tag}) do
|
def maybe_extract_mentions(%{"tag" => tag}) do
|
||||||
tag
|
tag
|
||||||
|> Enum.filter(fn x -> is_map(x) && x["type"] == "Mention" end)
|
|> Enum.filter(fn x -> is_map(x) && x["type"] == "Mention" end)
|
||||||
|
|
|
@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
|
||||||
|
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.Builders.ActivityBuilder
|
alias Pleroma.Builders.ActivityBuilder
|
||||||
|
alias Pleroma.Notification
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
@ -1464,6 +1465,14 @@ test "create" do
|
||||||
|
|
||||||
assert User.following?(follower_move_opted_out, old_user)
|
assert User.following?(follower_move_opted_out, old_user)
|
||||||
refute User.following?(follower_move_opted_out, new_user)
|
refute User.following?(follower_move_opted_out, new_user)
|
||||||
|
|
||||||
|
activity = %Activity{activity | object: nil}
|
||||||
|
|
||||||
|
assert [%Notification{activity: ^activity}] =
|
||||||
|
Notification.for_user_since(follower, ~N[2019-04-13 11:22:33])
|
||||||
|
|
||||||
|
assert [%Notification{activity: ^activity}] =
|
||||||
|
Notification.for_user_since(follower_move_opted_out, ~N[2019-04-13 11:22:33])
|
||||||
end
|
end
|
||||||
|
|
||||||
test "old user must be in the new user's `also_known_as` list" do
|
test "old user must be in the new user's `also_known_as` list" do
|
||||||
|
|
Loading…
Reference in a new issue