From 6be4def2ecfd08d110e330e042a2b2044dd0c840 Mon Sep 17 00:00:00 2001 From: Z Date: Tue, 22 Oct 2019 15:09:06 +0800 Subject: [PATCH] follow tags --- .../api/v1/timelines/home_controller.rb | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/app/controllers/api/v1/timelines/home_controller.rb b/app/controllers/api/v1/timelines/home_controller.rb index ff5ede138..edbaa389c 100644 --- a/app/controllers/api/v1/timelines/home_controller.rb +++ b/app/controllers/api/v1/timelines/home_controller.rb @@ -9,6 +9,23 @@ class Api::V1::Timelines::HomeController < Api::BaseController def show @statuses = load_statuses + + min_id = @statuses.empty? ? 0 : [@statuses[0].id, @statuses[-1].id].min + + tags_statuses = [] + current_account.featured_tags.each do |tag| + @tag = tag + tags_statuses += (tags_statuses + load_tag_statuses).uniq(&:id) + end + + if params_slice(:since_id, :min_id).empty? + tags_statuses = tags_statuses.select{|tag| tag.id > min_id} + end + + @statuses = (@statuses + tags_statuses).uniq(&:id).sort_by(&:id) + if params_slice(:min_id).empty? + @statuses = @statuses.reverse! + end render json: @statuses, each_serializer: REST::StatusSerializer, @@ -18,6 +35,30 @@ class Api::V1::Timelines::HomeController < Api::BaseController private + def load_tag_statuses + cached_tagged_statuses + end + + def cached_tagged_statuses + cache_collection tagged_statuses, Status + end + + def tagged_statuses + if @tag.nil? + [] + else + statuses = tag_timeline_statuses.paginate_by_id( + limit_param(DEFAULT_STATUSES_LIMIT), + params_slice(:max_id, :since_id, :min_id) + ) + end + end + + def tag_timeline_statuses + HashtagQueryService.new.call(@tag, params.slice(:any, :all, :none), current_account, truthy_param?(:local)) + end + + def load_statuses cached_home_statuses end