- my $qh = $query->as_html;
- my $A = $q->qs_html(x => 'A', r => undef);
- my $res = '<html><head>' . PublicInbox::Hval::STYLE .
- "<title>$qh - search results</title>" .
- qq{<link\nrel=alternate\ntitle="Atom feed"\n} .
- qq!href="?$A"\ntype="application/atom+xml"/></head>! .
- qq{<body><form\naction="">} .
- qq{<input\nname=q\nvalue="$qh"\ntype=text />};
-
- $res .= qq{<input\ntype=hidden\nname=r />} if $q->{r};
- if (my $x = $q->{x}) {
- my $xh = PublicInbox::Hval->new_oneline($x)->as_html;
- $res .= qq{<input\ntype=hidden\nname=x\nvalue="$xh" />};
+sub mset_thread {
+ my ($ctx, $mset, $q) = @_;
+ my $ibx = $ctx->{-inbox};
+ my $msgs = $ibx->search->retry_reopen(\&load_msgs, $mset);
+ my $r = $q->{r};
+ my $rootset = PublicInbox::SearchThread::thread($msgs,
+ $r ? \&sort_relevance : \&PublicInbox::View::sort_ds,
+ $ctx);
+ my $skel = search_nav_bot($mset, $q). "<pre>";
+ $ctx->{-upfx} = '';
+ $ctx->{anchor_idx} = 1;
+ $ctx->{cur_level} = 0;
+ $ctx->{skel} = \$skel;
+ $ctx->{mapping} = {};
+ $ctx->{searchview} = 1;
+ $ctx->{prev_attr} = '';
+ $ctx->{prev_level} = 0;
+ $ctx->{s_nr} = scalar(@$msgs).'+ results';
+
+ # reduce hash lookups in skel_dump
+ $ctx->{-obfs_ibx} = $ibx->{obfuscate} ? $ibx : undef;
+ PublicInbox::View::walk_thread($rootset, $ctx,
+ \&PublicInbox::View::pre_thread);
+
+ @$msgs = reverse @$msgs if $r;
+ $ctx->{msgs} = $msgs;
+ \&mset_thread_i;
+}
+
+# callback for PublicInbox::WwwStream::getline
+sub mset_thread_i {
+ my ($nr, $ctx) = @_;
+ my $msgs = $ctx->{msgs} or return;
+ while (my $smsg = pop @$msgs) {
+ $ctx->{-inbox}->smsg_mime($smsg) or next;
+ return PublicInbox::View::index_entry($smsg, $ctx,
+ scalar @$msgs);