From 852d2f78e93a4f99b7ecc3d43db89e55b583a69d Mon Sep 17 00:00:00 2001 From: Fosco Marotto Date: Thu, 21 Jan 2021 17:37:12 -0500 Subject: [PATCH] [sorting query builder] Adjust filtering --- app/controllers/api/v1/timelines/explore_controller.rb | 7 ++++--- .../api/v1/timelines/group_collection_controller.rb | 6 +++--- app/controllers/api/v1/timelines/group_controller.rb | 2 +- app/lib/sorting_query_builder.rb | 6 +++++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/controllers/api/v1/timelines/explore_controller.rb b/app/controllers/api/v1/timelines/explore_controller.rb index fcf69c9a..5a1586bc 100644 --- a/app/controllers/api/v1/timelines/explore_controller.rb +++ b/app/controllers/api/v1/timelines/explore_controller.rb @@ -44,9 +44,10 @@ class Api::V1::Timelines::ExploreController < Api::BaseController def explore_statuses if current_account - SortingQueryBuilder.new.call(@sort_type, nil, params[:page]).reject {|status| - FeedManager.instance.filter?(:home, status, current_account.id) - } + SortingQueryBuilder.new.call(@sort_type, nil, params[:page], current_account) + .reject {|status| + FeedManager.instance.filter?(:home, status, current_account.id) + } else page = [params[:page].to_i.abs, MIN_UNAUTHENTICATED_PAGES].min SortingQueryBuilder.new.call(@sort_type, nil, page) diff --git a/app/controllers/api/v1/timelines/group_collection_controller.rb b/app/controllers/api/v1/timelines/group_collection_controller.rb index 22b61003..06369e25 100644 --- a/app/controllers/api/v1/timelines/group_collection_controller.rb +++ b/app/controllers/api/v1/timelines/group_collection_controller.rb @@ -43,7 +43,7 @@ class Api::V1::Timelines::GroupCollectionController < Api::BaseController 'top_yearly', 'top_all_time', ].include? params[:sort_by] - + if @collection_type === 'featured' && (@sort_type == 'newest' || @sort_type == 'recent') @sort_type = 'hot' end @@ -66,9 +66,9 @@ class Api::V1::Timelines::GroupCollectionController < Api::BaseController elsif @collection_type == 'member' && !current_account.nil? @groupIds = current_account.groups.pluck(:id) end - + if current_account - SortingQueryBuilder.new.call(@sort_type, @groupIds, params[:page]).reject {|status| + SortingQueryBuilder.new.call(@sort_type, @groupIds, params[:page], current_account).reject {|status| FeedManager.instance.filter?(:home, status, current_account.id) } else diff --git a/app/controllers/api/v1/timelines/group_controller.rb b/app/controllers/api/v1/timelines/group_controller.rb index 4bf9290b..b1a87174 100644 --- a/app/controllers/api/v1/timelines/group_controller.rb +++ b/app/controllers/api/v1/timelines/group_controller.rb @@ -51,7 +51,7 @@ class Api::V1::Timelines::GroupController < Api::BaseController def group_statuses if current_account - SortingQueryBuilder.new.call(@sort_type, @group, params[:page]).reject {|status| + SortingQueryBuilder.new.call(@sort_type, @group, params[:page], current_account).reject {|status| FeedManager.instance.filter?(:home, status, current_account.id) } else diff --git a/app/lib/sorting_query_builder.rb b/app/lib/sorting_query_builder.rb index 1e323577..365f08c6 100644 --- a/app/lib/sorting_query_builder.rb +++ b/app/lib/sorting_query_builder.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class SortingQueryBuilder < BaseService - def call(sort_type, group = nil, page = 1) + def call(sort_type, group = nil, page = 1, account = nil) limit = 20 min_likes = 5 @@ -44,6 +44,8 @@ class SortingQueryBuilder < BaseService query = query.with_public_visibility if group.nil? query = query.where('statuses.created_at > ?', date_limit) query = query.where(group: group) unless group.nil? + query = query.excluding_blocked_reblogs(account) unless account.nil? + query = query.not_excluded_by_account(current_account) unless account.nil? query = query.page(page.to_i) query = query.per(limit) return query @@ -55,6 +57,8 @@ class SortingQueryBuilder < BaseService query = query.where('status_stats.reblogs_count > ?', min_reblogs) unless sort_type == 'recent' query = query.where('status_stats.favourites_count > ?', min_likes) unless sort_type == 'recent' query = query.joins(:status) + query = query.excluding_blocked_reblogs(account) unless account.nil? + query = query.not_excluded_by_account(current_account) unless account.nil? query = query.where('statuses.reblog_of_id IS NULL') query = query.where('statuses.in_reply_to_id IS NULL') query = query.where('statuses.group_id': group) unless group.nil?