From: Eric Wong Date: Mon, 17 Aug 2015 02:41:10 +0000 (+0000) Subject: favor /t/ to /s/, since subjects may change mid-thread X-Git-Tag: v1.0.0~1063 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=07a768b9de068ddd8f7ea17fe242839c77210510;p=public-inbox.git favor /t/ to /s/, since subjects may change mid-thread /t/ always falls back to subject path searching anyways, so there's little lost besides perhaps more readable URLs. Unfortunately people still use non-compliant mail clients which fail to set In-Reply-To or References headers :< --- diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index 1a89fbad..5a41beaa 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -76,7 +76,7 @@ sub generate_html_index { $th->order(*PublicInbox::Thread::sort_ts); # except we sort top-level messages reverse chronologically - my $state = [ undef, {}, $first, 0 ]; + my $state = [ $args->{srch}, {}, $first, 0 ]; for (PublicInbox::Thread::rsort_ts($th->rootset)) { dump_msg($_, 0, \$html, $state) } diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 47082431..49609351 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -48,7 +48,7 @@ sub feed_entry { # state = [ time, seen = {}, first_commit, page_nr = 0 ] sub index_entry { my (undef, $mime, $level, $state) = @_; - my (undef, $seen, $first_commit) = @$state; + my ($srch, $seen, $first_commit) = @$state; my $midx = $state->[3]++; my ($prev, $next) = ($midx - 1, $midx + 1); my $rv = ''; @@ -75,10 +75,26 @@ sub index_entry { my $more = 'permalink'; if ($root_anchor) { $path = '../'; - $subj = "$subj" if $root_anchor eq $id; } else { $path = ''; } + my $href = $mid->as_href; + my $irt = $header_obj->header_raw('In-Reply-To'); + my ($anchor_idx, $anchor, $t_anchor); + if (defined $irt) { + $anchor_idx = anchor_for($irt); + $anchor = $seen->{$anchor_idx}; + $t_anchor = T_ANCHOR; + } else { + $t_anchor = ''; + } + + if (defined $srch) { + $subj = "$subj"; + } + if ($root_anchor && $root_anchor eq $id) { + $subj = "$subj"; + } my $ts = $mime->header('X-PI-TS'); my $fmt = '%Y-%m-%d %H:%M UTC'; @@ -92,16 +108,6 @@ sub index_entry { } $rv .= "\n\n"; - my $irt = $header_obj->header_raw('In-Reply-To'); - my ($anchor_idx, $anchor, $t_anchor); - if (defined $irt) { - $anchor_idx = anchor_for($irt); - $anchor = $seen->{$anchor_idx}; - $t_anchor = T_ANCHOR; - } else { - $t_anchor = ''; - } - my $href = $mid->as_href; my $mhref = "${path}m/$href.html"; my $fhref = "${path}f/$href.html"; # scan through all parts, looking for displayable text @@ -126,8 +132,8 @@ sub index_entry { $rv .= " parent"; } - if ($first_commit) { - $rv .= " thread"; + if ($srch) { + $rv .= " thread"; } $rv . "\n\n"; @@ -145,7 +151,7 @@ sub thread_html { my $th = PublicInbox::Thread->new(@$msgs); $th->thread; $th->order(*PublicInbox::Thread::sort_ts); - my $state = [ undef, { root_anchor => anchor_for($mid) }, undef, 0 ]; + my $state = [ $srch, { root_anchor => anchor_for($mid) }, undef, 0 ]; thread_entry(\$rv, $state, $_, 0) for $th->rootset; my $final_anchor = $state->[3]; my $next = "end of thread\n"; @@ -165,7 +171,7 @@ sub subject_path_html { my $th = PublicInbox::Thread->new(@$msgs); $th->thread; $th->order(*PublicInbox::Thread::sort_ts); - my $state = [ undef, { root_anchor => 'dummy' }, undef, 0 ]; + my $state = [ $srch, { root_anchor => 'dummy' }, undef, 0 ]; thread_entry(\$rv, $state, $_, 0) for $th->rootset; my $final_anchor = $state->[3]; my $next = "end of thread\n"; @@ -340,6 +346,10 @@ sub headers_to_html_header { my $rv = ""; my @title; + my $header_obj = $mime->header_obj; + my $mid = $header_obj->header_raw('Message-ID'); + $mid = PublicInbox::Hval->new_msgid($mid); + my $mid_href = $mid->as_href; foreach my $h (qw(From To Cc Subject Date)) { my $v = $mime->header($h); defined($v) && length($v) or next; @@ -351,8 +361,7 @@ sub headers_to_html_header { } elsif ($h eq 'Subject') { $title[0] = $v->as_html; if ($srch) { - my $path = $srch->subject_path($v->raw); - $rv .= "$h: "; + $rv .= "$h: "; $rv .= $v->as_html . "\n"; next; } @@ -361,13 +370,9 @@ sub headers_to_html_header { } - my $header_obj = $mime->header_obj; - my $mid = $header_obj->header_raw('Message-ID'); - $mid = PublicInbox::Hval->new_msgid($mid); $rv .= 'Message-ID: <' . $mid->as_html . '> '; - my $href = $mid->as_href; - $href = "../m/$href" unless $full_pfx; - $rv .= "(raw)\n"; + $mid_href = "../m/$mid_href" unless $full_pfx; + $rv .= "(raw)\n"; my $irt = $header_obj->header_raw('In-Reply-To'); if (defined $irt) { diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index bbd438a2..50215095 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -126,8 +126,10 @@ sub get_atom { sub get_index { my ($ctx, $cgi, $top) = @_; require PublicInbox::Feed; + my $srch = searcher($ctx); [ 200, [ 'Content-Type' => 'text/html; charset=UTF-8' ], [ PublicInbox::Feed->generate_html_index({ + srch => $srch, git_dir => $ctx->{git_dir}, listname => $ctx->{listname}, pi_config => $pi_config,