commit: 7f0d1b8cc0ddf11de82de1850d53883a8da434cc
parent: 92569b1f0d2a1e4a5b131ce560766b023a71ccb1
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Wed, 1 Mar 2017 01:07:11 +0100
If a status is within 40 statuses from the top of a home feed, do not
reinsert it when someone boosts it
Diffstat:
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
@@ -22,8 +22,18 @@ class FeedManager
end
def push(timeline_type, account, status)
- redis.zadd(key(timeline_type, account.id), status.id, status.reblog? ? status.reblog_of_id : status.id)
- trim(timeline_type, account.id)
+ timeline_key = key(timeline_type, account.id)
+
+ if status.reblog?
+ # If the original status is within 40 statuses from top, do not re-insert it into the feed
+ rank = redis.zrevrank(timeline_key, status.reblog_of_id)
+ return if !rank.nil? && rank < 40
+ redis.zadd(timeline_key, status.id, status.reblog_of_id)
+ else
+ redis.zadd(timeline_key, status.id, status.id)
+ trim(timeline_type, account.id)
+ end
+
broadcast(account.id, event: 'update', payload: inline_render(account, 'api/v1/statuses/show', status))
end