my $msgs = load_results($res);
my $nr = scalar @$msgs;
return $rv if $nr == 0;
- require PublicInbox::Thread;
- my $th = PublicInbox::Thread->new(@$msgs);
- $th->thread;
- $th->order(*PublicInbox::Thread::sort_ts);
+ my $th = thread_results($msgs);
my $state = [ $srch, { root_anchor => anchor_for($mid) }, undef, 0 ];
{
require PublicInbox::GitCatFile;
$rv .= "<hr />" . PRE_WRAP . $next . $foot . "</pre>";
}
-sub subject_path_html {
- my (undef, $ctx, $foot, $srch) = @_;
- my $path = $ctx->{subject_path};
- my $res = $srch->get_subject_path($path);
- my $rv = '';
- my $msgs = load_results($res);
- my $nr = scalar @$msgs;
- return $rv if $nr == 0;
- require PublicInbox::Thread;
- my $th = PublicInbox::Thread->new(@$msgs);
- $th->thread;
- $th->order(*PublicInbox::Thread::sort_ts);
- my $state = [ $srch, { root_anchor => 'dummy' }, undef, 0 ];
- {
- require PublicInbox::GitCatFile;
- my $git = PublicInbox::GitCatFile->new($ctx->{git_dir});
- thread_entry(\$rv, $git, $state, $_, 0) for $th->rootset;
- }
- my $final_anchor = $state->[3];
- my $next = "<a\nid=\"s$final_anchor\">end of thread</a>\n";
-
- $rv .= "<hr />" . PRE_WRAP . $next . $foot . "</pre>";
-}
-
# only private functions below.
sub index_walk {
sub thread_followups {
my ($dst, $root, $res) = @_;
- my $msgs = load_results($res);
- require PublicInbox::Thread;
$root->header_set('X-PI-TS', '0');
- my $th = PublicInbox::Thread->new($root, @$msgs);
- $th->thread;
- $th->order(*PublicInbox::Thread::sort_ts);
+ my $msgs = load_results($res);
+ push @$msgs, $root;
+ my $th = thread_results($msgs);
my $srch = $res->{srch};
my $subj = $srch->subject_path($root->header('Subject'));
my %seen = ($subj => 1);
defined($ts) ? $ts : 0;
}
+sub thread_results {
+ my ($msgs) = @_;
+ require PublicInbox::Thread;
+ my $th = PublicInbox::Thread->new(@$msgs);
+ $th->thread;
+ $th->order(*PublicInbox::Thread::sort_ts);
+ $th
+}
+
1;
} elsif ($path_info =~ m!$LISTNAME_RE/t/(\S+)\.html\z!o) {
invalid_list_mid(\%ctx, $1, $2) || get_thread(\%ctx, $cgi);
- # subject_path display
- } elsif ($path_info =~ m!$LISTNAME_RE/s/(\S+)\.html\z!o) {
- my $sp = $2;
- invalid_list(\%ctx, $1) || get_subject_path(\%ctx, $cgi, $sp);
-
} elsif ($path_info =~ m!$LISTNAME_RE/f/\S+\.txt\z!o) {
invalid_list_mid(\%ctx, $1, $2) ||
redirect_mid_txt(\%ctx, $cgi);
[ $body ] ];
}
-# /$LISTNAME/s/$SUBJECT_PATH.html
-sub get_subject_path {
- my ($ctx, $cgi, $sp) = @_;
- $ctx->{subject_path} = $sp;
- my $srch = searcher($ctx) or return need_search($ctx);
- require PublicInbox::View;
- my $foot = footer($ctx);
- my $body = PublicInbox::View->subject_path_html($ctx, $foot, $srch) or
- return r404();
- [ 200, [ 'Content-Type' => 'text/html; charset=UTF-8' ],
- [ $body ] ];
-}
-
sub self_url {
my ($cgi) = @_;
ref($cgi) eq 'CGI' ? $cgi->self_url : $cgi->uri->as_string;