]> Sergey Matveev's repositories - public-inbox.git/commitdiff
smsg: use capitalization for header retrieval
authorEric Wong <e@yhbt.net>
Thu, 7 May 2020 21:05:47 +0000 (21:05 +0000)
committerEric Wong <e@yhbt.net>
Sat, 9 May 2020 08:59:10 +0000 (08:59 +0000)
PublicInbox::Eml will have case-sensitive memoization to
avoid the need to call `lc' to retrieve common headers,
so ensure we call $mime->header() with the common
capitalization.

Unfortunately, we need to continue using lowercase for field
names for smsg, since NNTP requires case-insensitivity when
matching headers and method dispatch is expensive.

lib/PublicInbox/Smsg.pm

index 7c90b92dabbcd7d764703e46b7bc31641aa1f526..7a2766d8ff8401e3b94b32e109b250f44ddc5da2 100644 (file)
@@ -106,20 +106,18 @@ sub lines ($) { $_[0]->{lines} }
 
 sub __hdr ($$) {
        my ($self, $field) = @_;
-       my $val = $self->{$field};
-       return $val if defined $val;
-
-       my $mime = $self->{mime} or return;
-       my @raw = $mime->header($field);
-       $val = join(', ', @raw);
-       $val =~ tr/\t\n/  /;
-       $val =~ tr/\r//d;
-       $self->{$field} = $val;
+       $self->{lc($field)} //= do {
+               my $mime = $self->{mime} or return;
+               my $val = join(', ', $mime->header($field));
+               $val =~ tr/\r//d;
+               $val =~ tr/\t\n/  /;
+               $val;
+       };
 }
 
-sub subject ($) { __hdr($_[0], 'subject') }
-sub to ($) { __hdr($_[0], 'to') }
-sub cc ($) { __hdr($_[0], 'cc') }
+sub subject ($) { __hdr($_[0], 'Subject') }
+sub to ($) { __hdr($_[0], 'To') }
+sub cc ($) { __hdr($_[0], 'Cc') }
 
 # no strftime, that is locale-dependent and not for RFC822
 my @DoW = qw(Sun Mon Tue Wed Thu Fri Sat);
@@ -137,7 +135,7 @@ sub date ($) {
 
 sub from ($) {
        my ($self) = @_;
-       my $from = __hdr($self, 'from');
+       my $from = __hdr($self, 'From');
        if (defined $from && !defined $self->{from_name}) {
                my @n = PublicInbox::Address::names($from);
                $self->{from_name} = join(', ', @n);