- my ($ctx, $mime) = @_;
- my $hdr = $mime->header_obj;
- my $tip = _msg_html_prepare($hdr, $ctx);
- PublicInbox::WwwStream->response($ctx, 200, sub {
- my ($nr, undef) = @_;
- if ($nr == 1) {
- $tip . multipart_text_as_html($mime, '') . '</pre><hr>'
- } elsif ($nr == 2) {
- # fake an EOF if generating the footer fails;
- # we want to at least show the message if something
- # here crashes:
- eval {
- '<pre>' . html_footer($hdr, 1, $ctx) .
- '</pre>' . msg_reply($ctx, $hdr)
- };
+ my ($ctx, $mime, $more, $smsg) = @_;
+ my $ibx = $ctx->{-inbox};
+ $ctx->{-obfs_ibx} = $ibx->{obfuscate} ? $ibx : undef;
+ my $hdr = $ctx->{hdr} = $mime->header_obj;
+ $ctx->{tip} = _msg_html_prepare($hdr, $ctx, $more, 0);
+ $ctx->{more} = $more;
+ $ctx->{end_nr} = 2;
+ $ctx->{smsg} = $smsg;
+ $ctx->{mime} = $mime;
+ PublicInbox::WwwStream->response($ctx, 200, \&msg_html_i);
+}
+
+sub msg_page {
+ my ($ctx) = @_;
+ my $mid = $ctx->{mid};
+ my $ibx = $ctx->{-inbox};
+ my ($first, $more);
+ my $smsg;
+ if (my $over = $ibx->over) {
+ my ($id, $prev);
+ $smsg = $over->next_by_mid($mid, \$id, \$prev);
+ $first = $ibx->msg_by_smsg($smsg) if $smsg;
+ if ($first) {
+ my $next = $over->next_by_mid($mid, \$id, \$prev);
+ $more = [ $id, $prev, $next ] if $next;
+ }
+ return unless $first;
+ } else {
+ $first = $ibx->msg_by_mid($mid) or return;
+ }
+ msg_html($ctx, PublicInbox::MIME->new($first), $more, $smsg);
+}
+
+sub msg_html_more {
+ my ($ctx, $more, $nr) = @_;
+ my $str = eval {
+ my ($id, $prev, $smsg) = @$more;
+ my $mid = $ctx->{mid};
+ my $ibx = $ctx->{-inbox};
+ $smsg = $ibx->smsg_mime($smsg);
+ my $next = $ibx->over->next_by_mid($mid, \$id, \$prev);
+ @$more = $next ? ($id, $prev, $next) : ();
+ if ($smsg) {
+ my $upfx = '../' . mid_escape($smsg->mid) . '/';
+ my $mime = delete $smsg->{mime};
+ _msg_html_prepare($mime->header_obj, $ctx, $more, $nr) .
+ multipart_text_as_html($mime, $upfx, $ctx) .
+ '</pre><hr>'