From 123031737a09edb3297e0fc6ea9e566fc2fecdf5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 14 Oct 2016 09:00:01 +0000 Subject: thread: reinstates stable ordering when ghosts are present This reverts commit 3c9dd6619f825f0515e7e4afa1bd55c99c1a68d3 ("thread: fix sorting without topmost") and reinstates the "topmost" routine for sorting purposes. --- lib/PublicInbox/SearchThread.pm | 10 ++++++++++ lib/PublicInbox/SearchView.pm | 5 +++-- lib/PublicInbox/View.pm | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/PublicInbox/SearchThread.pm b/lib/PublicInbox/SearchThread.pm index 24a56d2d..fe70406b 100644 --- a/lib/PublicInbox/SearchThread.pm +++ b/lib/PublicInbox/SearchThread.pm @@ -98,6 +98,16 @@ sub new { }, $_[0]; } +sub topmost { + my ($self) = @_; + my @q = ($self); + while (my $cont = shift @q) { + return $cont if $cont->{smsg}; + push @q, values %{$cont->{children}}; + } + undef; +} + sub add_child { my ($self, $child) = @_; croak "Cowardly refusing to become my own parent: $self" diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm index cfe6dfff..ebeb41f7 100644 --- a/lib/PublicInbox/SearchView.pm +++ b/lib/PublicInbox/SearchView.pm @@ -155,8 +155,9 @@ sub mset_thread { $th->thread; if ($q->{r}) { # order by relevance $th->order(sub { - [ sort { ( $pct{$b->{id}} || 0) <=> - ( $pct{$a->{id}} || 0) + [ sort { (eval { $pct{$b->topmost->{id}} } || 0) + <=> + (eval { $pct{$a->topmost->{id}} } || 0) } @{$_[0]} ]; }); } else { # order by time (default for threaded view) diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 0f00458e..5d5808fa 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -852,8 +852,8 @@ sub skel_dump { sub sort_ts { [ sort { - (eval { $a->{smsg}->ts } || 0) <=> - (eval { $b->{smsg}->ts } || 0) + (eval { $a->topmost->{smsg}->ts } || 0) <=> + (eval { $b->topmost->{smsg}->ts } || 0) } @{$_[0]} ]; } -- cgit v1.2.3-24-ge0c7