|
|
|
@ -65,12 +65,13 @@ class StatusesController < ApplicationController
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def create_descendant_thread(depth, statuses)
|
|
|
|
|
def create_descendant_thread(starting_depth, statuses)
|
|
|
|
|
depth = starting_depth + statuses.size
|
|
|
|
|
if depth < DESCENDANTS_DEPTH_LIMIT
|
|
|
|
|
{ statuses: statuses }
|
|
|
|
|
{ statuses: statuses, starting_depth: starting_depth }
|
|
|
|
|
else
|
|
|
|
|
next_status = statuses.pop
|
|
|
|
|
{ statuses: statuses, next_status: next_status }
|
|
|
|
|
{ statuses: statuses, starting_depth: starting_depth, next_status: next_status }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -102,15 +103,18 @@ class StatusesController < ApplicationController
|
|
|
|
|
|
|
|
|
|
if descendants.present?
|
|
|
|
|
statuses = [descendants.first]
|
|
|
|
|
depth = 1
|
|
|
|
|
starting_depth = 0
|
|
|
|
|
|
|
|
|
|
descendants.drop(1).each_with_index do |descendant, index|
|
|
|
|
|
if descendants[index].id == descendant.in_reply_to_id
|
|
|
|
|
depth += 1
|
|
|
|
|
statuses << descendant
|
|
|
|
|
else
|
|
|
|
|
@descendant_threads << create_descendant_thread(depth, statuses)
|
|
|
|
|
@descendant_threads << create_descendant_thread(starting_depth, statuses)
|
|
|
|
|
|
|
|
|
|
# The thread is broken, assume it's a reply to the root status
|
|
|
|
|
starting_depth = 0
|
|
|
|
|
|
|
|
|
|
# ... unless we can find its ancestor in one of the already-processed threads
|
|
|
|
|
@descendant_threads.reverse_each do |descendant_thread|
|
|
|
|
|
statuses = descendant_thread[:statuses]
|
|
|
|
|
|
|
|
|
@ -119,18 +123,16 @@ class StatusesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if index.present?
|
|
|
|
|
depth += index - statuses.size
|
|
|
|
|
starting_depth = descendant_thread[:starting_depth] + index + 1
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
depth -= statuses.size
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
statuses = [descendant]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@descendant_threads << create_descendant_thread(depth, statuses)
|
|
|
|
|
@descendant_threads << create_descendant_thread(starting_depth, statuses)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@max_descendant_thread_id = @descendant_threads.pop[:statuses].first.id if descendants.size >= DESCENDANTS_LIMIT
|
|
|
|
|