forked from YokaiRick/akkoma
removeing corresponding add activity
This commit is contained in:
parent
5ae9b05600
commit
8857242c95
4 changed files with 78 additions and 0 deletions
|
@ -391,4 +391,13 @@ def get_by_object_ap_id_with_object(ap_id) when is_binary(ap_id) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_by_object_ap_id_with_object(_), do: nil
|
def get_by_object_ap_id_with_object(_), do: nil
|
||||||
|
|
||||||
|
@spec add_by_params_query(String.t(), String.t(), String.t()) :: Ecto.Query.t()
|
||||||
|
def add_by_params_query(object_id, actor, target) do
|
||||||
|
object_id
|
||||||
|
|> Queries.by_object_id()
|
||||||
|
|> Queries.by_type("Add")
|
||||||
|
|> Queries.by_actor(actor)
|
||||||
|
|> where([a], fragment("?->>'target' = ?", a.data, ^target))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -340,11 +340,16 @@ def handle(%{data: %{"type" => "Add"} = data} = object, meta) do
|
||||||
|
|
||||||
# Tasks this handles:
|
# Tasks this handles:
|
||||||
# - removes pin from user
|
# - removes pin from user
|
||||||
|
# - removes corresponding Add activity
|
||||||
# - if activity had expiration, recreates activity expiration job
|
# - if activity had expiration, recreates activity expiration job
|
||||||
@impl true
|
@impl true
|
||||||
def handle(%{data: %{"type" => "Remove"} = data} = object, meta) do
|
def handle(%{data: %{"type" => "Remove"} = data} = object, meta) do
|
||||||
with %User{} = user <- User.get_cached_by_ap_id(data["actor"]),
|
with %User{} = user <- User.get_cached_by_ap_id(data["actor"]),
|
||||||
{:ok, _user} <- User.remove_pinned_object_id(user, data["object"]) do
|
{:ok, _user} <- User.remove_pinned_object_id(user, data["object"]) do
|
||||||
|
data["object"]
|
||||||
|
|> Activity.add_by_params_query(user.ap_id, user.featured_address)
|
||||||
|
|> Repo.delete_all()
|
||||||
|
|
||||||
# if pinned activity was scheduled for deletion, we reschedule it for deletion
|
# if pinned activity was scheduled for deletion, we reschedule it for deletion
|
||||||
if meta[:expires_at] do
|
if meta[:expires_at] do
|
||||||
# MRF.ActivityExpirationPolicy used UTC timestamps for expires_at in original implementation
|
# MRF.ActivityExpirationPolicy used UTC timestamps for expires_at in original implementation
|
||||||
|
|
|
@ -254,4 +254,26 @@ test "get_by_object_ap_id_with_object/1" do
|
||||||
|
|
||||||
assert %{id: ^id} = Activity.get_by_object_ap_id_with_object(obj_id)
|
assert %{id: ^id} = Activity.get_by_object_ap_id_with_object(obj_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "add_by_params_query/3" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
note = insert(:note_activity, user: user)
|
||||||
|
|
||||||
|
insert(:add_activity, user: user, note: note)
|
||||||
|
insert(:add_activity, user: user, note: note)
|
||||||
|
insert(:add_activity, user: user)
|
||||||
|
|
||||||
|
assert Repo.aggregate(Activity, :count, :id) == 4
|
||||||
|
|
||||||
|
add_query =
|
||||||
|
Activity.add_by_params_query(note.data["object"], user.ap_id, user.featured_address)
|
||||||
|
|
||||||
|
assert Repo.aggregate(add_query, :count, :id) == 2
|
||||||
|
|
||||||
|
Repo.delete_all(add_query)
|
||||||
|
assert Repo.aggregate(add_query, :count, :id) == 0
|
||||||
|
|
||||||
|
assert Repo.aggregate(Activity, :count, :id) == 2
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
|
|
||||||
defmodule Pleroma.Factory do
|
defmodule Pleroma.Factory do
|
||||||
use ExMachina.Ecto, repo: Pleroma.Repo
|
use ExMachina.Ecto, repo: Pleroma.Repo
|
||||||
|
|
||||||
|
require Pleroma.Constants
|
||||||
|
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
|
||||||
|
@ -225,6 +228,45 @@ def direct_note_activity_factory do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_activity_factory(attrs \\ %{}) do
|
||||||
|
featured_collection_activity(attrs, "Add")
|
||||||
|
end
|
||||||
|
|
||||||
|
def remove_activity_factor(attrs \\ %{}) do
|
||||||
|
featured_collection_activity(attrs, "Remove")
|
||||||
|
end
|
||||||
|
|
||||||
|
defp featured_collection_activity(attrs, type) do
|
||||||
|
user = attrs[:user] || insert(:user)
|
||||||
|
note = attrs[:note] || insert(:note, user: user)
|
||||||
|
|
||||||
|
data_attrs =
|
||||||
|
attrs
|
||||||
|
|> Map.get(:data_attrs, %{})
|
||||||
|
|> Map.put(:type, type)
|
||||||
|
|
||||||
|
attrs = Map.drop(attrs, [:user, :note, :data_attrs])
|
||||||
|
|
||||||
|
data =
|
||||||
|
%{
|
||||||
|
"id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
|
||||||
|
"target" => user.featured_address,
|
||||||
|
"object" => note.data["object"],
|
||||||
|
"actor" => note.data["actor"],
|
||||||
|
"type" => "Add",
|
||||||
|
"to" => [Pleroma.Constants.as_public()],
|
||||||
|
"cc" => [user.follower_address]
|
||||||
|
}
|
||||||
|
|> Map.merge(data_attrs)
|
||||||
|
|
||||||
|
%Pleroma.Activity{
|
||||||
|
data: data,
|
||||||
|
actor: data["actor"],
|
||||||
|
recipients: data["to"]
|
||||||
|
}
|
||||||
|
|> Map.merge(attrs)
|
||||||
|
end
|
||||||
|
|
||||||
def note_activity_factory(attrs \\ %{}) do
|
def note_activity_factory(attrs \\ %{}) do
|
||||||
user = attrs[:user] || insert(:user)
|
user = attrs[:user] || insert(:user)
|
||||||
note = attrs[:note] || insert(:note, user: user)
|
note = attrs[:note] || insert(:note, user: user)
|
||||||
|
|
Loading…
Reference in a new issue