-sub stream_thread ($$) {
- my ($rootset, $ctx) = @_;
- my $ibx = $ctx->{-inbox};
- my @q = map { (0, $_) } @$rootset;
- my ($smsg, $level);
- while (@q) {
- $level = shift @q;
- my $node = shift @q or next;
- my $cl = $level + 1;
- unshift @q, map { ($cl, $_) } @{$node->{children}};
- $smsg = $ibx->smsg_mime($node->{smsg}) and last;
+sub stream_thread_i { # PublicInbox::WwwStream::getline callback
+ my ($ctx) = @_;
+ return unless exists($ctx->{skel});
+ my $nr = $ctx->{nr}++;
+ my ($level, $smsg) = next_in_queue($ctx->{-queue}, $nr);
+
+ $smsg or return
+ join('', thread_adj_level($ctx, 0)) . ${delete $ctx->{skel}};
+
+ my $eml = $ctx->{-inbox}->smsg_eml($smsg) or return
+ ghost_index_entry($ctx, $level, $smsg);
+
+ if ($nr == 0) {
+ $ctx->{-title_html} = ascii_html($smsg->{subject});
+ $ctx->html_top . thread_eml_entry($ctx, $level, $smsg, $eml);
+ } else {
+ thread_eml_entry($ctx, $level, $smsg, $eml);