# more common "push" model)
package PublicInbox::WwwStream;
use strict;
-use warnings;
-use base qw(Exporter);
+use parent qw(Exporter);
our @EXPORT_OK = qw(html_oneshot);
use bytes (); # length
use PublicInbox::Hval qw(ascii_html prurl);
my ($ctx, $cb) = @_;
$ctx->{cb} = $cb;
$ctx->{base_url} = base_url($ctx);
- $ctx->{nr} = 0;
bless $ctx, __PACKAGE__;
}
[ $code, $h, $ctx ]
}
-sub _html_top ($) {
+sub html_top ($) {
my ($ctx) = @_;
my $ibx = $ctx->{-inbox};
my $desc = ascii_html($ibx->description);
# callback for HTTP.pm (and any other PSGI servers)
sub getline {
my ($ctx) = @_;
- my $nr = $ctx->{nr}++;
-
- my $buf = do {
- if ($nr == 0) {
- _html_top($ctx);
- } elsif (my $middle = $ctx->{cb}) {
- $middle->($nr, $ctx);
- }
- } // (delete($ctx->{cb}) ? _html_end($ctx) : undef);
+ my $cb = $ctx->{cb};
+ my $buf = $cb->($ctx) if $cb;
+ $buf //= delete($ctx->{cb}) ? _html_end($ctx) : undef;
# gzf may be GzipFilter, `undef' or `0'
my $gzf = $ctx->{gzf} or return $buf;
my $h = [ 'Content-Type' => 'text/html; charset=UTF-8',
'Content-Length' => undef ];
if (my $gzf = gzf_maybe($h, $ctx->{env})) {
- $gzf->zmore(_html_top($ctx));
+ $gzf->zmore(html_top($ctx));
$gzf->zmore($$sref) if $sref;
$x[0] = $gzf->zflush(_html_end($ctx));
$h->[3] = length($x[0]);
} else {
- @x = (_html_top($ctx), $sref ? $$sref : (), _html_end($ctx));
+ @x = (html_top($ctx), $sref ? $$sref : (), _html_end($ctx));
$h->[3] += bytes::length($_) for @x;
}
[ $code, $h, \@x ]