diff options
author | lain <lain@soykaf.club> | 2020-05-21 13:27:44 +0000 |
---|---|---|
committer | lain <lain@soykaf.club> | 2020-05-21 13:27:44 +0000 |
commit | 283fb1e05bcd34294ea7bdedab62b0cc6f88d742 (patch) | |
tree | 075571a681face1a2982f8a607f8930718c7b0e5 /lib/pleroma/user.ex | |
parent | 42b06d78dfc9cec2a31bcb4676cc0135863ca97d (diff) | |
parent | 4ae2f75c3e5d293c24fac978b1ae10fdfa7a3c00 (diff) | |
download | pleroma-283fb1e05bcd34294ea7bdedab62b0cc6f88d742.tar.gz |
Merge branch 'issue/749' into 'develop'
[#749] unsubscribes of friends when user deactivated
See merge request pleroma/pleroma!2513
Diffstat (limited to 'lib/pleroma/user.ex')
-rw-r--r-- | lib/pleroma/user.ex | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index e8013bf40..224dfd023 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -749,7 +749,19 @@ defmodule Pleroma.User do {:error, "Not subscribed!"} end + @spec unfollow(User.t(), User.t()) :: {:ok, User.t(), Activity.t()} | {:error, String.t()} def unfollow(%User{} = follower, %User{} = followed) do + case do_unfollow(follower, followed) do + {:ok, follower, followed} -> + {:ok, follower, Utils.fetch_latest_follow(follower, followed)} + + error -> + error + end + end + + @spec do_unfollow(User.t(), User.t()) :: {:ok, User.t(), User.t()} | {:error, String.t()} + defp do_unfollow(%User{} = follower, %User{} = followed) do case get_follow_state(follower, followed) do state when state in [:follow_pending, :follow_accept] -> FollowingRelationship.unfollow(follower, followed) @@ -760,7 +772,7 @@ defmodule Pleroma.User do |> update_following_count() |> set_cache() - {:ok, follower, Utils.fetch_latest_follow(follower, followed)} + {:ok, follower, followed} nil -> {:error, "Not subscribed!"} @@ -1402,15 +1414,13 @@ defmodule Pleroma.User do user |> get_followers() |> Enum.filter(& &1.local) - |> Enum.each(fn follower -> - follower |> update_following_count() |> set_cache() - end) + |> Enum.each(&set_cache(update_following_count(&1))) # Only update local user counts, remote will be update during the next pull. user |> get_friends() |> Enum.filter(& &1.local) - |> Enum.each(&update_follower_count/1) + |> Enum.each(&do_unfollow(user, &1)) {:ok, user} end |