]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SearchMsg.pm
searchmsg: document why we store To: and Cc: for NNTP
[public-inbox.git] / lib / PublicInbox / SearchMsg.pm
index de1fd1313aaf28e035f4bb93d2ae9e7e8135a1a6..e55d40193a095802e7388ab8e832d18f1474e90a 100644 (file)
@@ -6,7 +6,6 @@
 package PublicInbox::SearchMsg;
 use strict;
 use warnings;
-use Search::Xapian;
 use PublicInbox::MID qw/mid_clean mid_mime/;
 use PublicInbox::Address;
 use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
@@ -24,6 +23,13 @@ sub wrap {
        bless { doc => $doc, mime => undef, mid => $mid }, $class;
 }
 
+sub get {
+       my ($class, $head, $db, $mid) = @_;
+       my $doc_id = $head->get_docid;
+       my $doc = $db->get_document($doc_id);
+       load_expand(wrap($class, $doc, $mid))
+}
+
 sub get_val ($$) {
        my ($doc, $col) = @_;
        Search::Xapian::sortable_unserialise($doc->get_value($col));
@@ -35,8 +41,12 @@ sub load_from_data ($$) {
        $self->{subject} = $subj;
        $self->{from} = $from;
        $self->{references} = $refs;
+
+       # To: and Cc: are stored to optimize HDR/XHDR in NNTP since
+       # some NNTP clients will use that for message displays.
        $self->{to} = $to;
        $self->{cc} = $cc;
+
        $self->{blob} = $blob;
        $self->{mid} = $mid0;
 }
@@ -62,7 +72,7 @@ sub load_doc {
 sub bytes ($) { get_val($_[0]->{doc}, &PublicInbox::Search::BYTES) }
 sub lines ($) { get_val($_[0]->{doc}, &PublicInbox::Search::LINES) }
 sub num ($) {
-       $_[0]->{num} ||= get_val($_[0]->{doc}, PublicInbox::Search::NUM)
+       $_[0]->{num} ||= get_val($_[0]->{doc}, PublicInbox::Search::NUM())
 }
 
 sub __hdr ($$) {
@@ -158,9 +168,10 @@ sub mid ($;$) {
                $self->{mid} = $mid;
        } elsif (my $rv = $self->{mid}) {
                $rv;
+       } elsif ($self->{doc}) {
+               $self->{mid} = _get_term_val($self, 'Q', qr/\AQ/);
        } else {
-               $self->{mid} = _get_term_val($self, 'Q', qr/\AQ/) ||
-                               $self->_extract_mid;
+               $self->_extract_mid; # v1 w/o Xapian
        }
 }