use URI::Escape qw/uri_escape_utf8/;
use Date::Parse qw/str2time/;
use Encode::MIME::Header;
+use Plack::Util;
use PublicInbox::Hval qw/ascii_html/;
use PublicInbox::Linkify;
use PublicInbox::MID qw/mid_clean id_compress mid2path mid_mime/;
my ($ctx, $mime, $footer) = @_;
$footer = defined($footer) ? "\n$footer" : '';
my $hdr = $mime->header_obj;
- headers_to_html_header($hdr, $ctx) .
- multipart_text_as_html($mime, '') .
- '</pre><hr /><pre>' .
- html_footer($hdr, 1, $ctx) .
- '</pre>' . msg_reply($ctx, $hdr) .
- '<hr /><pre>'. $footer . '</pre></body></html>';
+ my $n = 0;
+ Plack::Util::inline_object(
+ close => sub {}, # noop
+ getline => sub {
+ my $nr = $n++;
+ if ($nr == 0) {
+ headers_to_html_header($hdr, $ctx) .
+ multipart_text_as_html($mime, '') .
+ '</pre><hr />'
+ } elsif ($nr == 1) {
+ '<pre>' .
+ html_footer($hdr, 1, $ctx) .
+ '</pre>' . msg_reply($ctx, $hdr) .
+ '<hr /><pre>'. $footer .
+ '</pre></body></html>'
+ } else {
+ undef
+ }
+ }
+ )
}
# /$INBOX/$MESSAGE_ID/#R
my $mime = Email::MIME->new($x);
searcher($ctx);
[ 200, [ 'Content-Type' => 'text/html; charset=UTF-8' ],
- [ PublicInbox::View::msg_html($ctx, $mime, $foot) ] ];
+ PublicInbox::View::msg_html($ctx, $mime, $foot) ];
}
# /$INBOX/$MESSAGE_ID/t/
sub msg_html ($) {
my ($mime) = @_;
- PublicInbox::View::msg_html(undef, $mime);
+ my $s = '';
+ my $body = PublicInbox::View::msg_html(undef, $mime);
+ while (defined(my $buf = $body->getline)) {
+ $s .= $buf;
+ }
+ $body->close;
+ $s;
}
# plain text