use Plack::Util;
use PublicInbox::Hval qw/ascii_html/;
use PublicInbox::Linkify;
-use PublicInbox::MID qw/mid_clean id_compress mid2path mid_mime/;
+use PublicInbox::MID qw/mid_clean id_compress mid_mime/;
use PublicInbox::MsgIter;
use PublicInbox::Address;
use PublicInbox::WwwStream;
cur => $mid,
prev_attr => '',
prev_level => 0,
+ upfx => "$tpfx../",
};
for (thread_results(load_results($sres))->rootset) {
- skel_dump($dst, $state, $tpfx, $_, 0);
+ skel_dump($dst, $state, $_, 0);
}
$ctx->{next_msg} = $state->{next_msg};
$ctx->{parent_msg} = $parent;
# lazy load the full message from mini_mime:
$mime = eval {
- my $path = mid2path(mid_clean(mid_mime($mime)));
- Email::MIME->new($state->{ctx}->{git}->cat_file('HEAD:'.$path));
+ my $mid = mid_clean(mid_mime($mime));
+ $state->{ctx}->{-inbox}->msg_by_mid($mid);
} or return;
+ $mime = Email::MIME->new($mime);
thread_html_head($mime, $state) if $state->{anchor_idx} == 0;
if (my $ghost = delete $state->{ghost}) {
sub fmt_ts { POSIX::strftime('%Y-%m-%d %k:%M', gmtime($_[0])) }
sub _skel_header {
- my ($dst, $state, $upfx, $hdr, $level) = @_;
+ my ($dst, $state, $hdr, $level) = @_;
my $cur = $state->{cur};
my $mid = mid_clean($hdr->header_raw('Message-ID'));
$s = $s->as_html;
}
my $m = PublicInbox::Hval->new_msgid($mid);
- $m = $upfx . '../' . $m->as_href . '/';
+ $m = $state->{upfx} . $m->as_href . '/';
$$dst .= "$pfx<a\nhref=\"$m\">";
$$dst .= defined($s) ? "$s</a> $f\n" : "$f</a>\n";
}
sub skel_dump {
- my ($dst, $state, $upfx, $node, $level) = @_;
+ my ($dst, $state, $node, $level) = @_;
return unless $node;
if (my $mime = $node->message) {
my $hdr = $mime->header_obj;
my $mid = mid_clean($hdr->header_raw('Message-ID'));
- _skel_header($dst, $state, $upfx, $hdr, $level);
+ _skel_header($dst, $state, $hdr, $level);
} else {
my $mid = $node->messageid;
if ($mid eq 'subject dummy') {
$$dst .= ' [not found] ';
$$dst .= indent_for($level) . th_pfx($level);
$mid = PublicInbox::Hval->new_msgid($mid);
- my $href = "$upfx../" . $mid->as_href . '/';
+ my $href = $state->{upfx} . $mid->as_href . '/';
my $html = $mid->as_html;
$$dst .= qq{<<a\nhref="$href">$html</a>>\n};
}
}
- skel_dump($dst, $state, $upfx, $node->child, $level+1);
- skel_dump($dst, $state, $upfx, $node->next, $level);
+ skel_dump($dst, $state, $node->child, $level+1);
+ skel_dump($dst, $state, $node->next, $level);
}
sub sort_ts {
} @_;
}
+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 ];