]> cat aescling's git repositories - mastodon.git/commitdiff
Do not use permitted_for scope when querying pinned statuses (#7510)
authorAkihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
Wed, 16 May 2018 10:30:14 +0000 (19:30 +0900)
committerEugen Rochko <eugen@zeonfederated.com>
Wed, 16 May 2018 10:30:14 +0000 (12:30 +0200)
permitted_for scope is slow when combined with pinned status scope.
Fortunately permitted_for scope can safely be removed because a pinned
status is always public.

app/controllers/api/v1/accounts/statuses_controller.rb

index cbcc7ef046914460638ea15dfdf8dcc069d62411..c40155cb56cbf5c98d74d0475e3d4934929b31a5 100644 (file)
@@ -27,19 +27,17 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
   end
 
   def account_statuses
-    default_statuses.tap do |statuses|
-      statuses.merge!(only_media_scope) if truthy_param?(:only_media)
-      statuses.merge!(pinned_scope) if truthy_param?(:pinned)
-      statuses.merge!(no_replies_scope) if truthy_param?(:exclude_replies)
-    end
-  end
-
-  def default_statuses
-    permitted_account_statuses.paginate_by_max_id(
+    statuses = truthy_param?(:pinned) ? pinned_scope : permitted_account_statuses
+    statuses = statuses.paginate_by_max_id(
       limit_param(DEFAULT_STATUSES_LIMIT),
       params[:max_id],
       params[:since_id]
     )
+
+    statuses.merge!(only_media_scope) if truthy_param?(:only_media)
+    statuses.merge!(no_replies_scope) if truthy_param?(:exclude_replies)
+
+    statuses
   end
 
   def permitted_account_statuses