From 5bc94392bd67d8e2a919e357d569751b9295475a Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 30 Jun 2016 02:35:18 +0000 Subject: feed: add $INBOX/new.html endpoint This acts like the Atom feed; but should be viewable directly from browsers. --- lib/PublicInbox/Feed.pm | 27 +++++++++++++++++++++++++++ lib/PublicInbox/WWW.pm | 10 +++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index ddc1e3c1..c16c417a 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -34,6 +34,33 @@ sub generate_html_index { sub { emit_html_index($_[0], $ctx) }; } +sub new_html { + my ($ctx) = @_; + my @paths; + my (undef, $last) = each_recent_blob($ctx, sub { + my ($path, $commit, $ts, $u, $subj) = @_; + $ctx->{first} ||= $commit; + push @paths, $path; + }); + if (!@paths) { + return [404, ['Content-Type', 'text/plain'], + ["No messages, yet\n"] ]; + } + $ctx->{-html_tip} = '
';
+	$ctx->{-upfx} = '';
+	my $res = PublicInbox::WwwStream->new($ctx, sub {
+		while (my $path = shift @paths) {
+			my $m = do_cat_mail($ctx->{-inbox}, $path) or next;
+			my $more = scalar @paths;
+			my $s = PublicInbox::View::index_entry($m, $ctx, $more);
+			$s .= '
' unless $more; + return $s; + } + undef; + }); + [ 200, ['Content-Type', 'text/html; charset=UTF-8'], $res ] +} + # private subs sub title_tag { diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 196486f2..da5c1d30 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -75,7 +75,8 @@ sub call { invalid_inbox($self, $ctx, $1) || get_index($ctx); } elsif ($path_info =~ m!$INBOX_RE/(?:atom\.xml|new\.atom)\z!o) { invalid_inbox($self, $ctx, $1) || get_atom($ctx); - + } elsif ($path_info =~ m!$INBOX_RE/new\.html\z!o) { + invalid_inbox($self, $ctx, $1) || get_new($ctx); } elsif ($path_info =~ m!$INBOX_RE/ ($PublicInbox::GitHTTPBackend::ANY)\z!ox) { my $path = $2; @@ -189,6 +190,13 @@ sub get_atom { PublicInbox::Feed::generate($ctx); } +# /$INBOX/new.html -> HTML only +sub get_new { + my ($ctx) = @_; + require PublicInbox::Feed; + PublicInbox::Feed::new_html($ctx); +} + # /$INBOX/?r=$GIT_COMMIT -> HTML only sub get_index { my ($ctx) = @_; -- cgit v1.2.3-24-ge0c7