use warnings;
use PublicInbox::MID qw/mid_escape/;
use PublicInbox::Hval qw/to_filename/;
-use PublicInbox::SearchMsg;
-use Email::Simple;
-use Email::MIME::Encode;
+use PublicInbox::Smsg;
+use PublicInbox::WwwStream qw(html_oneshot);
+use PublicInbox::Eml;
sub subject_fn ($) {
my ($hdr) = @_;
- my $fn = $hdr->header('Subject');
+ my $fn = $hdr->header_str('Subject');
return 'no-subject' if (!defined($fn) || $fn eq '');
- # no need for full Email::MIME, here
- if ($fn =~ /=\?/) {
- eval { $fn = Encode::decode('MIME-Header', $fn) };
- return 'no-subject' if $@;
- }
$fn =~ s/^re:\s+//i;
$fn eq '' ? 'no-subject' : to_filename($fn);
}
my ($ctx, $id, $prev, $next, $mref, $hdr) = @$more;
if ($hdr) { # first message hits this, only
pop @$more; # $hdr
- return msg_hdr($ctx, $hdr);
- }
- if ($mref) { # all messages hit this
pop @$more; # $mref
- return msg_body($$mref);
+ return msg_hdr($ctx, $hdr) . msg_body($$mref);
}
my $cur = $next or return;
my $ibx = $ctx->{-inbox};
$next = $ibx->over->next_by_mid($ctx->{mid}, \$id, \$prev);
$mref = $ibx->msg_by_smsg($cur) or return;
- $hdr = Email::Simple->new($mref)->header_obj;
- @$more = ($ctx, $id, $prev, $next, $mref); # $next may be undef, here
- msg_hdr($ctx, $hdr); # all but first message hits this
+ $hdr = PublicInbox::Eml->new($mref)->header_obj;
+ @$more = ($ctx, $id, $prev, $next); # $next may be undef, here
+ msg_hdr($ctx, $hdr) . msg_body($$mref);
}
sub close {} # noop
} else {
$mref = $ibx->msg_by_mid($mid) or return;
}
- my $hdr = Email::Simple->new($mref)->header_obj;
+ my $hdr = PublicInbox::Eml->new($mref)->header_obj;
$more = [ $ctx, $id, $prev, $next, $mref, $hdr ]; # for ->getline
my $fn = subject_fn($hdr);
my @hdr = ('Content-Type');
'List-Post', "<mailto:$ibx->{-primary_address}>",
);
my $crlf = $header_obj->crlf;
- my $buf = "From mboxrd\@z Thu Jan 1 00:00:00 1970\n" .
- $header_obj->as_string;
+ my $buf = $header_obj->as_string;
+ # fixup old bug from import (pre-a0c07cba0e5d8b6a)
+ $buf =~ s/\A[\r\n]*From [^\r\n]*\r?\n//s;
+ $buf = "From mboxrd\@z Thu Jan 1 00:00:00 1970" . $crlf . $buf;
+
for (my $i = 0; $i < @append; $i += 2) {
my $k = $append[$i];
my $v = $append[$i + 1];
- my @v = $header_obj->header($k);
+ my @v = $header_obj->header_raw($k);
foreach (@v) {
if ($v eq $_) {
$v = undef;
sub thread_mbox {
my ($ctx, $over, $sfx) = @_;
- eval { require PublicInbox::MboxGz };
- return need_gzip() if $@;
+ require PublicInbox::MboxGz;
my $msgs = $ctx->{msgs} = $over->get_thread($ctx->{mid}, {});
return [404, [qw(Content-Type text/plain)], []] if !@$msgs;
$ctx->{prev} = $msgs->[-1];
my $srch = $ctx->{srch};
while (1) {
while (my $mi = (($mset->items)[$ctx->{iter}++])) {
- my $smsg = PublicInbox::SearchMsg::from_mitem($mi,
+ my $smsg = PublicInbox::Smsg::from_mitem($mi,
$srch) or next;
return $smsg;
}
sub mbox_all {
my ($ctx, $query) = @_;
- eval { require PublicInbox::MboxGz };
- return need_gzip() if $@;
+ require PublicInbox::MboxGz;
return mbox_all_ids($ctx) if $query eq '';
my $qopts = $ctx->{qopts} = { mset => 2 };
my $srch = $ctx->{srch} = $ctx->{-inbox}->search or
PublicInbox::MboxGz->response($ctx, \&results_cb, 'results-'.$query);
}
-sub need_gzip {
- my $title = 'gzipped mbox not available';
- my $body = <<EOF;
-<html><head><title>$title</title><body><pre>$title
-The administrator needs to install the Compress::Raw::Zlib Perl module
-to support gzipped mboxes.
-<a href="../">Return to index</a></pre></body></html>
-EOF
-
- [501,[qw(Content-Type text/html Content-Length), bytes::length($body)],
- [ $body ] ];
-}
-
1;