]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/NNTP.pm
nntp: cmd_xrover: use named sub for long_response
[public-inbox.git] / lib / PublicInbox / NNTP.pm
index b80ab4a81c01da7f9f8e3f77f282a236dee6f8d1..95ac7d5fd7ccaddf2dbf505241e006fdf1251ec9 100644 (file)
@@ -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 ($$$$) {