about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchMsg.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/SearchMsg.pm')
-rw-r--r--lib/PublicInbox/SearchMsg.pm39
1 files changed, 19 insertions, 20 deletions
diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm
index 14a62eb6..03df7ab4 100644
--- a/lib/PublicInbox/SearchMsg.pm
+++ b/lib/PublicInbox/SearchMsg.pm
@@ -31,13 +31,14 @@ sub load_doc {
         my ($class, $doc) = @_;
         my $data = $doc->get_data;
         $data = $enc_utf8->decode($data);
-        my ($mid, $subj, $from, $date) = split(/\n/, $data);
+        my ($mid, $subj, $from, $date, $refs) = split(/\n/, $data);
         bless {
                 doc => $doc,
                 mid => $mid,
                 subject => $subj,
                 date => $date,
                 from_name => $from,
+                references_sorted => $refs,
         }, $class;
 }
 
@@ -78,17 +79,16 @@ sub ts {
         my ($self) = @_;
         my $ts = $self->{ts};
         return $ts if $ts;
-        $self->{date} = undef;
-        $self->date;
-        $self->{ts};
+        $self->{ts} = eval {
+                str2time($self->date || $self->mime->header('Date'))
+        } || 0;
 }
 
 sub date {
         my ($self) = @_;
         my $date = $self->{date};
         return $date if $date;
-        my $ts = eval { str2time($self->mime->header('Date')) } || 0;
-        $self->{ts} = $ts;
+        my $ts = eval { str2time($self->mime->header('Date')) };
         $self->{date} = POSIX::strftime('%Y-%m-%d %H:%M', gmtime($ts));
 }
 
@@ -98,7 +98,14 @@ sub to_doc_data {
         $self->mid . "\n" .
         $self->subject . "\n" .
         $self->from_name . "\n".
-        $self->date;
+        $self->date . "\n" .
+        $self->references_sorted;
+}
+
+sub references_sorted {
+        my ($self) = @_;
+        my $x = $self->{references_sorted};
+        defined $x ? $x : '';
 }
 
 sub ensure_metadata {
@@ -117,12 +124,7 @@ sub ensure_metadata {
 
                 if ($val =~ s/$PFX2TERM_RE//o) {
                         my $field = $PublicInbox::Search::PFX2TERM_RMAP{$1};
-                        if ($field eq 'references') {
-                                my $refs = $self->{references} ||= [];
-                                push @$refs, $val;
-                        } else {
-                                $self->{$field} = $val;
-                        }
+                        $self->{$field} = $val;
                 }
         }
 }
@@ -138,14 +140,11 @@ sub mini_mime {
                 'X-PI-TS' => $self->ts,
                 'Message-ID' => "<$self->{mid}>",
         );
-        if (my $refs = $self->{references}) {
-                push @h, References => '<' . join('> <', @$refs) . '>';
-        }
-        if (my $irt = $self->{inreplyto}) {
-                push @h, 'In-Reply-To' => "<$irt>";
-        }
 
-        Email::MIME->create(header_str => \@h);
+        my $refs = $self->{references_sorted};
+        my $mime = Email::MIME->create(header_str => \@h);
+        $mime->header_set('References', $refs) if (defined $refs);
+        $mime;
 }
 
 sub mid {