]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Mbox.pm
mbox: need_gzip uses WwwStream::oneshot
[public-inbox.git] / lib / PublicInbox / Mbox.pm
index 1f9ac6ec88cfd1a0989a0da5f7d44ab8590230cd..46964bbb77cc5e49584dd35ea67c77ecaa221356 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2019 all contributors <meta@public-inbox.org>
+# Copyright (C) 2015-2020 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
 # Streaming (via getline) interface for formatting messages as an mboxrd.
@@ -12,7 +12,7 @@ use strict;
 use warnings;
 use PublicInbox::MID qw/mid_escape/;
 use PublicInbox::Hval qw/to_filename/;
-use PublicInbox::SearchMsg;
+use PublicInbox::Smsg;
 use Email::Simple;
 use Email::MIME::Encode;
 
@@ -24,11 +24,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 {
@@ -153,7 +152,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 +204,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 +221,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 +236,14 @@ sub mbox_all {
 }
 
 sub need_gzip {
-       my $title = 'gzipped mbox not available';
-       my $body = <<EOF;
-<html><head><title>$title</title><body><pre>$title
+       PublicInbox::WwwStream::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;