$header_obj->header_set($d);
}
my $ibx = $ctx->{-inbox};
- my $base = $ibx->base_url($ctx->{cgi});
+ my $base = $ibx->base_url($ctx->{env});
my $mid = mid_clean($header_obj->header('Message-ID'));
$mid = uri_escape_utf8($mid);
my @append = (
sub new {
my ($class, $ctx, $cb) = @_;
- my $buf;
+ my $buf = '';
bless {
buf => \$buf,
gz => IO::Compress::Gzip->new(\$buf, Time => 0),
}, $class;
}
-sub _flush_buf {
- my ($self) = @_;
- my $ret = $self->{buf};
- $ret = $$ret;
- ${$self->{buf}} = undef;
- $ret;
-}
-
# called by Plack::Util::foreach or similar
sub getline {
my ($self) = @_;
+ my $ctx = $self->{ctx} or return;
my $res;
- my $ctx = $self->{ctx};
my $ibx = $ctx->{-inbox};
my $gz = $self->{gz};
do {
my $msg = eval { $ibx->msg_by_mid($smsg->mid) } or next;
$msg = Email::Simple->new($msg);
$gz->write(PublicInbox::Mbox::msg_str($ctx, $msg));
- my $ret = _flush_buf($self);
- return $ret if $ret;
+ my $bref = $self->{buf};
+ if (length($$bref) >= 8192) {
+ my $ret = $$bref; # copy :<
+ ${$self->{buf}} = '';
+ return $ret;
+ }
}
$res = $self->{cb}->($self->{opts});
$self->{msgs} = $res->{msgs};
$self->{opts}->{offset} += $res;
} while ($res);
$gz->close;
- _flush_buf($self);
+ delete $self->{ctx};
+ ${delete $self->{buf}};
}
sub close {} # noop