diff options
Diffstat (limited to 'lib/PublicInbox/SearchMsg.pm')
-rw-r--r-- | lib/PublicInbox/SearchMsg.pm | 68 |
1 files changed, 22 insertions, 46 deletions
diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm index a0899159..5779d1e2 100644 --- a/lib/PublicInbox/SearchMsg.pm +++ b/lib/PublicInbox/SearchMsg.pm @@ -7,14 +7,11 @@ package PublicInbox::SearchMsg; use strict; use warnings; use Search::Xapian; -use Email::Address qw//; use POSIX qw//; use Date::Parse qw/str2time/; use PublicInbox::MID qw/mid_clean/; -use Encode qw/find_encoding/; -my $enc_utf8 = find_encoding('UTF-8'); +use PublicInbox::Address; our $PFX2TERM_RE = undef; -use constant EPOCH_822 => 'Thu, 01 Jan 1970 00:00:00 +0000'; use POSIX qw(strftime); sub new { @@ -37,10 +34,10 @@ sub get_val ($$) { sub load_doc { my ($class, $doc) = @_; - my $data = $doc->get_data; + my $data = $doc->get_data or return; my $ts = get_val($doc, &PublicInbox::Search::TS); - $data = $enc_utf8->decode($data); - my ($subj, $from, $refs, $to, $cc) = split(/\n/, $data); + utf8::decode($data); + my ($subj, $from, $refs, $to, $cc, $blob) = split(/\n/, $data); bless { doc => $doc, subject => $subj, @@ -49,6 +46,7 @@ sub load_doc { references => $refs, to => $to, cc => $cc, + blob => $blob, }, $class; } @@ -80,16 +78,15 @@ sub date ($) { return $date if defined $date; my $ts = $self->{ts}; return unless defined $ts; - $self->{date} = strftime('%a, %d %b %Y %T %z', gmtime($ts)); + $self->{date} = strftime('%a, %d %b %Y %T +0000', gmtime($ts)); } sub from ($) { my ($self) = @_; my $from = __hdr($self, 'from'); if (defined $from && !defined $self->{from_name}) { - $from =~ tr/\t\r\n/ /; - my @from = Email::Address->parse($from); - $self->{from_name} = $from[0]->name; + my @n = PublicInbox::Address::names($from); + $self->{from_name} = join(', ', @n); } $from; } @@ -108,9 +105,11 @@ sub ts { } sub to_doc_data { - my ($self) = @_; - join("\n", $self->subject, $self->from, $self->references, - $self->to, $self->cc); + my ($self, $blob) = @_; + my @rows = ($self->subject, $self->from, $self->references, + $self->to, $self->cc); + push @rows, $blob if defined $blob; + join("\n", @rows); } sub references { @@ -144,38 +143,6 @@ sub ensure_metadata { } } -# for threading only -sub mini_mime { - my ($self) = @_; - $self->ensure_metadata; - my @hs = ( - 'Subject' => $self->subject, - 'X-PI-From' => $self->from_name, - ); - - my @h = ( - # prevent Email::Simple::Creator from running, - # this header is useless for threading as we use X-PI-TS - # for sorting and display: - 'Date' => EPOCH_822, - 'Message-ID' => "<$self->{mid}>", - 'X-PI-TS' => $self->ts, - ); - if (my $refs = $self->{references}) { - push @h, References => $refs; - } - my $mime = Email::MIME->create(header_str => \@hs, header => \@h); - my $h = $mime->header_obj; - - # set these headers manually since Encode::encode('MIME-Q', ...) - # will add spaces to long values when using header_str above. - - # drop useless headers Email::MIME set for us - $h->header_set('Date'); - $h->header_set('MIME-Version'); - $mime; -} - sub mid ($;$) { my ($self, $mid) = @_; @@ -191,6 +158,15 @@ sub mid ($;$) { sub _extract_mid { mid_clean(mid_mime($_[0]->mime)) } +sub blob { + my ($self, $x40) = @_; + if (defined $x40) { + $self->{blob} = $x40; + } else { + $self->{blob}; + } +} + sub mime { my ($self, $mime) = @_; if (defined $mime) { |