X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FNNTP.pm;h=95ac7d5fd7ccaddf2dbf505241e006fdf1251ec9;hb=59a7f5c908dc0e898e8925bcd06c5e526f86d063;hp=b80ab4a81c01da7f9f8e3f77f282a236dee6f8d1;hpb=207b89615a1a0c06dd9afc94ca2200b889dc35e1;p=public-inbox.git diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index b80ab4a8..95ac7d5f 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -717,6 +717,20 @@ sub over_header_for { $smsg->{$field}; } +sub searchmsg_range_i { + my ($self, $beg, $end, $field) = @_; + my $over = $self->{ng}->over; + my $msgs = $over->query_xover($$beg, $end); + scalar(@$msgs) or return; + my $tmp = ''; + foreach my $s (@$msgs) { + $tmp .= $s->{num} . ' ' . $s->$field . "\r\n"; + } + utf8::encode($tmp); + $self->msg_more($tmp); + $$beg = $msgs->[-1]->{num} + 1; +} + sub hdr_searchmsg ($$$$) { my ($self, $xhdr, $field, $range) = @_; if (defined $range && $range =~ /\A<(.+)>\z/) { # Message-ID @@ -726,24 +740,10 @@ sub hdr_searchmsg ($$$$) { hdr_mid_response($self, $xhdr, $ng, $n, $range, $v); } else { # numeric range $range = $self->{article} unless defined $range; - my $over = $self->{ng}->over; - my $mm = $self->{ng}->mm; my $r = get_range($self, $range); return $r unless ref $r; - my ($beg, $end) = @$r; more($self, $xhdr ? r221 : r225); - my $cur = $$beg; - long_response($self, sub { - my $msgs = $over->query_xover($cur, $end); - my $nr = scalar @$msgs or return; - my $tmp = ''; - foreach my $s (@$msgs) { - $tmp .= $s->{num} . ' ' . $s->$field . "\r\n"; - } - utf8::encode($tmp); - $self->msg_more($tmp); - $cur = $msgs->[-1]->{num} + 1; - }); + long_response($self, \&searchmsg_range_i, @$r, $field); } } @@ -803,6 +803,13 @@ sub hdr_mid_response ($$$$$$) { undef; } +sub xrover_i { + my ($self, $beg, $end) = @_; + my $h = over_header_for($self->{ng}->over, $$beg, 'references'); + more($self, "$$beg $h") if defined($h); + $$beg++ < $end; +} + sub cmd_xrover ($;$) { my ($self, $range) = @_; my $ng = $self->{ng} or return '412 no newsgroup selected'; @@ -812,16 +819,8 @@ sub cmd_xrover ($;$) { $range = $self->{article} unless defined $range; my $r = get_range($self, $range); return $r unless ref $r; - my ($beg, $end) = @$r; - my $mm = $ng->mm; - my $over = $ng->over; more($self, '224 Overview information follows'); - - long_response($self, sub { - my $h = over_header_for($over, $$beg, 'references'); - more($self, "$$beg $h") if defined($h); - $$beg++ < $end; - }); + long_response($self, \&xrover_i, @$r); } sub over_line ($$$$) {