user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH 0/2] www: respect charset in $MSGID/raw display
@ 2021-10-25  2:45  7% Eric Wong
  2021-10-25  2:45  6% ` [PATCH 1/2] gzip_filter: delay async wcb call Eric Wong
  0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2021-10-25  2:45 UTC (permalink / raw)
  To: meta; +Cc: Thomas Weißschuh

Only lightly-tested via new additions to the test suite...

Eric Wong (2):
  gzip_filter: delay async wcb call
  www: $MSGID/raw: set charset in HTTP response

 lib/PublicInbox/GzipFilter.pm    | 34 ++++++++++++++++++++++----------
 lib/PublicInbox/Mbox.pm          | 26 +++++++++++++-----------
 lib/PublicInbox/WwwAtomStream.pm |  4 ++--
 lib/PublicInbox/WwwStream.pm     |  5 ++---
 t/plack.t                        | 26 +++++++++++++++++++++---
 t/psgi_v2.t                      |  5 ++++-
 6 files changed, 69 insertions(+), 31 deletions(-)

^ permalink raw reply	[relevance 7%]

* [PATCH 1/2] gzip_filter: delay async wcb call
  2021-10-25  2:45  7% [PATCH 0/2] www: respect charset in $MSGID/raw display Eric Wong
@ 2021-10-25  2:45  6% ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-10-25  2:45 UTC (permalink / raw)
  To: meta; +Cc: Thomas Weißschuh

This will let us modify the response header later to set
a proper charset for Content-Type when displaying raw
messages.

Cc: Thomas Weißschuh <thomas@t-8ch.de>
---
 lib/PublicInbox/GzipFilter.pm    | 19 +++++++++++++------
 lib/PublicInbox/Mbox.pm          |  2 +-
 lib/PublicInbox/WwwAtomStream.pm |  4 ++--
 lib/PublicInbox/WwwStream.pm     |  5 ++---
 4 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/lib/PublicInbox/GzipFilter.pm b/lib/PublicInbox/GzipFilter.pm
index c62161710725..c4858a971495 100644
--- a/lib/PublicInbox/GzipFilter.pm
+++ b/lib/PublicInbox/GzipFilter.pm
@@ -54,7 +54,7 @@ sub psgi_response {
 		$http->{forward} = $self;
 		sub {
 			my ($wcb) = @_; # -httpd provided write callback
-			$self->{http_out} = $wcb->([$code, $res_hdr]);
+			$self->{wcb_args} = [ $code, $res_hdr, $wcb ];
 			$self->can('async_next')->($http); # start stepping
 		};
 	} else { # generic PSGI code path
@@ -114,9 +114,17 @@ sub translate ($$) {
 	}
 }
 
+sub http_out ($) {
+	my ($self) = @_;
+	$self->{http_out} //= do {
+		my $args = delete $self->{wcb_args} // return undef;
+		pop(@$args)->($args); # $wcb->([$code, $hdr_ary])
+	};
+}
+
 sub write {
 	# my $ret = bytes::length($_[1]); # XXX does anybody care?
-	$_[0]->{http_out}->write(translate($_[0], $_[1]));
+	http_out($_[0])->write(translate($_[0], $_[1]));
 }
 
 # similar to ->translate; use this when we're sure we know we have
@@ -145,10 +153,9 @@ sub zflush ($;$) {
 
 sub close {
 	my ($self) = @_;
-	if (my $http_out = delete $self->{http_out}) {
-		$http_out->write(zflush($self));
-		$http_out->close;
-	}
+	my $http_out = http_out($self) // return;
+	$http_out->write(zflush($self));
+	delete($self->{http_out})->close;
 }
 
 sub bail  {
diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm
index dede4825ff13..4f84eea6745d 100644
--- a/lib/PublicInbox/Mbox.pm
+++ b/lib/PublicInbox/Mbox.pm
@@ -47,7 +47,7 @@ sub async_eml { # for async_blob_cb
 	$ctx->{smsg} = $ctx->{ibx}->over->next_by_mid(@{$ctx->{next_arg}});
 
 	$ctx->zmore(msg_hdr($ctx, $eml));
-	$ctx->{http_out}->write($ctx->translate(msg_body($eml)));
+	$ctx->write(msg_body($eml));
 }
 
 sub res_hdr ($$) {
diff --git a/lib/PublicInbox/WwwAtomStream.pm b/lib/PublicInbox/WwwAtomStream.pm
index 5d32294eec15..82895db6373e 100644
--- a/lib/PublicInbox/WwwAtomStream.pm
+++ b/lib/PublicInbox/WwwAtomStream.pm
@@ -28,7 +28,7 @@ sub async_next ($) {
 		if (my $smsg = $ctx->{smsg} = $ctx->{cb}->($ctx)) {
 			$ctx->smsg_blob($smsg);
 		} else {
-			$ctx->{http_out}->write($ctx->translate('</feed>'));
+			$ctx->write('</feed>');
 			$ctx->close;
 		}
 	};
@@ -38,7 +38,7 @@ sub async_next ($) {
 sub async_eml { # for async_blob_cb
 	my ($ctx, $eml) = @_;
 	my $smsg = delete $ctx->{smsg};
-	$ctx->{http_out}->write($ctx->translate(feed_entry($ctx, $smsg, $eml)))
+	$ctx->write(feed_entry($ctx, $smsg, $eml));
 }
 
 sub response {
diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm
index 5be5ed0cad59..6d7c447fe6a2 100644
--- a/lib/PublicInbox/WwwStream.pm
+++ b/lib/PublicInbox/WwwStream.pm
@@ -32,7 +32,7 @@ sub init {
 
 sub async_eml { # for async_blob_cb
 	my ($ctx, $eml) = @_;
-	$ctx->{http_out}->write($ctx->translate($ctx->{cb}->($ctx, $eml)));
+	$ctx->write($ctx->{cb}->($ctx, $eml));
 }
 
 sub html_top ($) {
@@ -187,8 +187,7 @@ sub async_next ($) {
 		if (my $smsg = $ctx->{smsg} = $ctx->{cb}->($ctx)) {
 			$ctx->smsg_blob($smsg);
 		} else {
-			$ctx->{http_out}->write(
-					$ctx->translate(_html_end($ctx)));
+			$ctx->write(_html_end($ctx));
 			$ctx->close; # GzipFilter->close
 		}
 	};

^ permalink raw reply related	[relevance 6%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-10-25  2:45  7% [PATCH 0/2] www: respect charset in $MSGID/raw display Eric Wong
2021-10-25  2:45  6% ` [PATCH 1/2] gzip_filter: delay async wcb call Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).