X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FView.pm;h=81e83d97738256511a530bc4093bfd2793267eb8;hb=956ede734d7c2e8d0a3003c6e2d554114586643e;hp=ad94977a244693c9531403780b733d9997f738f2;hpb=b223e6f49debb99b9132bc85d97a065ebcee00b9;p=public-inbox.git diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index ad94977a..81e83d97 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -720,7 +720,7 @@ sub ghost_parent { sub indent_for { my ($level) = @_; - INDENT x ($level - 1); + $level ? INDENT x ($level - 1) : ''; } sub load_results { @@ -755,6 +755,25 @@ sub _msg_date { sub fmt_ts { POSIX::strftime('%Y-%m-%d %k:%M', gmtime($_[0])) } +sub dedupe_subject { + my ($prev_subj, $subj, $val) = @_; + + my $omit = ''; # '"' denotes identical text omitted + my (@prev_pop, @curr_pop); + while (@$prev_subj && @$subj && $subj->[-1] eq $prev_subj->[-1]) { + push(@prev_pop, pop(@$prev_subj)); + push(@curr_pop, pop(@$subj)); + $omit ||= $val; + } + pop @$subj if @$subj && $subj->[-1] =~ /^re:\s*/i; + if (scalar(@curr_pop) == 1) { + $omit = ''; + push @$prev_subj, @prev_pop; + push @$subj, @curr_pop; + } + $omit; +} + sub skel_dump { my ($ctx, $level, $node) = @_; my $smsg = $node->{smsg} or return _skel_ghost($ctx, $level, $node); @@ -798,13 +817,7 @@ sub skel_dump { # so we do not show redundant text at the end. my $prev_subj = $ctx->{prev_subj} || []; $ctx->{prev_subj} = [ @subj ]; - my $omit = ''; # '"' denotes identical text omitted - while (@$prev_subj && @subj && $subj[-1] eq $prev_subj->[-1]) { - pop @$prev_subj; - pop @subj; - $omit ||= '" '; - } - pop @subj if @subj && $subj[-1] =~ /^re:\s*/i; + my $omit = dedupe_subject($prev_subj, \@subj, '" '); my $end; if (@subj) { my $subj = join(' ', @subj); @@ -944,14 +957,7 @@ sub dump_topics { $mid = delete $seen->{$subj}; my @subj = split(/ /, $srch->subject_normalized($subj)); my @next_prev = @subj; # full copy - my $omit = ''; # '"' denotes identical text omitted - while (@$prev_subj && @subj && - $subj[-1] eq $prev_subj->[-1]) { - pop @$prev_subj; - pop @subj; - $omit ||= ' "'; - } - pop @subj if @subj && $subj[-1] =~ /^re:\s*/i; + my $omit = dedupe_subject($prev_subj, \@subj, ' "'); $prev_subj = \@next_prev; $subj = ascii_html(join(' ', @subj)); obfuscate_addrs($obfs_ibx, $subj) if $obfs_ibx;