X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FNNTP.pm;h=ff6d89587756fa70bd8708f5a1c716a91b6d11f7;hb=f91753f00b760c0e06eb0384792e5b18bd99bb0f;hp=895e5023a50b702c17df31f82e86f1e203d97f9c;hpb=fa3283debd81490ac1d5e0895fc2d8968e1f110b;p=public-inbox.git diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 895e5023..ff6d8958 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -331,22 +331,20 @@ sub cmd_newnews ($$$$;$$) { }; return '.' unless @srch; - $ts .= '..'; - my $opts = { asc => 1, limit => 1000, offset => 0 }; + my $prev = 0; long_response($self, 0, long_response_limit, sub { my ($i) = @_; my $srch = $srch[0]; - my $res = $srch->query($ts, $opts); - my $msgs = $res->{msgs}; - if (my $nr = scalar @$msgs) { + my $msgs = $srch->query_ts($ts, $prev); + if (scalar @$msgs) { more($self, '<' . join(">\r\n<", map { $_->mid } @$msgs ). '>'); - $opts->{offset} += $nr; + $prev = $msgs->[-1]->{num}; } else { shift @srch; if (@srch) { # continue onto next newsgroup - $opts->{offset} = 0; + $prev = 0; } else { # break out of the long response. $$i = long_response_limit; } @@ -463,7 +461,7 @@ find_mid: defined $mid or return $err; } found: - my $smsg = $ng->search->lookup_article($n) or return $err; + my $smsg = $ng->search->{over_ro}->get_art($n) or return $err; my $msg = $ng->msg_by_smsg($smsg) or return $err; my $s = Email::Simple->new($msg); if ($set_headers) { @@ -584,7 +582,7 @@ sub long_response ($$$$) { $self->{long_res} = sub { # limit our own running time for fairness with other # clients and to avoid buffering too much: - my $lim = 100; + my $lim = $end == long_response_limit ? 1 : 100; my $err; do { @@ -692,8 +690,9 @@ sub hdr_xref ($$$) { # optimize XHDR Xref [range] for rtin sub search_header_for { my ($srch, $num, $field) = @_; - my $smsg = $srch->lookup_article($num) or return; - $smsg->$field; + my $smsg = $srch->{over_ro}->get_art($num) or return; + return PublicInbox::SearchMsg::date($smsg) if $field eq 'date'; + $smsg->{$field}; } sub hdr_searchmsg ($$$$) { @@ -711,21 +710,19 @@ sub hdr_searchmsg ($$$$) { return $r unless ref $r; my ($beg, $end) = @$r; more($self, $xhdr ? r221 : r225); - my $off = 0; - long_response($self, $beg, $end, sub { + my $cur = $beg; + long_response($self, 0, long_response_limit, sub { my ($i) = @_; - my $res = $srch->query_xover($beg, $end, $off); - my $msgs = $res->{msgs}; - my $nr = scalar @$msgs or return; - $off += $nr; + my $msgs = $srch->query_xover($cur, $end); + my $nr = scalar @$msgs or + return ($$i = long_response_limit); my $tmp = ''; foreach my $s (@$msgs) { $tmp .= $s->num . ' ' . $s->$field . "\r\n"; } utf8::encode($tmp); do_more($self, $tmp); - # -1 to adjust for implicit increment in long_response - $$i = $nr ? $$i + $nr - 1 : long_response_limit; + $cur = $msgs->[-1]->{num} + 1; }); } } @@ -816,10 +813,10 @@ sub over_line ($$) { $smsg->{subject}, $smsg->{from}, PublicInbox::SearchMsg::date($smsg), - '<'.PublicInbox::SearchMsg::mid($smsg).'>', + "<$smsg->{mid}>", $smsg->{references}, - PublicInbox::SearchMsg::bytes($smsg), - PublicInbox::SearchMsg::lines($smsg)); + $smsg->{bytes}, + $smsg->{lines}); utf8::encode($s); $s } @@ -829,7 +826,7 @@ sub cmd_over ($;$) { if ($range && $range =~ /\A<(.+)>\z/) { my ($ng, $n) = mid_lookup($self, $1); defined $n or return r430; - my $smsg = $ng->search->lookup_article($n) or return r430; + my $smsg = $ng->search->{over_ro}->get_art($n) or return r430; more($self, '224 Overview information follows (multi-line)'); # Only set article number column if it's the current group @@ -850,21 +847,18 @@ sub cmd_xover ($;$) { my ($beg, $end) = @$r; more($self, "224 Overview information follows for $beg to $end"); my $srch = $self->{ng}->search; - my $off = 0; - long_response($self, $beg, $end, sub { + my $cur = $beg; + long_response($self, 0, long_response_limit, sub { my ($i) = @_; - my $res = $srch->query_xover($beg, $end, $off); - my $msgs = $res->{msgs}; - my $nr = scalar @$msgs or return; - $off += $nr; + my $msgs = $srch->query_xover($cur, $end); + my $nr = scalar @$msgs or return ($$i = long_response_limit); # OVERVIEW.FMT more($self, join("\r\n", map { - over_line(PublicInbox::SearchMsg::num($_), $_); + over_line($_->{num}, $_); } @$msgs)); - - # -1 to adjust for implicit increment in long_response - $$i = $nr ? $$i + $nr - 1 : long_response_limit; + $cur = $msgs->[-1]->{num} + 1; + 1; }); }