]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/View.pm
doc: watch: expand on NNTP and IMAP-specific knobs
[public-inbox.git] / lib / PublicInbox / View.pm
index 60dad6bac0ec96679c0fb81b91f4f4a6824b73e9..f23bfcc921563006198ba3a0f33ac8f687745af0 100644 (file)
@@ -33,8 +33,7 @@ sub msg_page_i {
                $ctx->{smsg} = $ctx->{over}->next_by_mid(@{$ctx->{next_arg}});
                $ctx->{mhref} = ($ctx->{nr} || $ctx->{smsg}) ?
                                "../${\mid_href($smsg->{mid})}/" : '';
-               my $hdr = $eml->header_obj;
-               my $obuf = $ctx->{obuf} = _msg_page_prepare_obuf($hdr, $ctx);
+               my $obuf = $ctx->{obuf} = _msg_page_prepare_obuf($eml, $ctx);
                multipart_text_as_html($eml, $ctx);
                delete $ctx->{obuf};
                $$obuf .= '</pre><hr>';
@@ -50,14 +49,13 @@ sub no_over_html ($) {
        my ($ctx) = @_;
        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);
+       my $obuf = $ctx->{obuf} = _msg_page_prepare_obuf($eml, $ctx);
        multipart_text_as_html($eml, $ctx);
        delete $ctx->{obuf};
        $$obuf .= '</pre><hr>';
-       eval { $$obuf .= html_footer($ctx, $hdr) };
+       eval { $$obuf .= html_footer($ctx, $eml) };
        html_oneshot($ctx, 200, $obuf);
 }
 
