- my ($nr, $ctx) = @_;
- if (my $more = delete $ctx->{more}) { # unlikely
- # fake an EOF if $more retrieval fails;
- eval { msg_page_more($ctx, $nr, @$more) };
- } elsif (my $hdr = delete $ctx->{hdr}) {
- # fake an EOF if generating the footer fails;
- # we want to at least show the message if something
- # here crashes:
- eval { html_footer($ctx, $hdr) };
- } else {
- undef
+ my ($ctx, $eml) = @_;
+ if ($eml) { # called by WwwStream::async_eml or getline
+ my $smsg = $ctx->{smsg};
+ my $over = $ctx->{ibx}->over;
+ $ctx->{smsg} = $over ? $over->next_by_mid(@{$ctx->{next_arg}})
+ : $ctx->gone('over');
+ $ctx->{mhref} = ($ctx->{nr} || $ctx->{smsg}) ?
+ "../${\mid_href($smsg->{mid})}/" : '';
+ my $obuf = $ctx->{obuf} = _msg_page_prepare_obuf($eml, $ctx);
+ if (length($$obuf)) {
+ multipart_text_as_html($eml, $ctx);
+ $$obuf .= '</pre><hr>';
+ }
+ delete $ctx->{obuf};
+ $$obuf .= html_footer($ctx, $ctx->{first_hdr}) if !$ctx->{smsg};
+ $$obuf;
+ } else { # called by WwwStream::async_next or getline
+ $ctx->{smsg}; # may be undef
+ }
+}
+
+# /$INBOX/$MSGID/ for unindexed v1 inboxes
+sub no_over_html ($) {
+ my ($ctx) = @_;
+ my $bref = $ctx->{ibx}->msg_by_mid($ctx->{mid}) or return; # 404
+ my $eml = PublicInbox::Eml->new($bref);
+ $ctx->{mhref} = '';
+ PublicInbox::WwwStream::init($ctx);
+ my $obuf = $ctx->{obuf} = _msg_page_prepare_obuf($eml, $ctx);
+ if (length($$obuf)) {
+ multipart_text_as_html($eml, $ctx);
+ $$obuf .= '</pre><hr>';