sub async_eml { # for async_blob_cb
my ($ctx, $eml) = @_;
- $ctx->{http_out}->write($ctx->translate($ctx->{cb}->($ctx, $eml)));
+ $ctx->write($ctx->{cb}->($ctx, $eml));
}
sub html_top ($) {
# we had some kind of query, link to /$INBOX/?t=YYYYMMDDhhmmss
} elsif ($ctx->{qp}->{t}) {
$top = qq(<a\nhref="./">$top</a>);
+ } elsif (length($upfx)) {
+ $top = qq(<a\nhref="$upfx">$top</a>);
}
my $code = $ibx->{coderepo} ? qq( / <a\nhref=#code>code</a>) : '';
# id=mirror must exist for legacy bookmarks
my @ret;
for my $cr_name (@$cr) {
$ret[0] //= <<EOF;
-<a id=code>code repositories for project(s) associated with this inbox:
+<a id=code>Code repositories for project(s) associated with this inbox:
EOF
my $urls = $cfg->get_all("coderepo.$cr_name.cgiturl");
if ($urls) {
sub _html_end {
my ($ctx) = @_;
- my @cr = coderepos($ctx);
- scalar(@cr) ?
- '<hr><pre>'.join("\n\n", @cr).'</pre></body></html>' :
- '</body></html>';
+ my $upfx = $ctx->{-upfx} || '';
+ my $m = "${upfx}_/text/mirror/";
+ my $x;
+ if ($ctx->{ibx}->can('cloneurl')) {
+ $x = <<EOF;
+This is a public inbox, see <a
+href="$m">mirroring instructions</a>
+for how to clone and mirror all data and code used for this inbox
+EOF
+ my $has_nntp = @{$ctx->{ibx}->nntp_url($ctx)};
+ my $has_imap = @{$ctx->{ibx}->imap_url($ctx)};
+ if ($has_nntp || $has_imap) {
+ substr($x, -1, 1) = ";\n"; # s/\n/;\n
+ if ($has_nntp && $has_imap) {
+ $x .= <<EOM;
+as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).
+EOM
+ } elsif ($has_nntp) {
+ $x .= <<EOM;
+as well as URLs for NNTP newsgroup(s).
+EOM
+ } else {
+ $x .= <<EOM;
+as well as URLs for IMAP folder(s).
+EOM
+ }
+ }
+ } else {
+ $x = <<EOF;
+This is an external index of several public inboxes,
+see <a href="$m">mirroring instructions</a> on how to clone and mirror
+all data and code used by this external index.
+EOF
+ }
+ chomp $x;
+ '<hr><pre>'.join("\n\n", coderepos($ctx), $x).'</pre></body></html>'
}
# callback for HTTP.pm (and any other PSGI servers)
'Content-Length' => undef ];
bless $ctx, __PACKAGE__;
$ctx->{gz} = PublicInbox::GzipFilter::gz_or_noop($res_hdr, $ctx->{env});
- $ctx->{base_url} //= do {
+ $ctx->{base_url} // do {
$ctx->zmore(html_top($ctx));
- base_url($ctx);
+ $ctx->{base_url} = base_url($ctx);
};
$ctx->zmore($$sref) if $sref;
my $bdy = $ctx->zflush(_html_end($ctx));
if (my $smsg = $ctx->{smsg} = $ctx->{cb}->($ctx)) {
$ctx->smsg_blob($smsg);
} else {
- $ctx->{http_out}->write(
- $ctx->translate(_html_end($ctx)));
+ $ctx->write(_html_end($ctx));
$ctx->close; # GzipFilter->close
}
};