about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchView.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-08-22 06:06:26 +0000
committerEric Wong <e@yhbt.net>2020-08-23 00:14:02 +0000
commitaad1b9e70529b78d3d7d62b0920ad82ca40f9592 (patch)
tree23c8ace1fbcb52bbf0cf00c0f7a83fa006ba99b5 /lib/PublicInbox/SearchView.pm
parentae546078c5696ac73ad9f48c2c90163febb4a246 (diff)
downloadpublic-inbox-aad1b9e70529b78d3d7d62b0920ad82ca40f9592.tar.gz
Finally, the addition of THREADID for collapsing results
in Xapian lets us emulate the "mairix --threads" feature.
That is, instead of returning only the matching messages,
the entire thread is included in the downloaded mbox.gz

This requires a "public-inbox-index --reindex" to be usable.
Diffstat (limited to 'lib/PublicInbox/SearchView.pm')
-rw-r--r--lib/PublicInbox/SearchView.pm21
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm
index 75e2d39d..dd69564a 100644
--- a/lib/PublicInbox/SearchView.pm
+++ b/lib/PublicInbox/SearchView.pm
@@ -19,10 +19,12 @@ my %rmap_inc;
 sub mbox_results {
         my ($ctx) = @_;
         my $q = PublicInbox::SearchQuery->new($ctx->{qp});
-        my $x = $q->{x};
+        if ($ctx->{env}->{'psgi.input'}->read(my $buf, 3)) {
+                $q->{t} = 1 if $buf =~ /\Ax=[^0]/;
+        }
         require PublicInbox::Mbox;
-        return PublicInbox::Mbox::mbox_all($ctx, $q->{'q'}) if $x eq 'm';
-        sres_top_html($ctx);
+        $q->{x} eq 'm' ? PublicInbox::Mbox::mbox_all($ctx, $q) :
+                        sres_top_html($ctx);
 }
 
 sub sres_top_html {
@@ -46,6 +48,7 @@ sub sres_top_html {
                 offset => $o,
                 mset => 1,
                 relevance => $q->{r},
+                thread => $q->{t},
                 asc => $asc,
         };
         my ($mset, $total, $err, $html);
@@ -151,7 +154,7 @@ sub err_txt {
 
 sub search_nav_top {
         my ($mset, $q, $ctx) = @_;
-        my $m = $q->qs_html(x => 'm', r => undef);
+        my $m = $q->qs_html(x => 'm', r => undef, t => undef);
         my $rv = qq{<form\naction="?$m"\nmethod="post"><pre>};
         my $initial_q = $ctx->{-uxs_retried};
         if (defined $initial_q) {
@@ -186,10 +189,12 @@ sub search_nav_top {
         }
         my $A = $q->qs_html(x => 'A', r => undef);
         $rv .= qq{|<a\nhref="?$A">Atom feed</a>]} .
-                qq{\n\t\t\t\t\t\tdownload: } .
-                # lynx seems to require a name=, here, so just use 'z'
-                qq{<input\ntype=submit\nname=z\nvalue="mbox.gz"/>} .
-                q{</pre></form><pre>};
+                qq{\n\t\t\tdownload mbox.gz: } .
+                # we set name=z w/o using it since it seems required for
+                # lynx (but works fine for w3m).
+                qq{<input\ntype=submit\nname=z\nvalue="results only"/>|} .
+                qq{<input\ntype=submit\nname=x\nvalue="full threads"/>} .
+                qq{</pre></form><pre>};
 }
 
 sub search_nav_bot {