X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FWwwStream.pm;h=23b03f0e8dc49ddf8780964a9f988fd41d99b6dc;hb=5afb24f06627641e3fed608e807b5ab628cda348;hp=eecc27019da163d095d0c933b79b1fedf298d0af;hpb=0179230221231f8f5a3edc2f2836cc7c7e089dda;p=public-inbox.git
diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm
index eecc2701..23b03f0e 100644
--- a/lib/PublicInbox/WwwStream.pm
+++ b/lib/PublicInbox/WwwStream.pm
@@ -1,11 +1,10 @@
# Copyright (C) 2016-2020 all contributors
# License: AGPL-3.0+
#
-# HTML body stream for which yields getline+close methods
+# HTML body stream for which yields getline+close methods for
+# generic PSGI servers and callbacks for public-inbox-httpd.
#
-# public-inbox-httpd favors "getline" response bodies to take a
-# "pull"-based approach to feeding slow clients (as opposed to a
-# more common "push" model)
+# See PublicInbox::GzipFilter parent class for more info.
package PublicInbox::WwwStream;
use strict;
use parent qw(Exporter PublicInbox::GzipFilter);
@@ -29,14 +28,6 @@ sub init {
bless $ctx, __PACKAGE__;
}
-sub response {
- my ($ctx, $code, $cb) = @_;
- my $res_hdr = [ 'Content-Type' => 'text/html; charset=UTF-8' ];
- init($ctx, $cb);
- $ctx->{gz} = PublicInbox::GzipFilter::gz_or_noop($res_hdr, $ctx->{env});
- [ $code, $res_hdr, $ctx ]
-}
-
sub async_eml { # ->{async_eml} for async_blob_cb
my ($ctx, $eml) = @_;
$ctx->{http_out}->write($ctx->translate($ctx->{cb}->($ctx, $eml)));
@@ -174,17 +165,18 @@ sub getline {
sub html_oneshot ($$;$) {
my ($ctx, $code, $sref) = @_;
- $ctx->{base_url} = base_url($ctx);
- bless $ctx, __PACKAGE__;
- my @bdy;
my $res_hdr = [ 'Content-Type' => 'text/html; charset=UTF-8',
'Content-Length' => undef ];
+ bless $ctx, __PACKAGE__;
$ctx->{gz} = PublicInbox::GzipFilter::gz_or_noop($res_hdr, $ctx->{env});
- $ctx->zmore(html_top($ctx));
+ $ctx->{base_url} //= do {
+ $ctx->zmore(html_top($ctx));
+ base_url($ctx);
+ };
$ctx->zmore($$sref) if $sref;
- $bdy[0] = $ctx->zflush(_html_end($ctx));
- $res_hdr->[3] = bytes::length($bdy[0]);
- [ $code, $res_hdr, \@bdy ]
+ my $bdy = $ctx->zflush(_html_end($ctx));
+ $res_hdr->[3] = bytes::length($bdy);
+ [ $code, $res_hdr, [ $bdy ] ]
}
sub async_next ($) {