]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/WwwText.pm
wwwtext: gzip text/plain responses, as well
[public-inbox.git] / lib / PublicInbox / WwwText.pm
index b23a415e47c32be3391d5950054c36c7af185cb5..508005fba0ee315b603dd0fb2b365a14d318c092 100644 (file)
@@ -10,6 +10,8 @@ use PublicInbox::Linkify;
 use PublicInbox::WwwStream;
 use PublicInbox::Hval qw(ascii_html);
 use URI::Escape qw(uri_escape_utf8);
+use PublicInbox::GzipFilter qw(gzf_maybe);
+use Compress::Raw::Zlib qw(Z_FINISH Z_OK);
 our $QP_URL = 'https://xapian.org/docs/queryparser.html';
 our $WIKI_URL = 'https://en.wikipedia.org/wiki';
 my $hl = eval {
@@ -35,14 +37,23 @@ sub get_text {
                $code = 404;
                $txt = "404 Not Found ($key)\n";
        }
+       my $env = $ctx->{env};
        if ($raw) {
-               $hdr->[3] = bytes::length($txt);
-               return [ $code, $hdr, [ $txt ] ]
+               my $body;
+               if (my $gzf = $code == 200 ? gzf_maybe($hdr, $env) : undef) {
+                       my $zbuf = $gzf->translate($txt);
+                       undef $txt;
+                       $body = [ $zbuf .= $gzf->translate(undef) ];
+               } else {
+                       $body = [ $txt ];
+               }
+               $hdr->[3] = bytes::length($body->[0]);
+               return [ $code, $hdr, $body ]
        }
 
        # enforce trailing slash for "wget -r" compatibility
        if (!$have_tslash && $code == 200) {
-               my $url = $ctx->{-inbox}->base_url($ctx->{env});
+               my $url = $ctx->{-inbox}->base_url($env);
                $url .= "_/text/$key/";
 
                return [ 302, [ 'Content-Type', 'text/plain',