$smsg;
}
+sub lookup_mail { # no ghosts!
+ my ($self, $mid) = @_;
+ my $smsg = lookup_message($self, $mid);
+ PublicInbox::SearchMsg->load_doc($smsg->{doc});
+}
+
sub find_unique_doc_id {
my ($self, $term, $value) = @_;
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);
utf8::decode($data);
my ($subj, $from, $refs, $to, $cc) = split(/\n/, $data);
} @_;
}
+sub _tryload_ghost ($$) {
+ my ($srch, $node) = @_;
+ my $mid = $node->messageid;
+ my $smsg = $srch->lookup_mail($mid) or return;
+ $smsg->mini_mime;
+}
+
# accumulate recent topics if search is supported
# returns 1 if done, undef if not
sub add_topic {
my ($state, $node, $level) = @_;
return unless $node;
my $child_adjust = 1;
-
- if (my $x = $node->message) {
+ my $srch = $state->{srch};
+ my $x = $node->message || _tryload_ghost($srch, $node);
+ if ($x) {
$x = $x->header_obj;
my $subj;
$subj = $x->header('Subject');
- $subj = $state->{srch}->subject_normalized($subj);
+ $subj = $srch->subject_normalized($subj);
if (++$state->{subjs}->{$subj} == 1) {
push @{$state->{order}}, [ $level, $subj ];