diff options
| author | Maksim Pechnikov <parallel588@gmail.com> | 2020-05-12 06:44:33 +0300 | 
|---|---|---|
| committer | Maksim Pechnikov <parallel588@gmail.com> | 2020-05-12 08:14:42 +0300 | 
| commit | 63477d07adb614413a382a87f06af2bc2495b432 (patch) | |
| tree | 19f09311ed3743904fabf2ce6e89f060800c6fd7 /lib | |
| parent | f8190aea5e68a6e17ccc88b13486bd69c3b08450 (diff) | |
| download | pleroma-63477d07adb614413a382a87f06af2bc2495b432.tar.gz pleroma-63477d07adb614413a382a87f06af2bc2495b432.zip | |
unsubscribes of friends when user deactivated
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/user.ex | 20 | 
2 files changed, 17 insertions, 17 deletions
| diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index da140ac86..93ecb4631 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -150,22 +150,12 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{} = user <- User.get_cached_by_nickname(nickname) do        shell_info("Deactivating #{user.nickname}")        User.deactivate(user) - -      user -      |> User.get_friends() -      |> Enum.each(fn friend -> -        user = User.get_cached_by_id(user.id) - -        shell_info("Unsubscribing #{friend.nickname} from #{user.nickname}") -        User.unfollow(user, friend) -      end) -        :timer.sleep(500)        user = User.get_cached_by_id(user.id) -      if Enum.empty?(User.get_friends(user)) do -        shell_info("Successfully unsubscribed all followers from #{user.nickname}") +      if Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) do +        shell_info("Successfully unsubscribed all local followers from #{user.nickname}")        end      else        _ -> diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index a86cc3202..1c456b27c 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -750,7 +750,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) @@ -761,7 +773,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!"} @@ -1401,15 +1413,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 | 
