activitypub: user view: report totalItems=0 for follows/followers when hidden
[akkoma] / lib / pleroma / web / activity_pub / views / user_view.ex
index b363a3dc46e880ef676f9e8523f268edbdb90042..dd1ab3d2b75bbc66fed1ab20fadb3aa6d20782b6 100644 (file)
@@ -104,8 +104,14 @@ defmodule Pleroma.Web.ActivityPub.UserView do
     query = User.get_friends_query(user)
     query = from(user in query, select: [:ap_id])
     following = Repo.all(query)
+    total =
+      if !user.info.hide_follows do
+        length(following)
+      else
+        0
+      end
 
-    collection(following, "#{user.ap_id}/following", page, !user.info.hide_follows)
+    collection(following, "#{user.ap_id}/following", page, !user.info.hide_follows, total)
     |> Map.merge(Utils.make_json_ld_header())
   end
 
@@ -113,11 +119,17 @@ defmodule Pleroma.Web.ActivityPub.UserView do
     query = User.get_friends_query(user)
     query = from(user in query, select: [:ap_id])
     following = Repo.all(query)
+    total =
+      if !user.info.hide_follows do
+        length(following)
+      else
+        0
+      end
 
     %{
       "id" => "#{user.ap_id}/following",
       "type" => "OrderedCollection",
-      "totalItems" => length(following),
+      "totalItems" => total,
       "first" => collection(following, "#{user.ap_id}/following", 1, !user.info.hide_follows)
     }
     |> Map.merge(Utils.make_json_ld_header())
@@ -127,8 +139,14 @@ defmodule Pleroma.Web.ActivityPub.UserView do
     query = User.get_followers_query(user)
     query = from(user in query, select: [:ap_id])
     followers = Repo.all(query)
+    total =
+      if !user.info.hide_followers do
+        length(followers)
+      else
+        0
+      end
 
-    collection(followers, "#{user.ap_id}/followers", page, !user.info.hide_followers)
+    collection(followers, "#{user.ap_id}/followers", page, !user.info.hide_followers, total)
     |> Map.merge(Utils.make_json_ld_header())
   end
 
@@ -136,20 +154,23 @@ defmodule Pleroma.Web.ActivityPub.UserView do
     query = User.get_followers_query(user)
     query = from(user in query, select: [:ap_id])
     followers = Repo.all(query)
+    total =
+      if !user.info.hide_followers do
+        length(followers)
+      else
+        0
+      end
 
     %{
       "id" => "#{user.ap_id}/followers",
       "type" => "OrderedCollection",
-      "totalItems" => length(followers),
-      "first" => collection(followers, "#{user.ap_id}/followers", 1, !user.info.hide_followers)
+      "totalItems" => total,
+      "first" => collection(followers, "#{user.ap_id}/followers", 1, !user.info.hide_followers, total)
     }
     |> Map.merge(Utils.make_json_ld_header())
   end
 
   def render("outbox.json", %{user: user, max_id: max_qid}) do
-    # XXX: technically note_count is wrong for this, but it's better than nothing
-    info = User.user_info(user)
-
     params = %{
       "limit" => "10"
     }
@@ -177,7 +198,6 @@ defmodule Pleroma.Web.ActivityPub.UserView do
       "id" => "#{iri}?max_id=#{max_id}",
       "type" => "OrderedCollectionPage",
       "partOf" => iri,
-      "totalItems" => info.note_count,
       "orderedItems" => collection,
       "next" => "#{iri}?max_id=#{min_id}"
     }
@@ -186,7 +206,6 @@ defmodule Pleroma.Web.ActivityPub.UserView do
       %{
         "id" => iri,
         "type" => "OrderedCollection",
-        "totalItems" => info.note_count,
         "first" => page
       }
       |> Map.merge(Utils.make_json_ld_header())
@@ -224,7 +243,6 @@ defmodule Pleroma.Web.ActivityPub.UserView do
       "id" => "#{iri}?max_id=#{max_id}",
       "type" => "OrderedCollectionPage",
       "partOf" => iri,
-      "totalItems" => -1,
       "orderedItems" => collection,
       "next" => "#{iri}?max_id=#{min_id}"
     }
@@ -233,7 +251,6 @@ defmodule Pleroma.Web.ActivityPub.UserView do
       %{
         "id" => iri,
         "type" => "OrderedCollection",
-        "totalItems" => -1,
         "first" => page
       }
       |> Map.merge(Utils.make_json_ld_header())