Add Undo of Follow Activity insertion
This commit is contained in:
parent
a9b3f99d48
commit
28b203d08f
6 changed files with 51 additions and 6 deletions
|
|
@ -2,7 +2,8 @@ defmodule Pleroma.User do
|
|||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
import Ecto.Query
|
||||
alias Pleroma.{Repo, User, Activity, Object}
|
||||
alias Pleroma.{Repo, User, Object}
|
||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||
|
||||
schema "users" do
|
||||
field :bio, :string
|
||||
|
|
@ -91,9 +92,10 @@ defmodule Pleroma.User do
|
|||
following = follower.following
|
||||
|> List.delete(ap_followers)
|
||||
|
||||
follower
|
||||
{ :ok, follower } = follower
|
||||
|> follow_changeset(%{following: following})
|
||||
|> Repo.update
|
||||
{ :ok, follower, ActivityPub.fetch_latest_follow(follower, followed)}
|
||||
else
|
||||
{ :error, "Not subscribed!" }
|
||||
end
|
||||
|
|
|
|||
|
|
@ -174,6 +174,16 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
|||
Repo.all(query)
|
||||
end
|
||||
|
||||
def fetch_latest_follow(%User{ap_id: follower_id},
|
||||
%User{ap_id: followed_id}) do
|
||||
query = from activity in Activity,
|
||||
where: fragment("? @> ?", activity.data, ^%{type: "Follow", actor: follower_id,
|
||||
object: followed_id}),
|
||||
order_by: [desc: :inserted_at],
|
||||
limit: 1
|
||||
Repo.one(query)
|
||||
end
|
||||
|
||||
def upload(file) do
|
||||
data = Upload.store(file)
|
||||
Repo.insert(%Object{data: data})
|
||||
|
|
|
|||
|
|
@ -129,11 +129,17 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
|
|||
end
|
||||
end
|
||||
|
||||
def unfollow(%User{} = follower, params) do
|
||||
def unfollow(%User{} = follower, params) do
|
||||
with { :ok, %User{} = unfollowed } <- get_user(params),
|
||||
{ :ok, follower } <- User.unfollow(follower, unfollowed)
|
||||
{ :ok, follower, follow_activity } <- User.unfollow(follower, unfollowed),
|
||||
{ :ok, _activity } <- ActivityPub.insert(%{
|
||||
"type" => "Undo",
|
||||
"actor" => follower.ap_id,
|
||||
"object" => follow_activity, # get latest Follow for these users
|
||||
"published" => make_date()
|
||||
})
|
||||
do
|
||||
{ :ok, follower, unfollowed}
|
||||
{ :ok, follower, unfollowed }
|
||||
else
|
||||
err -> err
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue