aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/user.ex
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2020-05-21 13:27:44 +0000
committerlain <lain@soykaf.club>2020-05-21 13:27:44 +0000
commit283fb1e05bcd34294ea7bdedab62b0cc6f88d742 (patch)
tree075571a681face1a2982f8a607f8930718c7b0e5 /lib/pleroma/user.ex
parent42b06d78dfc9cec2a31bcb4676cc0135863ca97d (diff)
parent4ae2f75c3e5d293c24fac978b1ae10fdfa7a3c00 (diff)
downloadpleroma-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.ex20
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