]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Mbox.pm
mbox: use per-message line-ending for From_ line
[public-inbox.git] / lib / PublicInbox / Mbox.pm
index 5693d30b1c5ab80ce08fe56f694ffd84b94d7522..16de1a728ab6345f58c0637f537bfca6485a44ce 100644 (file)
@@ -12,7 +12,8 @@ use strict;
 use warnings;
 use PublicInbox::MID qw/mid_escape/;
 use PublicInbox::Hval qw/to_filename/;
-use PublicInbox::SearchMsg;
+use PublicInbox::Smsg;
+use PublicInbox::WwwStream qw(html_oneshot);
 use Email::Simple;
 use Email::MIME::Encode;
 
@@ -43,19 +44,16 @@ sub getline {
        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
+       @$more = ($ctx, $id, $prev, $next); # $next may be undef, here
+       msg_hdr($ctx, $hdr) . msg_body($$mref);
 }
 
 sub close {} # noop
@@ -108,7 +106,7 @@ sub msg_hdr ($$;$) {
                'List-Post', "<mailto:$ibx->{-primary_address}>",
        );
        my $crlf = $header_obj->crlf;
-       my $buf = "From mboxrd\@z Thu Jan  1 00:00:00 1970\n" .
+       my $buf = 'From mboxrd@z Thu Jan  1 00:00:00 1970' . $crlf .
                        $header_obj->as_string;
        for (my $i = 0; $i < @append; $i += 2) {
                my $k = $append[$i];
@@ -152,7 +150,7 @@ sub thread_cb {
 sub thread_mbox {
        my ($ctx, $over, $sfx) = @_;
        eval { require PublicInbox::MboxGz };
-       return need_gzip() if $@;
+       return need_gzip($ctx) if $@;
        my $msgs = $ctx->{msgs} = $over->get_thread($ctx->{mid}, {});
        return [404, [qw(Content-Type text/plain)], []] if !@$msgs;
        $ctx->{prev} = $msgs->[-1];
@@ -204,7 +202,7 @@ sub results_cb {
        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;
                }
@@ -221,7 +219,7 @@ sub mbox_all {
        my ($ctx, $query) = @_;
 
        eval { require PublicInbox::MboxGz };
-       return need_gzip() if $@;
+       return need_gzip($ctx) if $@;
        return mbox_all_ids($ctx) if $query eq '';
        my $qopts = $ctx->{qopts} = { mset => 2 };
        my $srch = $ctx->{srch} = $ctx->{-inbox}->search or
@@ -236,16 +234,14 @@ sub mbox_all {
 }
 
 sub need_gzip {
-       my $title = 'gzipped mbox not available';
-       my $body = <<EOF;
-<html><head><title>$title</title><body><pre>$title
+       html_oneshot($_[0], 501, \<<EOF);
+<pre>gzipped mbox not available
+
 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 ] ];
+<a href="../">Return to index</a></pre>
+EOF
 }
 
 1;