]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SearchView.pm
isearch: emulate per-inbox search with ->ALL
[public-inbox.git] / lib / PublicInbox / SearchView.pm
index 892e8fdae14038098bc9cd9ae21f5dcd97b2a1fc..f3c961264da597a89b84695b79b1b49baa02deb0 100644 (file)
@@ -14,7 +14,7 @@ use PublicInbox::WwwAtomStream;
 use PublicInbox::WwwStream qw(html_oneshot);
 use PublicInbox::SearchThread;
 use PublicInbox::SearchQuery;
-use PublicInbox::Search qw(mdocid);
+use PublicInbox::Search;
 my %rmap_inc;
 
 sub mbox_results {
@@ -30,7 +30,7 @@ sub mbox_results {
 
 sub sres_top_html {
        my ($ctx) = @_;
-       my $srch = $ctx->{-inbox}->search or
+       my $srch = $ctx->{-inbox}->isrch or
                return PublicInbox::WWW::need($ctx, 'Search');
        my $q = PublicInbox::SearchQuery->new($ctx->{qp});
        my $x = $q->{x};
@@ -47,7 +47,6 @@ sub sres_top_html {
        my $opts = {
                limit => $q->{l},
                offset => $o,
-               mset => 1,
                relevance => $q->{r},
                thread => $q->{t},
                asc => $asc,
@@ -55,7 +54,7 @@ sub sres_top_html {
        my ($mset, $total, $err, $html);
 retry:
        eval {
-               $mset = $srch->query($query, $opts);
+               $mset = $srch->mset($query, $opts);
                $total = $mset->get_matches_estimated;
        };
        $err = $@;
@@ -96,7 +95,7 @@ sub mset_summary {
        my $res = \($ctx->{-html_tip});
        my $ibx = $ctx->{-inbox};
        my $obfs_ibx = $ibx->{obfuscate} ? $ibx : undef;
-       my @nums = @{$ibx->search->mset_to_artnums($mset)};
+       my @nums = @{$ibx->isrch->mset_to_artnums($mset)};
        my %num2msg = map { $_->{num} => $_ } @{$ibx->over->get_all(@nums)};
        my ($min, $max);
 
@@ -202,7 +201,7 @@ sub search_nav_top {
        }
        my $A = $q->qs_html(x => 'A', r => undef);
        $rv .= qq{|<a\nhref="?$A">Atom feed</a>]};
-       if ($ctx->{-inbox}->search->has_threadid) {
+       if ($ctx->{-inbox}->isrch->has_threadid) {
                $rv .= 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).
@@ -288,13 +287,12 @@ sub get_pct ($) {
 sub mset_thread {
        my ($ctx, $mset, $q) = @_;
        my $ibx = $ctx->{-inbox};
-       my $nshard = $ibx->search->{nshard} // 1;
-       my %pct = map { mdocid($nshard, $_) => get_pct($_) } $mset->items;
-       my $msgs = $ibx->over->get_all(keys %pct);
-       $_->{pct} = $pct{$_->{num}} for @$msgs;
+       my @pct = map { get_pct($_) } $mset->items;
+       my $msgs = $ibx->isrch->mset_to_smsg($ibx, $mset);
+       my $i = 0;
+       $_->{pct} = $pct[$i++] for @$msgs;
        my $r = $q->{r};
        if ($r) { # for descriptions in search_nav_bot
-               my @pct = values %pct;
                $q->{-min_pct} = min(@pct);
                $q->{-max_pct} = max(@pct);
        }
@@ -355,7 +353,7 @@ sub ctx_prepare {
 
 sub adump {
        my ($cb, $mset, $q, $ctx) = @_;
-       $ctx->{ids} = $ctx->{-inbox}->search->mset_to_artnums($mset);
+       $ctx->{ids} = $ctx->{-inbox}->isrch->mset_to_artnums($mset);
        $ctx->{search_query} = $q; # used by WwwAtomStream::atom_header
        PublicInbox::WwwAtomStream->response($ctx, 200, \&adump_i);
 }