use Email::Simple qw//;
use POSIX qw//;
use Date::Parse qw/str2time/;
-use PublicInbox::MID qw/mid_clean mid_compressed/;
+use PublicInbox::MID qw/mid_clean mid_compress/;
use Encode qw/find_encoding/;
my $enc_utf8 = find_encoding('UTF-8');
our $PFX2TERM_RE = undef;
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;
}
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));
}
$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 {
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;
}
}
}
'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 {
my ($self) = @_;
my $mid = $self->mime->header('Message-ID');
- $mid ? mid_compressed(mid_clean($mid)) : $mid;
+ $mid ? mid_compress(mid_clean($mid)) : $mid;
}
sub mime {