- my $m = PublicInbox::SearchMsg->load_doc($i->get_document);
- $pct{$m->mid} = $i->get_percent;
- $m = $m->mini_mime;
- $m;
- } ($mset->items);
-
- my @rootset;
- my $th = PublicInbox::Thread->new(@m);
- $th->thread;
- if ($q->{r}) { # order by relevance
- $th->order(sub {
- sort { (eval { $pct{$b->topmost->messageid} } || 0)
- <=>
- (eval { $pct{$a->topmost->messageid} } || 0)
- } @_;
- });
- } else { # order by time (default for threaded view)
- $th->order(*PublicInbox::View::sort_ts);
- }
- @rootset = $th->rootset;
- my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir});
- my $state = {
- ctx => $ctx,
- anchor_idx => 0,
- pct => \%pct,
- cur_level => 0,
- fh => $fh,
+ my $smsg = PublicInbox::SearchMsg->load_doc($i->get_document);
+ $pct{$smsg->mid} = $i->get_percent;
+ $smsg;
+ } ($mset->items) ]});
+ my $r = $q->{r};
+ my $rootset = PublicInbox::SearchThread::thread($msgs,
+ $r ? sort_relevance(\%pct) : *PublicInbox::View::sort_ds,
+ $srch);
+ my $skel = search_nav_bot($mset, $q). "<pre>";
+ my $inbox = $ctx->{-inbox};
+ $ctx->{-upfx} = '';
+ $ctx->{anchor_idx} = 1;
+ $ctx->{cur_level} = 0;
+ $ctx->{dst} = \$skel;
+ $ctx->{mapping} = {};
+ $ctx->{pct} = \%pct;
+ $ctx->{prev_attr} = '';
+ $ctx->{prev_level} = 0;
+ $ctx->{seen} = {};
+ $ctx->{s_nr} = scalar(@$msgs).'+ results';
+
+ # reduce hash lookups in skel_dump
+ $ctx->{-obfuscate} = $ctx->{-inbox}->{obfuscate};
+ PublicInbox::View::walk_thread($rootset, $ctx,
+ *PublicInbox::View::pre_thread);
+
+ @$msgs = reverse @$msgs if $r;
+ my $mime;
+ sub {
+ return unless $msgs;
+ while ($mime = pop @$msgs) {
+ $mime = $inbox->msg_by_smsg($mime) and last;
+ }
+ if ($mime) {
+ $mime = PublicInbox::MIME->new($mime);
+ return PublicInbox::View::index_entry($mime, $ctx,
+ scalar @$msgs);
+ }
+ $msgs = undef;
+ $skel .= "\n</pre>";