@@ -176,7 +174,7 @@ 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 <pre>
 sub eml_entry {
-       my ($ctx, $eml, $more) = @_;
+       my ($ctx, $eml) = @_;
        my $smsg = delete $ctx->{smsg};
        my $subj = delete $smsg->{subject};
        my $mid_raw = $smsg->{mid};
@@ -199,16 +197,15 @@ sub eml_entry {
        # Deleting these fields saves about 400K as we iterate across 1K msgs
        delete @$smsg{qw(ts blob)};
 
-       my $hdr = $eml->header_obj;
-       my $from = _hdr_names_html($hdr, 'From');
+       my $from = _hdr_names_html($eml, 'From');
        obfuscate_addrs($obfs_ibx, $from) if $obfs_ibx;
        $rv .= "From: $from @ ".fmt_ts($ds)." UTC";
        my $upfx = $ctx->{-upfx};
        my $mhref = $upfx . mid_href($mid_raw) . '/';
        $rv .= qq{ (<a\nhref="$mhref">permalink</a> / };
        $rv .= qq{<a\nhref="${mhref}raw">raw</a>)\n};
-       my $to = fold_addresses(_hdr_names_html($hdr, 'To'));
-       my $cc = fold_addresses(_hdr_names_html($hdr, 'Cc'));
+       my $to = fold_addresses(_hdr_names_html($eml, 'To'));
+       my $cc = fold_addresses(_hdr_names_html($eml, 'Cc'));
        my ($tlen, $clen) = (length($to), length($cc));
        my $to_cc = '';
        if (($tlen + $clen) > COLS) {
@@ -227,7 +224,7 @@ sub eml_entry {
        $rv .= $to_cc;
 
        my $mapping = $ctx->{mapping};
-       if (!$mapping && (defined($irt) || defined($irt = in_reply_to($hdr)))) {
+       if (!$mapping && (defined($irt) || defined($irt = in_reply_to($eml)))) {
                my $href = $upfx . mid_href($irt) . '/';
                my $html = ascii_html($irt);
                $rv .= qq(In-Reply-To: &lt;<a\nhref="$href">$html</a>&gt;\n)
@@ -267,7 +264,8 @@ sub eml_entry {
                $hr = $ctx->{-hr};
        }
 
-       $rv .= $more ? '</pre><hr><pre>' : '</pre>' if $hr;
+       # do we have more messages? start a new <pre> if so
+       $rv .= scalar(@{$ctx->{msgs}}) ? '</pre><hr><pre>' : '</pre>' if $hr;
        $rv;
 }
 
@@ -368,7 +366,7 @@ sub pre_thread  { # walk_thread callback
 sub thread_eml_entry {
        my ($ctx, $eml) = @_;
        my ($beg, $end) = thread_adj_level($ctx, $ctx->{level});
-       $beg . '<pre>' . eml_entry($ctx, $eml, 0) . '</pre>' . $end;
+       $beg . '<pre>' . eml_entry($ctx, $eml) . '</pre>' . $end;
 }
 
 sub next_in_queue ($$) {
@@ -463,7 +461,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, $eml, scalar @{$ctx->{msgs}});
+               return eml_entry($ctx, $eml);
        } else {
                while (my $smsg = shift @{$ctx->{msgs}}) {
                        return $smsg if exists($smsg->{blob});
@@ -625,16 +623,16 @@ sub add_text_body { # callback for each_part
 }
 
 sub _msg_page_prepare_obuf {
-       my ($hdr, $ctx) = @_;
+       my ($eml, $ctx) = @_;
        my $over = $ctx->{-inbox}->over;
        my $obfs_ibx = $ctx->{-obfs_ibx};
        my $rv = '';
-       my $mids = mids_for_index($hdr);
+       my $mids = mids_for_index($eml);
        my $nr = $ctx->{nr}++;
        if ($nr) { # unlikely
                $rv .= '<pre>';
        } else {
-               $ctx->{first_hdr} = $hdr;
+               $ctx->{first_hdr} = $eml->header_obj;
                if ($ctx->{smsg}) {
                        $rv .=
 "<pre>WARNING: multiple messages have this Message-ID\n</pre>";
@@ -643,7 +641,7 @@ sub _msg_page_prepare_obuf {
        }
        $ctx->{-upfx} = '../' if $over;
        my @title; # (Subject[0], From[0])
-       for my $v ($hdr->header('From')) {
+       for my $v ($eml->header('From')) {
                my @n = PublicInbox::Address::names($v);
                $v = ascii_html($v);
                $title[1] //= ascii_html(join(', ', @n));
@@ -654,14 +652,14 @@ sub _msg_page_prepare_obuf {
                $rv .= "From: $v\n" if $v ne '';
        }
        foreach my $h (qw(To Cc)) {
-               for my $v ($hdr->header($h)) {
+               for my $v ($eml->header($h)) {
                        fold_addresses($v);
                        $v = ascii_html($v);
                        obfuscate_addrs($obfs_ibx, $v) if $obfs_ibx;
                        $rv .= "$h: $v\n" if $v ne '';
                }
        }
-       my @subj = $hdr->header('Subject');
+       my @subj = $eml->header('Subject');
        if (@subj) {
                my $v = ascii_html(shift @subj);
                obfuscate_addrs($obfs_ibx, $v) if $obfs_ibx;
@@ -677,7 +675,7 @@ sub _msg_page_prepare_obuf {
                $rv .= qq(<a\nhref="#r"\nid=t></a>) if $over;
                $title[0] = '(no subject)';
        }
-       for my $v ($hdr->header('Date')) {
+       for my $v ($eml->header('Date')) {
                $v = ascii_html($v);
                obfuscate_addrs($obfs_ibx, $v) if $obfs_ibx; # possible :P
                $rv .= "Date: $v\n";
@@ -696,12 +694,12 @@ sub _msg_page_prepare_obuf {
                my $lnk = PublicInbox::Linkify->new;
                my $s = '';
                for my $h (qw(Message-ID X-Alt-Message-ID)) {
-                       $s .= "$h: $_\n" for ($hdr->header_raw($h));
+                       $s .= "$h: $_\n" for ($eml->header_raw($h));
                }
                $lnk->linkify_mids('..', \$s, 1);
                $rv .= $s;
        }
-       $rv .= _parent_headers($hdr, $over);
+       $rv .= _parent_headers($eml, $over);
        $rv .= "\n";
        \$rv;
 }
@@ -1149,7 +1147,7 @@ sub ts2str ($) { strftime('%Y%m%d%H%M%S', gmtime($_[0])) };
 
 sub str2ts ($) {
        my ($yyyy, $mon, $dd, $hh, $mm, $ss) = unpack('A4A2A2A2A2A2', $_[0]);
-       timegm($ss, $mm, $hh, $dd, $mon - 1, $yyyy);
+       timegm($ss || 0, $mm || 0, $hh || 0, $dd, $mon - 1, $yyyy);
 }
 
 sub pagination_footer ($$) {