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.pm68
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) {