X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FView.pm;h=bc4a44323d2aa6a801a3988f4e93199debe3c8f3;hb=2da0edea03166ba0f90d3168aadfbb78659fbe78;hp=e09fbd5150850934b45680969267df18f9558ed2;hpb=1714e84586b23265cc7814158cb75a51f74b726c;p=public-inbox.git diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index e09fbd51..bc4a4432 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -177,8 +177,13 @@ sub emit_thread_html { pre_anchor_entry($seen, $_) for (@$msgs); __thread_entry($state, $_, 0) for (@$msgs); } else { - my $th = thread_results($msgs); - thread_entry($state, $_, 0) for $th->rootset; + my @q = map { (0, $_) } thread_results($msgs)->rootset; + while (@q) { + my $level = shift @q; + my $node = shift @q or next; + thread_entry($state, $level, $node); + unshift @q, $level+1, $node->child, $level, $node->next; + } if (my $max = $state->{cur_level}) { $state->{fh}->write( ('' x ($max - 1)) . ''); @@ -618,8 +623,7 @@ sub __ghost_prepare { } sub thread_entry { - my ($state, $node, $level) = @_; - return unless $node; + my ($state, $level, $node) = @_; if (my $mime = $node->message) { unless (__thread_entry($state, $mime, $level)) { __ghost_prepare($state, $node, $level); @@ -627,9 +631,6 @@ sub thread_entry { } else { __ghost_prepare($state, $node, $level); } - - thread_entry($state, $node->child, $level + 1); - thread_entry($state, $node->next, $level); } sub load_results {