lib/PublicInbox/View.pm | 35 ++++++++++++++++++++--------------- diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 466ec6cfdad1c0677211878498d0db288e170247..11ed2d76101376a81ba11d70a20b42ecf479bb6d 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -20,6 +20,7 @@ use PublicInbox::WwwStream qw(html_oneshot); use PublicInbox::Reply; use PublicInbox::ViewDiff qw(flush_diff); use PublicInbox::Eml; +use POSIX qw(strftime); use Time::Local qw(timegm); use PublicInbox::Smsg qw(subject_normalized); use PublicInbox::ContentHash qw(content_hash); @@ -1161,9 +1162,10 @@ return 404; } my @out; - my $ibx = $ctx->{ibx}; - my $obfs_ibx = $ibx->{obfuscate} ? $ibx : undef; - + my $obfs_ibx = $ctx->{ibx}->{obfuscate} ? $ctx->{ibx} : undef; + if (my $note = delete $ctx->{t_note}) { + push @out, $note; # "messages from ... to ..." + } # sort by recency, this allows new posts to "bump" old topics... foreach my $topic (sort { $b->[0] <=> $a->[0] } @$order) { my ($ds, $n, $seen, $top_subj, @extra) = @$topic; @@ -1222,7 +1224,7 @@ if ($prev) { # aligned padding for: 'next (older) | ' $next = $next ? "$next | " : ' | '; $prev .= qq[ | latest]; } - ($next || $prev) ? "
page: $next$prev" : ''; + ($next || $prev) ? "
page: $next$prev" : ''; } sub paginate_recent ($$) { @@ -1238,32 +1240,35 @@ $t =~ s/\A([0-9]{8,14})-// and $after = str2ts($1); $t =~ /\A([0-9]{8,14})\z/ and $before = str2ts($1); my $msgs = $ctx->{ibx}->over->recent($opts, $after, $before); - my $nr = scalar @$msgs; - if ($nr < $lim && defined($after)) { + if (defined($after) && scalar(@$msgs) < $lim) { $after = $before = undef; $msgs = $ctx->{ibx}->over->recent($opts); - $nr = scalar @$msgs; } - my $more = $nr == $lim; + my $more = scalar(@$msgs) == $lim; my ($newest, $oldest); - if ($nr) { + if (@$msgs) { $newest = $msgs->[0]->{ts}; $oldest = $msgs->[-1]->{ts}; # if we only had $after, our SQL query in ->recent ordered if ($newest < $oldest) { ($oldest, $newest) = ($newest, $oldest); - $more = 0 if defined($after) && $after < $oldest; + $more = undef if defined($after) && $after < $oldest; + } + if (defined($after // $before)) { + my $n = strftime('%Y-%m-%d %H:%M:%S', gmtime($newest)); + my $o = strftime('%Y-%m-%d %H:%M:%S', gmtime($oldest)); + $ctx->{t_note} = <