about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/SearchView.pm17
-rw-r--r--lib/PublicInbox/Thread.pm14
-rw-r--r--lib/PublicInbox/View.pm16
3 files changed, 24 insertions, 23 deletions
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm
index 41d32007..c0cd1ffd 100644
--- a/lib/PublicInbox/SearchView.pm
+++ b/lib/PublicInbox/SearchView.pm
@@ -11,6 +11,7 @@ use PublicInbox::View;
 use PublicInbox::MID qw(mid2path mid_clean mid_mime);
 use Email::MIME;
 require PublicInbox::Git;
+require PublicInbox::Thread;
 our $LIM = 50;
 
 sub sres_top_html {
@@ -151,23 +152,19 @@ sub tdump {
         } ($mset->items);
 
         my @rootset;
-        my $th = PublicInbox::View::thread_results(\@m, 0, $q->{r});
-        if ($q->{r}) {
+        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)
                         } @_;
                 });
-                @rootset = $th->rootset;
-        } else {
-                @rootset = sort {
-                        (eval { $b->topmost->message->header('X-PI-TS') } || 0)
-                                <=>
-                        (eval { $a->topmost->message->header('X-PI-TS') } || 0)
-                } $th->rootset;
+        } 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,
diff --git a/lib/PublicInbox/Thread.pm b/lib/PublicInbox/Thread.pm
index 781fffff..44a565ad 100644
--- a/lib/PublicInbox/Thread.pm
+++ b/lib/PublicInbox/Thread.pm
@@ -12,6 +12,20 @@ package PublicInbox::Thread;
 use strict;
 use warnings;
 use base qw(Mail::Thread);
+# WARNING! both these Mail::Thread knobs were found by inspecting
+# the Mail::Thread 2.55 source code, and we have some monkey patches
+# in PublicInbox::Thread to fix memory leaks.  Since Mail::Thread
+# appears unmaintained, I suppose it's safe to depend on these
+# variables for now:
+{
+        no warnings 'once';
+        # we want strict threads to expose (and hopefully discourage)
+        # use of broken email clients
+        $Mail::Thread::nosubject = 1;
+        # Keep ghosts with only a single direct child,
+        # don't hide that there may be missing messages.
+        $Mail::Thread::noprune = 1;
+}
 
 if ($Mail::Thread::VERSION <= 2.55) {
         eval q(sub _container_class { 'PublicInbox::Thread::Container' });
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 63810dcb..70eb44e5 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -670,21 +670,11 @@ sub msg_timestamp {
 }
 
 sub thread_results {
-        my ($msgs, $nosubject, $nosort) = @_;
+        my ($msgs) = @_;
         require PublicInbox::Thread;
         my $th = PublicInbox::Thread->new(@$msgs);
-
-        # WARNING! both these Mail::Thread knobs were found by inspecting
-        # the Mail::Thread 2.55 source code, and we have some monkey patches
-        # in PublicInbox::Thread to fix memory leaks.  Since Mail::Thread
-        # appears unmaintained, I suppose it's safe to depend on these
-        # variables for now:
-        no warnings 'once';
-        $Mail::Thread::nosubject = $nosubject;
-        # Keep ghosts with only a single direct child:
-        $Mail::Thread::noprune = 1;
         $th->thread;
-        $th->order(*sort_ts) unless $nosort;
+        $th->order(*sort_ts);
         $th
 }
 
@@ -879,7 +869,7 @@ sub emit_index_topics {
                 my $sres = $state->{srch}->query('', \%opts);
                 my $nr = scalar @{$sres->{msgs}} or last;
 
-                for (thread_results(load_results($sres), 1)->rootset) {
+                for (thread_results(load_results($sres))->rootset) {
                         add_topic($state, $_, 0);
                 }
                 $opts{offset} += $nr;