aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEgor Kislitsyn <egor@kislitsyn.com>2019-11-12 18:36:50 +0700
committerEgor Kislitsyn <egor@kislitsyn.com>2019-11-12 18:45:28 +0700
commite6d7e27bd603806e96dfc2774f90cadb3cf73a8c (patch)
tree96b9c5de9bc8c43ee3bcd1e449bb19cec950a6e6 /lib
parent61fc739ab8917ccb5a12d6ab6db6130dc231990b (diff)
downloadpleroma-e6d7e27bd603806e96dfc2774f90cadb3cf73a8c.tar.gz
Add `allow_following_move` setting to User
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/following_relationship.ex34
-rw-r--r--lib/pleroma/user.ex3
-rw-r--r--lib/pleroma/web/mastodon_api/controllers/account_controller.ex1
-rw-r--r--lib/pleroma/web/mastodon_api/views/account_view.ex7
4 files changed, 25 insertions, 20 deletions
diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex
index 2f89eb4cf..40538f7bf 100644
--- a/lib/pleroma/following_relationship.ex
+++ b/lib/pleroma/following_relationship.ex
@@ -109,26 +109,20 @@ defmodule Pleroma.FollowingRelationship do
end
def move_following(origin, target) do
- following_relationships =
- __MODULE__
- |> where(following_id: ^origin.id)
- |> preload([:follower])
- |> limit(50)
- |> Repo.all()
-
- case following_relationships do
- [] ->
- :ok
-
- following_relationships ->
- Enum.each(following_relationships, fn following_relationship ->
- Repo.transaction(fn ->
- Repo.delete(following_relationship)
- User.follow(following_relationship.follower, target)
- end)
- end)
-
- move_following(origin, target)
+ __MODULE__
+ |> join(:inner, [r], f in assoc(r, :follower))
+ |> where(following_id: ^origin.id)
+ |> where([r, f], f.allow_following_move == true)
+ |> limit(50)
+ |> preload([:follower])
+ |> Repo.all()
+ |> Enum.map(fn following_relationship ->
+ Repo.delete(following_relationship)
+ Pleroma.Web.CommonAPI.follow(following_relationship.follower, target)
+ end)
+ |> case do
+ [] -> :ok
+ _ -> move_following(origin, target)
end
end
end
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 8715b37de..d40f6ed08 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -104,6 +104,7 @@ defmodule Pleroma.User do
field(:raw_fields, {:array, :map}, default: [])
field(:discoverable, :boolean, default: false)
field(:invisible, :boolean, default: false)
+ field(:allow_following_move, :boolean, default: true)
field(:skip_thread_containment, :boolean, default: false)
field(:also_known_as, {:array, :string}, default: [])
@@ -314,6 +315,7 @@ defmodule Pleroma.User do
:hide_followers_count,
:hide_follows_count,
:hide_favorites,
+ :allow_following_move,
:background,
:show_role,
:skip_thread_containment,
@@ -359,6 +361,7 @@ defmodule Pleroma.User do
:hide_follows,
:fields,
:hide_followers,
+ :allow_following_move,
:discoverable,
:hide_followers_count,
:hide_follows_count,
diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
index 73fad519e..7df7dc097 100644
--- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
@@ -152,6 +152,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
:hide_favorites,
:show_role,
:skip_thread_containment,
+ :allow_following_move,
:discoverable
]
|> Enum.reduce(%{}, fn key, acc ->
diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex
index e30fed610..7aae7d188 100644
--- a/lib/pleroma/web/mastodon_api/views/account_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/account_view.ex
@@ -163,6 +163,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|> maybe_put_chat_token(user, opts[:for], opts)
|> maybe_put_activation_status(user, opts[:for])
|> maybe_put_follow_requests_count(user, opts[:for])
+ |> maybe_put_allow_following_move(user, opts[:for])
|> maybe_put_unread_conversation_count(user, opts[:for])
end
@@ -239,6 +240,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
defp maybe_put_notification_settings(data, _, _), do: data
+ defp maybe_put_allow_following_move(data, %User{id: user_id} = user, %User{id: user_id}) do
+ Kernel.put_in(data, [:pleroma, :allow_following_move], user.allow_following_move)
+ end
+
+ defp maybe_put_allow_following_move(data, _, _), do: data
+
defp maybe_put_activation_status(data, user, %User{is_admin: true}) do
Kernel.put_in(data, [:pleroma, :deactivated], user.deactivated)
end