From a08e724476f47b85de9bb334eeadaf882a7a23ee Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 25 Mar 2016 02:13:30 +0100 Subject: Fix subscriptions:clear task, refactor feeds, refactor streamable activites and atom feed generation to some extent, as well as the way mentions are stored --- app/services/precompute_feed_service.rb | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) (limited to 'app/services/precompute_feed_service.rb') diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb index 9d3b8d370..de4201a8f 100644 --- a/app/services/precompute_feed_service.rb +++ b/app/services/precompute_feed_service.rb @@ -1,33 +1,21 @@ class PrecomputeFeedService < BaseService - MAX_FEED_SIZE = 800 - - # Fill up a user's home/mentions feed from DB and return it + # Fill up a user's home/mentions feed from DB and return a subset # @param [Symbol] type :home or :mentions # @param [Account] account # @return [Array] - def call(type, account) - statuses = send(type.to_s, account).order('created_at desc').limit(MAX_FEED_SIZE) - statuses.each { |status| push(type, account.id, status) } - statuses - end + def call(type, account, limit) + instant_return = [] - private - - def push(type, receiver_id, status) - redis.zadd(key(type, receiver_id), status.id, status.id) - end + Status.send("as_#{type}_timeline", account).order('created_at desc').limit(FeedManager::MAX_ITEMS).each do |status| + next if type == :home && FeedManager.filter_status?(status, account) + redis.zadd(FeedManager.key(type, receiver_id), status.id, status.id) + instant_return << status unless instant_return.size > limit + end - def home(account) - Status.where(account: [account] + account.following).with_includes.with_counters + instant_return end - def mentions(account) - Status.where(id: Mention.where(account: account).pluck(:status_id)).with_includes.with_counters - end - - def key(type, id) - "feed:#{type}:#{id}" - end + private def redis $redis -- cgit