about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/SearchView.pm17
-rw-r--r--lib/PublicInbox/View.pm11
2 files changed, 12 insertions, 16 deletions
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm
index 6aa815ca..8cffdedb 100644
--- a/lib/PublicInbox/SearchView.pm
+++ b/lib/PublicInbox/SearchView.pm
@@ -256,12 +256,10 @@ sub search_nav_bot {
 }
 
 sub sort_relevance {
-        my ($pct) = @_;
-        sub {
-                [ sort { (eval { $pct->{$b->topmost->{id}} } || 0)
-                                <=>
-                        (eval { $pct->{$a->topmost->{id}} } || 0)
-        } @{$_[0]} ] };
+        [ sort {
+                (eval { $b->topmost->{smsg}->{pct} } // 0) <=>
+                (eval { $a->topmost->{smsg}->{pct} } // 0)
+        } @{$_[0]} ]
 }
 
 sub get_pct ($) {
@@ -274,16 +272,15 @@ sub get_pct ($) {
 
 sub mset_thread {
         my ($ctx, $mset, $q) = @_;
-        my %pct;
         my $msgs = $ctx->{-inbox}->search->retry_reopen(sub { [ map {
                 my $i = $_;
                 my $smsg = PublicInbox::SearchMsg->load_doc($i->get_document);
-                $pct{$smsg->mid} = get_pct($i);
+                $smsg->{pct} = get_pct($i);
                 $smsg;
         } ($mset->items) ]});
         my $r = $q->{r};
         my $rootset = PublicInbox::SearchThread::thread($msgs,
-                $r ? sort_relevance(\%pct) : \&PublicInbox::View::sort_ds,
+                $r ? \&sort_relevance : \&PublicInbox::View::sort_ds,
                 $ctx);
         my $skel = search_nav_bot($mset, $q). "<pre>";
         $ctx->{-upfx} = '';
@@ -291,7 +288,7 @@ sub mset_thread {
         $ctx->{cur_level} = 0;
         $ctx->{dst} = \$skel;
         $ctx->{mapping} = {};
-        $ctx->{pct} = \%pct;
+        $ctx->{searchview} = 1;
         $ctx->{prev_attr} = '';
         $ctx->{prev_level} = 0;
         $ctx->{s_nr} = scalar(@$msgs).'+ results';
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 5c64441a..6f827754 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -279,8 +279,8 @@ sub index_entry {
                 " <a\nhref=\"${mhref}#R\">reply</a>";
 
         my $hr;
-        if (my $pct = $ctx->{pct}) { # used by SearchView.pm
-                $rv .= "\t[relevance $pct->{$mid_raw}%]";
+        if (defined(my $pct = $smsg->{pct})) { # used by SearchView.pm
+                $rv .= "\t[relevance $pct%]";
                 $hr = 1;
         } elsif ($mapping) {
                 my $nested = 'nested';
@@ -961,9 +961,8 @@ sub skel_dump {
 
         my $d = fmt_ts($smsg->{ds});
         my $unmatched; # if lazy-loaded by SearchThread::Msg::visible()
-        if (my $pct = $ctx->{pct}) {
-                $pct = $pct->{$smsg->{mid}};
-                if (defined $pct) {
+        if (exists $ctx->{searchview}) {
+                if (defined(my $pct = $smsg->{pct})) {
                         $d .= (sprintf(' % 2u', $pct) . '%');
                 } else {
                         $unmatched = 1;
@@ -1031,7 +1030,7 @@ sub _skel_ghost {
 
         my $mid = $node->{id};
         my $d = '     [not found] ';
-        $d .= '    '  if exists $ctx->{pct};
+        $d .= '    '  if exists $ctx->{searchview};
         $d .= indent_for($level) . th_pfx($level);
         my $upfx = $ctx->{-upfx};
         my $m = PublicInbox::Hval->new_msgid($mid);