diff options
-rw-r--r-- | lib/PublicInbox/SearchView.pm | 19 | ||||
-rw-r--r-- | lib/PublicInbox/View.pm | 4 |
2 files changed, 11 insertions, 12 deletions
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm index ab0ff19a..e94a1dff 100644 --- a/lib/PublicInbox/SearchView.pm +++ b/lib/PublicInbox/SearchView.pm @@ -150,13 +150,8 @@ sub tdump { $m; } ($mset->items); - require PublicInbox::Thread; - my $th = PublicInbox::Thread->new(@m); - { - no warnings 'once'; - $Mail::Thread::nosubject = 0; - } - $th->thread; + my @rootset; + my $th = PublicInbox::View::thread_results(\@m, 0, $q->{r}); if ($q->{r}) { $th->order(sub { sort { (eval { $pct{$b->topmost->messageid} } || 0) @@ -164,9 +159,13 @@ sub tdump { (eval { $pct{$a->topmost->messageid} } || 0) } @_; }); + @rootset = $th->rootset; } else { - no warnings 'once'; - $th->order(*PublicInbox::View::rsort_ts); + @rootset = sort { + (eval { $b->topmost->message->header('X-PI-TS') } || 0) + <=> + (eval { $a->topmost->message->header('X-PI-TS') } || 0) + } $th->rootset; } my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir}); @@ -178,7 +177,7 @@ sub tdump { fh => $fh, }; $ctx->{searchview} = 1; - tdump_ent($git, $state, $_, 0) for $th->rootset; + tdump_ent($git, $state, $_, 0) for @rootset; PublicInbox::View::thread_adj_level($state, 0); Email::Address->purge_cache; diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index f58099d4..ebe82b49 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -726,7 +726,7 @@ sub msg_timestamp { } sub thread_results { - my ($msgs, $nosubject) = @_; + my ($msgs, $nosubject, $nosort) = @_; require PublicInbox::Thread; my $th = PublicInbox::Thread->new(@$msgs); @@ -740,7 +740,7 @@ sub thread_results { # Keep ghosts with only a single direct child: $Mail::Thread::noprune = 1; $th->thread; - $th->order(*sort_ts); + $th->order(*sort_ts) unless $nosort; $th } |