aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex6
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex10
-rw-r--r--lib/pleroma/web/twitter_api/twitter_api.ex12
3 files changed, 23 insertions, 5 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 5e579dc44..e1a7befaa 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -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
@@ -99,9 +100,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
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index e9f0dcd32..5937ec88c 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -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})
diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex
index f2b2b4418..8e2cd98ca 100644
--- a/lib/pleroma/web/twitter_api/twitter_api.ex
+++ b/lib/pleroma/web/twitter_api/twitter_api.ex
@@ -131,11 +131,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