X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FView.pm;h=895e4f278dfff8b76e1a1e5c5949cf42352c7364;hb=1cf5a6129b5ae4991275862aab539ddea812890a;hp=16a0fcdfbe3406c4f110b6a733b4b5078e56dce1;hpb=677772ba8f661e78494ee1d185ab05ad5bdaac87;p=public-inbox.git diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 16a0fcdf..895e4f27 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -14,7 +14,7 @@ use PublicInbox::MID qw(id_compress mids mids_for_index references $MID_EXTRACT); use PublicInbox::MsgIter; use PublicInbox::Address; -use PublicInbox::WwwStream; +use PublicInbox::WwwStream qw(html_oneshot); use PublicInbox::Reply; use PublicInbox::ViewDiff qw(flush_diff); use PublicInbox::Eml; @@ -45,25 +45,20 @@ sub msg_page_i { } } -# /$INBOX/$MESSAGE_ID/ for unindexed v1 inboxes -sub no_over_i { +# /$INBOX/$MSGID/ for unindexed v1 inboxes +sub no_over_html ($) { my ($ctx) = @_; - my $eml = delete $ctx->{eml} or return; + my $bref = $ctx->{-inbox}->msg_by_mid($ctx->{mid}) or return; # 404 + my $eml = PublicInbox::Eml->new($bref); my $hdr = $eml->header_obj; $ctx->{mhref} = ''; + PublicInbox::WwwStream::init($ctx); my $obuf = $ctx->{obuf} = _msg_page_prepare_obuf($hdr, $ctx); multipart_text_as_html($eml, $ctx); delete $ctx->{obuf}; $$obuf .= '
'; eval { $$obuf .= html_footer($ctx, $hdr) }; - $$obuf -} - -sub no_over_html ($) { - my ($ctx) = @_; - my $bref = $ctx->{-inbox}->msg_by_mid($ctx->{mid}) or return; # 404 - $ctx->{eml} = PublicInbox::Eml->new($bref); - PublicInbox::WwwStream::response($ctx, 200, \&no_over_i); + html_oneshot($ctx, 200, $obuf); } # public functions: (unstable) @@ -181,7 +176,8 @@ sub fmt_ts ($) { strftime('%Y-%m-%d %k:%M', gmtime($_[0])) } # Displays the text of of the message for /$INBOX/$MSGID/[Tt]/ endpoint # this is already inside a
 sub eml_entry {
-	my ($ctx, $smsg, $eml, $more) = @_;
+	my ($ctx, $eml, $more) = @_;
+	my $smsg = delete $ctx->{smsg};
 	my $subj = delete $smsg->{subject};
 	my $mid_raw = $smsg->{mid};
 	my $id = id_compress($mid_raw, 1);
@@ -370,9 +366,9 @@ sub pre_thread  { # walk_thread callback
 }
 
 sub thread_eml_entry {
-	my ($ctx, $level, $smsg, $eml) = @_;
-	my ($beg, $end) = thread_adj_level($ctx, $level);
-	$beg . '
' . eml_entry($ctx, $smsg, $eml, 0) . '
' . $end; + my ($ctx, $eml) = @_; + my ($beg, $end) = thread_adj_level($ctx, $ctx->{level}); + $beg . '
' . eml_entry($ctx, $eml, 0) . '
' . $end; } sub next_in_queue ($$) { @@ -388,15 +384,7 @@ sub next_in_queue ($$) { sub stream_thread_i { # PublicInbox::WwwStream::getline callback my ($ctx, $eml) = @_; - - if ($eml) { - my ($level, $smsg) = delete @$ctx{qw(level smsg)}; - if ($ctx->{nr} == 1) { - $ctx->{-title_html} = ascii_html($smsg->{subject}); - $ctx->zmore($ctx->html_top); - } - return thread_eml_entry($ctx, $level, $smsg, $eml); - } + goto &thread_eml_entry if $eml; # tail recursion return unless exists($ctx->{skel}); my $ghost_ok = $ctx->{nr}++; while (1) { @@ -404,6 +392,11 @@ sub stream_thread_i { # PublicInbox::WwwStream::getline callback if ($smsg) { if (exists $smsg->{blob}) { # next message for cat-file $ctx->{level} = $lvl; + if (!$ghost_ok) { # first non-ghost + $ctx->{-title_html} = + ascii_html($smsg->{subject}); + $ctx->zmore($ctx->html_top); + } return $smsg; } # buffer the ghost entry and loop @@ -470,7 +463,7 @@ sub thread_html_i { # PublicInbox::WwwStream::getline callback $ctx->{-title_html} = ascii_html($smsg->{subject}); $ctx->zmore($ctx->html_top); } - return eml_entry($ctx, $smsg, $eml, scalar @{$ctx->{msgs}}); + return eml_entry($ctx, $eml, scalar @{$ctx->{msgs}}); } else { while (my $smsg = shift @{$ctx->{msgs}}) { return $smsg if exists($smsg->{blob}); @@ -1171,12 +1164,6 @@ sub pagination_footer ($$) { "
page: $next$prev
"; } -sub index_nav { # callback for WwwStream::getline - my ($ctx) = @_; - return $ctx->html_top if exists $ctx->{-html_tip}; - pagination_footer($ctx, '.') -} - sub paginate_recent ($$) { my ($ctx, $lim) = @_; my $t = $ctx->{qp}->{t} || ''; @@ -1225,7 +1212,8 @@ sub index_topics { if (@$msgs) { walk_thread(thread_results($ctx, $msgs), $ctx, \&acc_topic); } - PublicInbox::WwwStream::response($ctx, dump_topics($ctx), \&index_nav); + html_oneshot($ctx, dump_topics($ctx), \pagination_footer($ctx, '.')); + } sub thread_adj_level {