invalid_list(\%ctx, $1) || redirect_list_index($cgi);
} elsif ($path_info =~ m!$LISTNAME_RE(?:/|/index\.html)?\z!o) {
invalid_list(\%ctx, $1) || get_index(\%ctx);
- } elsif ($path_info =~ m!$LISTNAME_RE/atom\.xml\z!o) {
+ } elsif ($path_info =~ m!$LISTNAME_RE/(?:atom\.xml|new\.atom)\z!o) {
invalid_list(\%ctx, $1) || get_atom(\%ctx);
# single-message pages
} elsif ($path_info =~ m!$LISTNAME_RE/t/(\S+)/\z!o) {
invalid_list_mid(\%ctx, $1, $2) || get_thread(\%ctx);
- } elsif ($path_info =~ m!$LISTNAME_RE/t/(\S+)/mbox(\.gz)?\z!x) {
+ } elsif ($path_info =~ m!$LISTNAME_RE/t/(\S+)/mbox(\.gz)?\z!o) {
my $sfx = $3;
invalid_list_mid(\%ctx, $1, $2) ||
get_thread_mbox(\%ctx, $sfx);
+ } elsif ($path_info =~ m!$LISTNAME_RE/t/(\S+)/atom\z!o) {
+ invalid_list_mid(\%ctx, $1, $2) || get_thread_atom(\%ctx);
+
# legacy redirects
} elsif ($path_info =~ m!$LISTNAME_RE/(t|m|f)/(\S+)\.html\z!o) {
my $pfx = $2;
$ret;
}
-# /$LISTNAME/atom.xml -> Atom feed, includes replies
+# /$LISTNAME/new.atom -> Atom feed, includes replies
sub get_atom {
my ($ctx) = @_;
require PublicInbox::Feed;
PublicInbox::Mbox::thread_mbox($ctx, $srch, $sfx);
}
+
+# /$LISTNAME/t/$MESSAGE_ID/atom -> thread as Atom feed
+sub get_thread_atom {
+ my ($ctx) = @_;
+ searcher($ctx) or return need_search($ctx);
+ $ctx->{self_url} = self_url($ctx->{cgi});
+ require PublicInbox::Feed;
+ PublicInbox::Feed::generate_thread_atom($ctx);
+}
+
1;