0
0
Fork 0

Merge and unmerge timelines on follow/unfollow, solves #21, #22

This commit is contained in:
Eugen Rochko 2016-09-10 18:36:48 +02:00
parent 35b6c4b36a
commit 0077fc26df
13 changed files with 133 additions and 52 deletions

View file

@ -13,4 +13,42 @@ class FeedManager
replied_to_user = status.reply? ? status.thread.account : nil
(status.reply? && !(follower.id = replied_to_user.id || follower.following?(replied_to_user)))
end
def push(timeline_type, account, status)
redis.zadd(key(timeline_type, account.id), status.id, status.id)
trim(timeline_type, account.id)
ActionCable.server.broadcast("timeline:#{account.id}", type: 'update', timeline: timeline_type, message: inline_render(account, status))
end
def trim(type, account_id)
return unless redis.zcard(key(type, account_id)) > FeedManager::MAX_ITEMS
last = redis.zrevrange(key(type, account_id), FeedManager::MAX_ITEMS - 1, FeedManager::MAX_ITEMS - 1)
redis.zremrangebyscore(key(type, account_id), '-inf', "(#{last.last}")
end
private
def redis
$redis
end
def inline_render(target_account, status)
rabl_scope = Class.new do
include RoutingHelper
def initialize(account)
@account = account
end
def current_user
@account.user
end
def current_account
@account
end
end
Rabl::Renderer.new('api/statuses/show', status, view_path: 'app/views', format: :json, scope: rabl_scope.new(target_account)).render
end
end