From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-3.3 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, RP_MATCHES_RCVD,URIBL_BLOCKED shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 63F871F81C for ; Mon, 17 Aug 2015 03:38:24 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/9] favor /t/ to /s/, since subjects may change mid-thread Date: Mon, 17 Aug 2015 03:38:10 +0000 Message-Id: <1439782697-16412-3-git-send-email-e@80x24.org> In-Reply-To: <1439782697-16412-1-git-send-email-e@80x24.org> References: <1439782697-16412-1-git-send-email-e@80x24.org> List-Id: /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 :< --- lib/PublicInbox/Feed.pm | 2 +- lib/PublicInbox/View.pm | 53 +++++++++++++++++++++++++++---------------------- lib/PublicInbox/WWW.pm | 2 ++ 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index 1a89fba..5a41bea 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 4708243..4960935 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 bbd438a..5021509 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, -- EW