X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FMbox.pm;h=d5beceaf65e18b650e147dfef5ed213e8f1a5270;hb=1e5d704f1234ded472b800e42bedb5579780296e;hp=1f9ac6ec88cfd1a0989a0da5f7d44ab8590230cd;hpb=65e3cc8f6cc73e45db827cbeee4ccecbf1502496;p=public-inbox.git diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm index 1f9ac6ec..d5beceaf 100644 --- a/lib/PublicInbox/Mbox.pm +++ b/lib/PublicInbox/Mbox.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2019 all contributors +# Copyright (C) 2015-2020 all contributors # License: AGPL-3.0+ # Streaming (via getline) interface for formatting messages as an mboxrd. @@ -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; @@ -24,11 +25,10 @@ sub subject_fn ($) { # no need for full Email::MIME, here if ($fn =~ /=\?/) { eval { $fn = Encode::decode('MIME-Header', $fn) }; - $fn = 'no-subject' if $@; + return 'no-subject' if $@; } $fn =~ s/^re:\s+//i; - $fn = to_filename($fn); - $fn eq '' ? 'no-subject' : $fn; + $fn eq '' ? 'no-subject' : to_filename($fn); } sub mb_stream { @@ -44,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 @@ -153,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]; @@ -205,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; } @@ -222,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 @@ -237,16 +234,14 @@ sub mbox_all { } sub need_gzip { - my $title = 'gzipped mbox not available'; - my $body = <$title
$title
+	html_oneshot($_[0], 501, \<gzipped mbox not available
+
 The administrator needs to install the Compress::Raw::Zlib Perl module
 to support gzipped mboxes.
-Return to index
-EOF - [501,[qw(Content-Type text/html Content-Length), bytes::length($body)], - [ $body ] ]; +Return to index +EOF } 1;