X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FExtMsg.pm;h=5c8bf5611bff1900747cd3c90c366682ad37985b;hb=af0b0fb7a454470a32c452119d0392e0dedb3fe1;hp=2a0a3e46befc7dfc6688a95954da957cb0f7a815;hpb=8e0aef5068aa71e58d4a049491229f41e6bf19fb;p=public-inbox.git diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index 2a0a3e46..5c8bf561 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 all contributors +# Copyright (C) 2015-2021 all contributors # License: AGPL-3.0+ # # Used by the web interface to link to messages outside of the our @@ -32,8 +32,8 @@ sub PARTIAL_MAX () { 100 } sub search_partial ($$) { my ($ibx, $mid) = @_; return if length($mid) < $MIN_PARTIAL_LEN; - my $srch = $ibx->search or return; - my $opt = { limit => PARTIAL_MAX, mset => 2 }; + my $srch = $ibx->search or return; # NOT ->isrch, we already try ->ALL + my $opt = { limit => PARTIAL_MAX, relevance => -1 }; my @try = ("m:$mid*"); my $chop = $mid; if ($chop =~ s/(\W+)(\w*)\z//) { @@ -76,7 +76,7 @@ sub search_partial ($$) { sub ext_msg_i { my ($other, $ctx) = @_; - return if $other->{name} eq $ctx->{-inbox}->{name} || !$other->base_url; + return if $other->{name} eq $ctx->{ibx}->{name} || !$other->base_url; my $mm = $other->mm or return; @@ -105,9 +105,10 @@ sub ext_msg_step { sub ext_msg_ALL ($) { my ($ctx) = @_; - my $ALL = $ctx->{www}->{pi_config}->ALL or return; - my $by_eidx_key = $ctx->{www}->{pi_config}->{-by_eidx_key}; - my $cur_key = $ctx->{-inbox}->eidx_key; + my $ALL = $ctx->{www}->{pi_cfg}->ALL or return; + my $by_eidx_key = $ctx->{www}->{pi_cfg}->{-by_eidx_key}; + my $cur_key = eval { $ctx->{ibx}->eidx_key } // + return partial_response($ctx); # $cur->{ibx} == $ALL my %seen = ($cur_key => 1); my ($id, $prev); while (my $x = $ALL->over->next_by_mid($ctx->{mid}, \$id, \$prev)) { @@ -123,7 +124,7 @@ sub ext_msg_ALL ($) { return exact($ctx) if $ctx->{found}; # fall back to partial MID matching - for my $ibxish ($ctx->{-inbox}, $ALL) { + for my $ibxish ($ctx->{ibx}, $ALL) { my $mids = search_partial($ibxish, $ctx->{mid}) or next; push @{$ctx->{partial}}, [ $ibxish, $mids ]; last if ($ctx->{n_partial} += scalar(@$mids)) >= PARTIAL_MAX; @@ -139,11 +140,11 @@ sub ext_msg { if ($ctx->{env}->{'pi-httpd.async'}) { require PublicInbox::ConfigIter; my $iter = PublicInbox::ConfigIter->new( - $ctx->{www}->{pi_config}, + $ctx->{www}->{pi_cfg}, \&ext_msg_step, $ctx); $iter->event_step; } else { - $ctx->{www}->{pi_config}->each_inbox(\&ext_msg_i, $ctx); + $ctx->{www}->{pi_cfg}->each_inbox(\&ext_msg_i, $ctx); finalize_exact($ctx); } }; @@ -169,7 +170,7 @@ sub finalize_exact { # fall back to partial MID matching my $mid = $ctx->{mid}; - my $cur = $ctx->{-inbox}; + my $cur = $ctx->{ibx}; my $mids = search_partial($cur, $mid); if ($mids) { $ctx->{n_partial} = scalar(@$mids); @@ -200,7 +201,7 @@ sub partial_response ($) { my $es = $n_partial == 1 ? '' : 'es'; $n_partial .= '+' if ($n_partial == PARTIAL_MAX); $s .= "\n$n_partial partial match$es found:\n\n"; - my $cur_name = $ctx->{-inbox}->{name}; + my $cur_name = $ctx->{ibx}->{name}; foreach my $pair (@{$ctx->{partial}}) { my ($ibx, $res) = @$pair; my $env = $ctx->{env} if $ibx->{name} eq $cur_name;