diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/user/info.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/views/user_view.ex | 32 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/account_view.ex | 14 | 
4 files changed, 45 insertions, 17 deletions
diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 151e025de..b150a57cd 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -41,6 +41,8 @@ defmodule Pleroma.User.Info do      field(:topic, :string, default: nil)      field(:hub, :string, default: nil)      field(:salmon, :string, default: nil) +    field(:hide_followers_count, :boolean, default: false) +    field(:hide_follows_count, :boolean, default: false)      field(:hide_followers, :boolean, default: false)      field(:hide_follows, :boolean, default: false)      field(:hide_favorites, :boolean, default: true) @@ -262,6 +264,8 @@ defmodule Pleroma.User.Info do        :salmon,        :hide_followers,        :hide_follows, +      :hide_followers_count, +      :hide_follows_count,        :follower_count,        :fields,        :following_count @@ -281,7 +285,9 @@ defmodule Pleroma.User.Info do        :following_count,        :hide_follows,        :fields, -      :hide_followers +      :hide_followers, +      :hide_followers_count, +      :hide_follows_count      ])      |> validate_fields(remote?)    end @@ -295,6 +301,8 @@ defmodule Pleroma.User.Info do        :banner,        :hide_follows,        :hide_followers, +      :hide_followers_count, +      :hide_follows_count,        :hide_favorites,        :background,        :show_role, @@ -458,7 +466,9 @@ defmodule Pleroma.User.Info do        :hide_followers,        :hide_follows,        :follower_count, -      :following_count +      :following_count, +      :hide_followers_count, +      :hide_follows_count      ])    end  end diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index 7be734b26..164b973d0 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -118,30 +118,34 @@ defmodule Pleroma.Web.ActivityPub.UserView do    end    def render("following.json", %{user: user, page: page} = opts) do -    showing = (opts[:for] && opts[:for] == user) || !user.info.hide_follows +    showing_items = (opts[:for] && opts[:for] == user) || !user.info.hide_follows +    showing_count = showing_items || !user.info.hide_follows_count +      query = User.get_friends_query(user)      query = from(user in query, select: [:ap_id])      following = Repo.all(query)      total = -      if showing do +      if showing_count do          length(following)        else          0        end -    collection(following, "#{user.ap_id}/following", page, showing, total) +    collection(following, "#{user.ap_id}/following", page, showing_items, total)      |> Map.merge(Utils.make_json_ld_header())    end    def render("following.json", %{user: user} = opts) do -    showing = (opts[:for] && opts[:for] == user) || !user.info.hide_follows +    showing_items = (opts[:for] && opts[:for] == user) || !user.info.hide_follows +    showing_count = showing_items || !user.info.hide_follows_count +      query = User.get_friends_query(user)      query = from(user in query, select: [:ap_id])      following = Repo.all(query)      total = -      if showing do +      if showing_count do          length(following)        else          0 @@ -152,7 +156,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do        "type" => "OrderedCollection",        "totalItems" => total,        "first" => -        if showing do +        if showing_items do            collection(following, "#{user.ap_id}/following", 1, !user.info.hide_follows)          else            "#{user.ap_id}/following?page=1" @@ -162,32 +166,34 @@ defmodule Pleroma.Web.ActivityPub.UserView do    end    def render("followers.json", %{user: user, page: page} = opts) do -    showing = (opts[:for] && opts[:for] == user) || !user.info.hide_followers +    showing_items = (opts[:for] && opts[:for] == user) || !user.info.hide_followers +    showing_count = showing_items || !user.info.hide_followers_count      query = User.get_followers_query(user)      query = from(user in query, select: [:ap_id])      followers = Repo.all(query)      total = -      if showing do +      if showing_count do          length(followers)        else          0        end -    collection(followers, "#{user.ap_id}/followers", page, showing, total) +    collection(followers, "#{user.ap_id}/followers", page, showing_items, total)      |> Map.merge(Utils.make_json_ld_header())    end    def render("followers.json", %{user: user} = opts) do -    showing = (opts[:for] && opts[:for] == user) || !user.info.hide_followers +    showing_items = (opts[:for] && opts[:for] == user) || !user.info.hide_followers +    showing_count = showing_items || !user.info.hide_followers_count      query = User.get_followers_query(user)      query = from(user in query, select: [:ap_id])      followers = Repo.all(query)      total = -      if showing do +      if showing_count do          length(followers)        else          0 @@ -198,8 +204,8 @@ defmodule Pleroma.Web.ActivityPub.UserView do        "type" => "OrderedCollection",        "totalItems" => total,        "first" => -        if showing do -          collection(followers, "#{user.ap_id}/followers", 1, showing, total) +        if showing_items do +          collection(followers, "#{user.ap_id}/followers", 1, showing_items, total)          else            "#{user.ap_id}/followers?page=1"          end diff --git a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex index 060137b80..1beb4bcf2 100644 --- a/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex @@ -147,6 +147,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        [          :no_rich_text,          :locked, +        :hide_followers_count, +        :hide_follows_count,          :hide_followers,          :hide_follows,          :hide_favorites, diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 169116d0d..195dd124b 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -74,10 +74,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do      user_info = User.get_cached_user_info(user)      following_count = -      ((!user.info.hide_follows or opts[:for] == user) && user_info.following_count) || 0 +      if !user.info.hide_follows_count or !user.info.hide_follows or opts[:for] == user do +        user_info.following_count +      else +        0 +      end      followers_count = -      ((!user.info.hide_followers or opts[:for] == user) && user_info.follower_count) || 0 +      if !user.info.hide_followers_count or !user.info.hide_followers or opts[:for] == user do +        user_info.follower_count +      else +        0 +      end      bot = (user.info.source_data["type"] || "Person") in ["Application", "Service"] @@ -138,6 +146,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do        pleroma: %{          confirmation_pending: user_info.confirmation_pending,          tags: user.tags, +        hide_followers_count: user.info.hide_followers_count, +        hide_follows_count: user.info.hide_follows_count,          hide_followers: user.info.hide_followers,          hide_follows: user.info.hide_follows,          hide_favorites: user.info.hide_favorites,  | 
