about summary refs log tree commit homepage
path: root/lib/PublicInbox/Mbox.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-11-16 02:34:38 +0000
committerEric Wong <e@80x24.org>2019-11-16 11:05:01 +0000
commitcbf748a8a038fd51a7ace57570c0267f8162999b (patch)
tree796875699eb4c84f5a4dedf018a0bfe47f19332e /lib/PublicInbox/Mbox.pm
parente84f0a4fe260060b2055ed4c856308b4bb73b641 (diff)
downloadpublic-inbox-cbf748a8a038fd51a7ace57570c0267f8162999b.tar.gz
It'll make using Compress::Raw::Zlib easier, since we
can use that and import constants more easily.
Diffstat (limited to 'lib/PublicInbox/Mbox.pm')
-rw-r--r--lib/PublicInbox/Mbox.pm64
1 files changed, 2 insertions, 62 deletions
diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm
index 9e808c09..42ed8c5d 100644
--- a/lib/PublicInbox/Mbox.pm
+++ b/lib/PublicInbox/Mbox.pm
@@ -136,7 +136,7 @@ sub msg_body ($) {
 
 sub thread_mbox {
         my ($ctx, $over, $sfx) = @_;
-        eval { require IO::Compress::Gzip };
+        eval { require PublicInbox::MboxGz };
         return sub { need_gzip(@_) } if $@;
         my $mid = $ctx->{mid};
         my $msgs = $over->get_thread($mid, {});
@@ -196,7 +196,7 @@ sub mbox_all_ids {
 sub mbox_all {
         my ($ctx, $query) = @_;
 
-        eval { require IO::Compress::Gzip };
+        eval { require PublicInbox::MboxGz };
         return sub { need_gzip(@_) } if $@;
         return mbox_all_ids($ctx) if $query eq '';
         my $opts = { mset => 2 };
@@ -239,63 +239,3 @@ EOF
 }
 
 1;
-
-package PublicInbox::MboxGz;
-use strict;
-use warnings;
-use PublicInbox::Hval qw/to_filename/;
-
-sub new {
-        my ($class, $ctx, $cb) = @_;
-        my $buf = '';
-        $ctx->{base_url} = $ctx->{-inbox}->base_url($ctx->{env});
-        bless {
-                buf => \$buf,
-                gz => IO::Compress::Gzip->new(\$buf, Time => 0),
-                cb => $cb,
-                ctx => $ctx,
-        }, $class;
-}
-
-sub response {
-        my ($class, $ctx, $cb, $fn) = @_;
-        my $body = $class->new($ctx, $cb);
-        # http://www.iana.org/assignments/media-types/application/gzip
-        my @h = qw(Content-Type application/gzip);
-        if ($fn) {
-                $fn = to_filename($fn);
-                push @h, 'Content-Disposition', "inline; filename=$fn.mbox.gz";
-        }
-        [ 200, \@h, $body ];
-}
-
-# called by Plack::Util::foreach or similar
-sub getline {
-        my ($self) = @_;
-        my $ctx = $self->{ctx} or return;
-        my $gz = $self->{gz};
-        while (my $smsg = $self->{cb}->()) {
-                my $mref = $ctx->{-inbox}->msg_by_smsg($smsg) or next;
-                my $h = Email::Simple->new($mref)->header_obj;
-                $gz->write(PublicInbox::Mbox::msg_hdr($ctx, $h, $smsg->{mid}));
-                $gz->write(PublicInbox::Mbox::msg_body($$mref));
-
-                my $bref = $self->{buf};
-                if (length($$bref) >= 8192) {
-                        my $ret = $$bref; # copy :<
-                        ${$self->{buf}} = '';
-                        return $ret;
-                }
-
-                # be fair to other clients on public-inbox-httpd:
-                return '';
-        }
-        delete($self->{gz})->close;
-        # signal that we're done and can return undef next call:
-        delete $self->{ctx};
-        ${delete $self->{buf}};
-}
-
-sub close {} # noop
-
-1;