From 5301a9d1b07ad5af1b62df870b7181461603f460 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 20 Aug 2020 20:24:57 +0000 Subject: search: add mset_to_artnums method We can avoid importing mdocid() in several places by using this method, simplifying callers. --- lib/PublicInbox/ExtMsg.pm | 4 +--- lib/PublicInbox/IMAP.pm | 4 +--- lib/PublicInbox/Mbox.pm | 7 ++----- lib/PublicInbox/Search.pm | 6 ++++++ lib/PublicInbox/SearchView.pm | 6 ++---- 5 files changed, 12 insertions(+), 15 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index 5c23dc31..65892161 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -11,7 +11,6 @@ use warnings; use PublicInbox::Hval qw(ascii_html prurl mid_href); use PublicInbox::WwwStream qw(html_oneshot); use PublicInbox::Smsg; -use PublicInbox::Search qw(mdocid); our $MIN_PARTIAL_LEN = 16; # TODO: user-configurable @@ -61,7 +60,6 @@ sub search_partial ($$) { } } - my $n = $srch->{nshard} // 1; foreach my $m (@try) { # If Xapian can't handle the wildcard since it # has too many results. $@ can be @@ -70,7 +68,7 @@ sub search_partial ($$) { my $mset = eval { $srch->query($m, $opt) } or next; my @mids = map { $_->{mid} - } @{$ibx->over->get_all(map { mdocid($n, $_) } $mset->items)}; + } @{$ibx->over->get_all(@{$srch->mset_to_artnums($mset)})}; return \@mids if scalar(@mids); } } diff --git a/lib/PublicInbox/IMAP.pm b/lib/PublicInbox/IMAP.pm index 562c59d4..abdb8fec 100644 --- a/lib/PublicInbox/IMAP.pm +++ b/lib/PublicInbox/IMAP.pm @@ -40,7 +40,6 @@ use PublicInbox::Syscall qw(EPOLLIN EPOLLONESHOT); use PublicInbox::GitAsyncCat; use Text::ParseWords qw(parse_line); use Errno qw(EAGAIN); -use PublicInbox::Search qw(mdocid); use PublicInbox::IMAPsearchqp; my $Address; @@ -1188,9 +1187,8 @@ sub refill_xap ($$$$) { my ($beg, $end) = @$range_info; my $srch = $self->{ibx}->search; my $opt = { mset => 2, limit => 1000 }; - my $nshard = $srch->{nshard} // 1; my $mset = $srch->query("$q uid:$beg..$end", $opt); - @$uids = map { mdocid($nshard, $_) } $mset->items; + @$uids = @{$srch->mset_to_artnums($mset)}; if (@$uids) { $range_info->[0] = $uids->[-1] + 1; # update $beg return; # possibly more diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm index 0fa9a38d..873ff7be 100644 --- a/lib/PublicInbox/Mbox.pm +++ b/lib/PublicInbox/Mbox.pm @@ -10,7 +10,6 @@ use PublicInbox::MID qw/mid_escape/; use PublicInbox::Hval qw/to_filename/; use PublicInbox::Smsg; use PublicInbox::Eml; -use PublicInbox::Search qw(mdocid); # called by PSGI server as body response # this gets called twice for every message, once to return the header, @@ -217,8 +216,7 @@ sub results_cb { my $mset = $srch->query($ctx->{query}, $ctx->{qopts}); my $size = $mset->size or return; $ctx->{qopts}->{offset} += $size; - my $nshard = $srch->{nshard} // 1; - $ctx->{ids} = [ map { mdocid($nshard, $_) } $mset->items ]; + $ctx->{ids} = $srch->mset_to_artnums($mset); } } @@ -234,8 +232,7 @@ sub mbox_all { return [404, [qw(Content-Type text/plain)], ["No results found\n"]]; $ctx->{query} = $query; - my $nshard = $srch->{nshard} // 1; - $ctx->{ids} = [ map { mdocid($nshard, $_) } $mset->items ]; + $ctx->{ids} = $srch->mset_to_artnums($mset); require PublicInbox::MboxGz; PublicInbox::MboxGz::mbox_gz($ctx, \&results_cb, 'results-'.$query); } diff --git a/lib/PublicInbox/Search.pm b/lib/PublicInbox/Search.pm index 1c648299..c18e19d4 100644 --- a/lib/PublicInbox/Search.pm +++ b/lib/PublicInbox/Search.pm @@ -219,6 +219,12 @@ sub mdocid { int(($docid - 1) / $nshard) + 1; } +sub mset_to_artnums { + my ($self, $mset) = @_; + my $nshard = $self->{nshard} // 1; + [ map { mdocid($nshard, $_) } $mset->items ]; +} + sub xdb ($) { my ($self) = @_; $self->{xdb} ||= do { diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm index ef1b9767..aa8fa037 100644 --- a/lib/PublicInbox/SearchView.pm +++ b/lib/PublicInbox/SearchView.pm @@ -91,9 +91,8 @@ sub mset_summary { my $pfx = ' ' x $pad; my $res = \($ctx->{-html_tip}); my $ibx = $ctx->{-inbox}; - my $nshard = $ibx->search->{nshard} // 1; my $obfs_ibx = $ibx->{obfuscate} ? $ibx : undef; - my @nums = map { mdocid($nshard, $_) } $mset->items; + my @nums = @{$ibx->search->mset_to_artnums($mset)}; my %num2msg = map { $_->{num} => $_ } @{$ibx->over->get_all(@nums)}; foreach my $m ($mset->items) { @@ -316,8 +315,7 @@ sub ctx_prepare { sub adump { my ($cb, $mset, $q, $ctx) = @_; - my $nshard = $ctx->{-inbox}->search->{nshard} // 1; - $ctx->{ids} = [ map { mdocid($nshard, $_) } $mset->items ]; + $ctx->{ids} = $ctx->{-inbox}->search->mset_to_artnums($mset); $ctx->{search_query} = $q; # used by WwwAtomStream::atom_header PublicInbox::WwwAtomStream->response($ctx, 200, \&adump_i); } -- cgit v1.2.3-24-ge0c7