about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-06-12 04:46:38 +0000
committerEric Wong <e@80x24.org>2016-06-13 21:43:02 +0000
commit31afda256c813443062e0504213d41732e50ee45 (patch)
treeebc5eae99de8fd19fcd051f4b18fea4dbfb1c2a9 /lib
parent9dc61f9132a7c4ac4a4d067cdd48efb7c28de102 (diff)
downloadpublic-inbox-31afda256c813443062e0504213d41732e50ee45.tar.gz
We need to ensure we show the message body ASAP since
the thread generation via Xapian could take a while
and maybe even raise an exception or crash.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/View.pm27
-rw-r--r--lib/PublicInbox/WWW.pm2
2 files changed, 22 insertions, 7 deletions
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 2057face..534f85ef 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -9,6 +9,7 @@ use warnings;
 use URI::Escape qw/uri_escape_utf8/;
 use Date::Parse qw/str2time/;
 use Encode::MIME::Header;
+use Plack::Util;
 use PublicInbox::Hval qw/ascii_html/;
 use PublicInbox::Linkify;
 use PublicInbox::MID qw/mid_clean id_compress mid2path mid_mime/;
@@ -26,12 +27,26 @@ sub msg_html {
         my ($ctx, $mime, $footer) = @_;
         $footer = defined($footer) ? "\n$footer" : '';
         my $hdr = $mime->header_obj;
-        headers_to_html_header($hdr, $ctx) .
-                multipart_text_as_html($mime, '') .
-                '</pre><hr /><pre>' .
-                html_footer($hdr, 1, $ctx) .
-                '</pre>' . msg_reply($ctx, $hdr) .
-                '<hr /><pre>'.  $footer . '</pre></body></html>';
+        my $n = 0;
+        Plack::Util::inline_object(
+                close => sub {}, # noop
+                getline => sub {
+                        my $nr = $n++;
+                        if ($nr == 0) {
+                                headers_to_html_header($hdr, $ctx) .
+                                        multipart_text_as_html($mime, '') .
+                                        '</pre><hr />'
+                        } elsif ($nr == 1) {
+                                '<pre>' .
+                                        html_footer($hdr, 1, $ctx) .
+                                        '</pre>' . msg_reply($ctx, $hdr) .
+                                        '<hr /><pre>'.  $footer .
+                                        '</pre></body></html>'
+                        } else {
+                                undef
+                        }
+                }
+        )
 }
 
 # /$INBOX/$MESSAGE_ID/#R
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 5fa4e380..c25deff3 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -228,7 +228,7 @@ sub get_mid_html {
         my $mime = Email::MIME->new($x);
         searcher($ctx);
         [ 200, [ 'Content-Type' => 'text/html; charset=UTF-8' ],
-          [ PublicInbox::View::msg_html($ctx, $mime, $foot) ] ];
+          PublicInbox::View::msg_html($ctx, $mime, $foot) ];
 }
 
 # /$INBOX/$MESSAGE_ID/t/