From e2c72e2671d395cbc3fff9cad5c8da4e08367e26 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 21 Sep 2015 11:11:08 +0000 Subject: nntp: speed up XHDR Xref for rtin We could also start displaying Xref in XOVER as rtin seems to prefer it. Anyways this is nearly 100 times faster now and requires no DB changes. --- lib/PublicInbox/NNTP.pm | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox/NNTP.pm') diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 79f2c2f8..d5eb4971 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -371,7 +371,7 @@ found: if ($set_headers) { $s->header_set('Newsgroups', $ng->{name}); $s->header_set('Lines', $s->body =~ tr!\n!\n!); - $s->header_set('Xref', "$ng->{domain} $ng->{name}:$n"); + $s->header_set('Xref', xref($ng, $n)); # must be last if ($set_headers == 2) { @@ -562,6 +562,35 @@ sub xhdr_message_id ($$) { # optimize XHDR Message-ID [range] for slrnpull. } } +sub xref ($$) { + my ($ng, $n) = @_; + "$ng->{domain} $ng->{name}:$n" +} + +sub xhdr_xref ($$) { # optimize XHDR Xref [range] for rtin + my ($self, $range) = @_; + + my $ng = $self->{ng}; + my $mm = $ng->mm; + if (defined $range && $range =~ /\A<(.+)>\z/) { # Message-ID + my $n = $mm->num_for($range); + more($self, '221 Header follows'); + more($self, "<$range> ".xref($ng, $n)) if defined $n; + '.'; + } else { # numeric range + $range = $self->{article} unless defined $range; + my $r = get_range($self, $range); + return $r unless ref $r; + my ($beg, $end) = @$r; + more($self, '221 Header follows'); + $self->long_response($beg, $end, sub { + my ($i) = @_; + my $mid = $mm->mid_for($$i); + more($self, "$$i ".xref($ng, $$i)) if defined $mid; + }); + } +} + sub header_obj_for { my ($srch, $mid) = @_; eval { @@ -612,6 +641,8 @@ sub cmd_xhdr ($$;$) { my $sub = lc $header; if ($sub eq 'message-id') { xhdr_message_id($self, $range); + } elsif ($sub eq 'xref') { + xhdr_xref($self, $range); } elsif ($sub =~ /\A(subject|references|date)\z/ && $ng->search) { xhdr_searchmsg($self, $sub, $range); } else { -- cgit v1.2.3-24-ge0c7