use PublicInbox::Search;
use PublicInbox::Msgmap;
use PublicInbox::Git;
-use PublicInbox::MID qw(mid2path);
require PublicInbox::EvCleanup;
use Email::Simple;
use POSIX qw(strftime);
defined $mid or return $err;
}
found:
- my $o = 'HEAD:' . mid2path($mid);
my $bytes;
- my $s = eval { Email::Simple->new($ng->git->cat_file($o, \$bytes)) };
- return $err unless $s;
+ my $s = eval { $ng->msg_by_mid($mid, \$bytes) } or return $err;
+ $s = Email::Simple->new($s);
my $lines;
if ($set_headers) {
set_nntp_headers($s->header_obj, $ng, $n, $mid);
$self->{article} = $art if defined $art && $art =~ /\A\d+\z/;
}
+sub _header ($) {
+ my $hdr = $_[0]->header_obj->as_string;
+ utf8::encode($hdr);
+ $hdr
+}
+
sub cmd_article ($;$) {
my ($self, $art) = @_;
my $r = art_lookup($self, $art, 1);
my ($n, $mid, $s) = @$r;
set_art($self, $art);
more($self, "220 $n <$mid> article retrieved - head and body follow");
- do_more($self, $s->header_obj->as_string);
+ do_more($self, _header($s));
do_more($self, "\r\n");
simple_body_write($self, $s);
}
my ($n, $mid, $s) = @$r;
set_art($self, $art);
more($self, "221 $n <$mid> article retrieved - head follows");
- do_more($self, $s->header_obj->as_string);
+ do_more($self, _header($s));
'.'
}
sub search_header_for {
my ($srch, $mid, $field) = @_;
- my $smsg = $srch->lookup_message($mid) or return;
- $smsg = PublicInbox::SearchMsg->load_doc($smsg->{doc});
+ my $smsg = $srch->lookup_mail($mid) or return;
$smsg->$field;
}
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;
my ($num, $smsg) = @_;
# n.b. field access and procedural calls can be
# 10%-15% faster than OO method calls:
- join("\t", $num,
+ my $s = join("\t", $num,
$smsg->{subject},
$smsg->{from},
PublicInbox::SearchMsg::date($smsg),
$smsg->{references},
PublicInbox::SearchMsg::bytes($smsg),
PublicInbox::SearchMsg::lines($smsg));
+ utf8::encode($s);
+ $s
}
sub cmd_over ($;$) {
my ($self, $range) = @_;
if ($range && $range =~ /\A<(.+)>\z/) {
my ($ng, $n) = mid_lookup($self, $1);
- my $smsg = $ng->search->lookup_message($range) or
+ my $smsg = $ng->search->lookup_mail($range) or
return '430 No article with that message-id';
more($self, '224 Overview information follows (multi-line)');
- $smsg = PublicInbox::SearchMsg->load_doc($smsg->{doc});
# Only set article number column if it's the current group
my $self_ng = $self->{ng};
sub res ($$) {
my ($self, $line) = @_;
- utf8::encode($line);
do_write($self, $line . "\r\n");
}
sub do_more ($$) {
my ($self, $data) = @_;
- utf8::encode($data);
if (MSG_MORE && !$self->{write_buf_size}) {
my $n = send($self->{sock}, $data, MSG_MORE);
if (defined $n) {