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
}
}
- my $n = $srch->{nshard} // 1;
foreach my $m (@try) {
# If Xapian can't handle the wildcard since it
# has too many results. $@ can be
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);
}
}
use PublicInbox::GitAsyncCat;
use Text::ParseWords qw(parse_line);
use Errno qw(EAGAIN);
-use PublicInbox::Search qw(mdocid);
use PublicInbox::IMAPsearchqp;
my $Address;
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
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,
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);
}
}
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);
}
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 {
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) {
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);
}