diff options
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/Feed.pm | 2 | ||||
-rw-r--r-- | lib/PublicInbox/SearchView.pm | 2 | ||||
-rw-r--r-- | lib/PublicInbox/View.pm | 8 | ||||
-rw-r--r-- | lib/PublicInbox/WwwStream.pm | 59 |
4 files changed, 32 insertions, 39 deletions
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index 4c1056b4..f25dd267 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -70,7 +70,7 @@ sub new_html { $ctx->{-html_tip} = '<pre>'; $ctx->{-upfx} = ''; $ctx->{-hr} = 1; - PublicInbox::WwwStream->response($ctx, 200, \&new_html_i); + PublicInbox::WwwStream::response($ctx, 200, \&new_html_i); } # private subs diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm index d53a533e..71c3ae70 100644 --- a/lib/PublicInbox/SearchView.pm +++ b/lib/PublicInbox/SearchView.pm @@ -82,7 +82,7 @@ retry: $cb = mset_summary($ctx, $mset, $q); } } - PublicInbox::WwwStream->response($ctx, $code, $cb); + PublicInbox::WwwStream::response($ctx, $code, $cb); } # display non-nested search results similar to what users expect from diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 0bc2b06e..4d6f44e0 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -66,7 +66,7 @@ sub msg_page { $ctx->{mhref} = $next ? '../'.mid_href($smsg->{mid}).'/' : ''; multipart_text_as_html($mime, $ctx); $ctx->{-html_tip} = (${delete $ctx->{obuf}} .= '</pre><hr>'); - PublicInbox::WwwStream->response($ctx, 200, \&msg_page_i); + PublicInbox::WwwStream::response($ctx, 200, \&msg_page_i); } sub msg_page_more { # cold @@ -413,7 +413,7 @@ sub stream_thread ($$) { $ctx->{-title_html} = ascii_html($smsg->{subject}); $ctx->{-html_tip} = thread_eml_entry($ctx, $level, $smsg, $eml); $ctx->{-queue} = \@q; - PublicInbox::WwwStream->response($ctx, 200, \&stream_thread_i); + PublicInbox::WwwStream::response($ctx, 200, \&stream_thread_i); } # /$INBOX/$MESSAGE_ID/t/ @@ -459,7 +459,7 @@ sub thread_html { $ctx->{-title_html} = ascii_html($smsg->{subject}); $ctx->{-html_tip} = '<pre>'.eml_entry($ctx, $smsg, $eml, scalar @$msgs); $ctx->{msgs} = $msgs; - PublicInbox::WwwStream->response($ctx, 200, \&thread_html_i); + PublicInbox::WwwStream::response($ctx, 200, \&thread_html_i); } sub thread_html_i { # PublicInbox::WwwStream::getline callback @@ -1213,7 +1213,7 @@ sub index_topics { if (@$msgs) { walk_thread(thread_results($ctx, $msgs), $ctx, \&acc_topic); } - PublicInbox::WwwStream->response($ctx, dump_topics($ctx), \&index_nav); + PublicInbox::WwwStream::response($ctx, dump_topics($ctx), \&index_nav); } sub thread_adj_level { diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm index 8623440b..c80440d1 100644 --- a/lib/PublicInbox/WwwStream.pm +++ b/lib/PublicInbox/WwwStream.pm @@ -27,28 +27,24 @@ sub base_url ($) { $base_url; } -sub new { - my ($class, $ctx, $cb) = @_; - - bless { - nr => 0, - cb => $cb, - ctx => $ctx, - base_url => base_url($ctx), - }, $class; +sub init { + my ($ctx, $cb) = @_; + $ctx->{cb} = $cb; + $ctx->{base_url} = base_url($ctx); + $ctx->{nr} = 0; + bless $ctx, __PACKAGE__; } sub response { - my ($class, $ctx, $code, $cb) = @_; + my ($ctx, $code, $cb) = @_; my $h = [ 'Content-Type', 'text/html; charset=UTF-8' ]; - my $self = $class->new($ctx, $cb); - $self->{gzf} = gzf_maybe($h, $ctx->{env}); - [ $code, $h, $self ] + init($ctx, $cb); + $ctx->{gzf} = gzf_maybe($h, $ctx->{env}); + [ $code, $h, $ctx ] } sub _html_top ($) { - my ($self) = @_; - my $ctx = $self->{ctx}; + my ($ctx) = @_; my $ibx = $ctx->{-inbox}; my $desc = ascii_html($ibx->description); my $title = delete($ctx->{-title_html}) // $desc; @@ -89,14 +85,13 @@ sub code_footer ($) { } sub _html_end { - my ($self) = @_; + my ($ctx) = @_; my $urls = 'Archives are clonable:'; - my $ctx = $self->{ctx}; my $ibx = $ctx->{-inbox}; my $desc = ascii_html($ibx->description); my @urls; - my $http = $self->{base_url}; + my $http = $ctx->{base_url}; my $max = $ibx->max_git_epoch; my $dir = (split(m!/!, $http))[-1]; my %seen = ($http => 1); @@ -163,41 +158,39 @@ EOF # callback for HTTP.pm (and any other PSGI servers) sub getline { - my ($self) = @_; - my $nr = $self->{nr}++; + my ($ctx) = @_; + my $nr = $ctx->{nr}++; my $buf = do { if ($nr == 0) { - _html_top($self); - } elsif (my $middle = $self->{cb}) { - $middle->($nr, $self->{ctx}); + _html_top($ctx); + } elsif (my $middle = $ctx->{cb}) { + $middle->($nr, $ctx); } - } // (delete($self->{cb}) ? _html_end($self) : undef); + } // (delete($ctx->{cb}) ? _html_end($ctx) : undef); # gzf may be GzipFilter, `undef' or `0' - my $gzf = $self->{gzf} or return $buf; + my $gzf = $ctx->{gzf} or return $buf; return $gzf->translate($buf) if defined $buf; - $self->{gzf} = 0; # next call to ->getline returns $buf (== undef) + $ctx->{gzf} = 0; # next call to ->getline returns $buf (== undef) $gzf->translate(undef); } sub html_oneshot ($$;$) { my ($ctx, $code, $sref) = @_; - my $self = bless { - ctx => $ctx, - base_url => base_url($ctx), - }, __PACKAGE__; + $ctx->{base_url} = base_url($ctx); + bless $ctx, __PACKAGE__; my @x; my $h = [ 'Content-Type' => 'text/html; charset=UTF-8', 'Content-Length' => undef ]; if (my $gzf = gzf_maybe($h, $ctx->{env})) { - $gzf->zmore(_html_top($self)); + $gzf->zmore(_html_top($ctx)); $gzf->zmore($$sref) if $sref; - $x[0] = $gzf->zflush(_html_end($self)); + $x[0] = $gzf->zflush(_html_end($ctx)); $h->[3] = length($x[0]); } else { - @x = (_html_top($self), $sref ? $$sref : (), _html_end($self)); + @x = (_html_top($ctx), $sref ? $$sref : (), _html_end($ctx)); $h->[3] += bytes::length($_) for @x; } [ $code, $h, \@x ] |