use Encode::MIME::Header;
use Email::MIME::ContentType qw/parse_content_type/;
use PublicInbox::Hval;
-use PublicInbox::MID qw/mid_clean mid_compress mid2path/;
+use PublicInbox::MID qw/mid_clean id_compress mid2path/;
use Digest::SHA qw/sha1_hex/;
my $SALT = rand;
+my $MBOX_TITLE = 'title="download thread as gzipped mbox"';
require POSIX;
# TODO: make these constants tunable
my $next = "<a\nid=\"s$final_anchor\">";
$next .= $final_anchor == 1 ? 'only message in' : 'end of';
$next .= " thread</a>, back to <a\nhref=\"../../\">index</a>";
- $next .= "\ndownload thread: <a\nhref=\"../t.mbox.gz\">mbox.gz</a>";
+ $next .= "\ndownload thread: ";
+ $next .= "<a\n$MBOX_TITLE\nhref=\"../t.mbox.gz\">mbox.gz</a>";
$next .= " / follow: <a\nhref=\"../t.atom\">Atom feed</a>";
$cb->write("<hr />" . PRE_WRAP . $next . "\n\n". $foot .
"</pre></body></html>");
my ($msgid) = @_;
my $id = $msgid;
if ($id !~ /\A[a-f0-9]{40}\z/) {
- $id = mid_compress(mid_clean($id), 1);
+ $id = id_compress(mid_clean($id), 1);
}
'm' . $id;
}
my $mid = mid_clean($x->header('Message-ID'));
- my $u = $x->header('X-PI-From');
my $ts = $x->header('X-PI-TS');
- $state->{latest}->{$topic} = [ $mid, $u, $ts ];
+ my $exist = $state->{latest}->{$topic};
+ if (!$exist || $exist->[1] < $ts) {
+ $state->{latest}->{$topic} = [ $mid, $ts ];
+ }
} else {
# ghost message, do not bump level
$child_adjust = 0;
while (defined(my $info = shift @$order)) {
my ($level, $subj, $topic) = @$info;
my $n = delete $subjs->{$topic};
- my ($mid, $u, $ts) = @{delete $latest->{$topic}};
+ my ($mid, $ts) = @{delete $latest->{$topic}};
$mid = PublicInbox::Hval->new($mid)->as_href;
$subj = PublicInbox::Hval->new($subj)->as_html;
- $u = PublicInbox::Hval->new($u)->as_html;
$pfx = INDENT x ($level - 1);
my $nl = $level == $prev ? "\n" : '';
my $dot = $level == 0 ? '' : '` ';
my $attr;
$ts = POSIX::strftime('%Y-%m-%d %H:%M', gmtime($ts));
if ($n == 1) {
- $attr = "created by $u @ $ts UTC";
- $n = "\n";
+ $attr = "@ $ts UTC";
+ $n = "";
} else {
# $n isn't the total number of posts on the topic,
# just the number of posts in the current results
# window, so leave it unlabeled
- $attr = "updated by $u @ $ts UTC";
- $n = " ($n)\n";
+ $attr = "@ $ts UTC";
+ $n = " ($n)";
}
if ($level == 0 || $attr ne $prev_attr) {
+ my $mbox = qq(<a\n$MBOX_TITLE\n) .
+ qq(href="$mid/t.mbox.gz">mbox.gz</a>);
+ my $atom = qq(<a\nhref="$mid/t.atom">Atom</a>);
$pfx .= INDENT if $level > 0;
$dst .= "$pfx- ". $attr . $n;
+ $dst .= " - $mbox / $atom\n";
$prev_attr = $attr;
}
}