"../${\mid_href($smsg->{mid})}/" : '';
if (_msg_page_prepare($eml, $ctx)) {
$eml->each_part(\&add_text_body, $ctx, 1);
- $ctx->zmore('</pre><hr>');
+ print { $ctx->{zfh} } '</pre><hr>';
}
html_footer($ctx, $ctx->{first_hdr}) if !$ctx->{smsg};
- delete($ctx->{obuf}) // \'';
+ ''; # XXX TODO cleanup
} else { # called by WwwStream::async_next or getline
$ctx->{smsg}; # may be undef
}
PublicInbox::WwwStream::init($ctx);
if (_msg_page_prepare($eml, $ctx)) { # sets {-title_html}
$eml->each_part(\&add_text_body, $ctx, 1);
- $ctx->zmore('</pre><hr>');
+ print { $ctx->{zfh} } '</pre><hr>';
}
html_footer($ctx, $eml);
$ctx->html_done;
# allow user to easily browse the range around this message if
# they have ->over
$ctx->{-t_max} = $smsg->{ts};
+ $ctx->{-spfx} = '../' if $ibx->{coderepo};
PublicInbox::WwwStream::aresponse($ctx, \&msg_page_i);
}
my $html = ascii_html($irt);
$rv .= qq(In-Reply-To: <<a\nhref="$href">$html</a>>\n)
}
- $rv .= "\n";
+ say { $ctx->zfh } $rv;
# scan through all parts, looking for displayable text
$ctx->{mhref} = $mhref;
$ctx->{changed_href} = "#e$id"; # for diffstat "files? changed,"
- $ctx->{obuf} = \$rv;
$eml->each_part(\&add_text_body, $ctx, 1); # expensive
- $ctx->zmore; # TODO: remove once add_text_body is updated
# add the footer
$rv = "\n<a\nhref=#$id_m\nid=e$id>^</a> ".
sub thread_eml_entry {
my ($ctx, $eml) = @_;
my ($beg, $end) = thread_adj_level($ctx, $ctx->{level});
- $ctx->zmore($beg.'<pre>');
- eml_entry($ctx, $eml) . '</pre>' . $end;
+ print { $ctx->zfh } $beg, '<pre>';
+ print { $ctx->{zfh} } eml_entry($ctx, $eml), '</pre>';
+ $end;
}
sub next_in_queue ($$) {
if (!$ghost_ok) { # first non-ghost
$ctx->{-title_html} =
ascii_html($smsg->{subject});
- $ctx->zmore($ctx->html_top);
+ print { $ctx->zfh } $ctx->html_top;
}
return $smsg;
}
# buffer the ghost entry and loop
- $ctx->zmore(ghost_index_entry($ctx, $lvl, $smsg));
+ print { $ctx->zfh } ghost_index_entry($ctx, $lvl, $smsg)
} else { # all done
- $ctx->zmore(join('', thread_adj_level($ctx, 0)));
- $ctx->zmore(${delete($ctx->{skel})});
+ print { $ctx->zfh } thread_adj_level($ctx, 0),
+ ${delete($ctx->{skel})};
return;
}
}
my $ibx = $ctx->{ibx};
my ($nr, $msgs) = $ibx->over->get_thread($mid);
return missing_thread($ctx) if $nr == 0;
+ $ctx->{-spfx} = '../../' if $ibx->{coderepo};
# link $INBOX_DIR/description text to "index_topics" view around
# the newest message in this thread
my $smsg = $ctx->{smsg};
if (exists $ctx->{-html_tip}) {
$ctx->{-title_html} = ascii_html($smsg->{subject});
- $ctx->zmore($ctx->html_top);
+ print { $ctx->zfh } $ctx->html_top;
}
return eml_entry($ctx, $eml);
} else {
return $smsg if exists($smsg->{blob});
}
my $skel = delete($ctx->{skel}) or return; # all done
- $ctx->zmore($$skel);
+ print { $ctx->zfh } $$skel;
undef;
}
}
my ($part, $depth, $idx) = @$p;
my $ct = $part->content_type || 'text/plain';
my $fn = $part->filename;
- my $rv = $ctx->{obuf} //= \(my $obuf = '');
my ($s, $err) = msg_part_text($part, $ct);
- $s // return $$rv .= (attach_link($ctx, $ct, $p, $fn) // '');
- if ($part->{is_submsg}) {
- $$rv .= submsg_hdr($ctx, $part);
- $$rv .= "\n";
- }
+ my $zfh = $ctx->zfh;
+ $s // return print $zfh (attach_link($ctx, $ct, $p, $fn) // '');
+ say $zfh submsg_hdr($ctx, $part) if $part->{is_submsg};
# makes no difference to browsers, and don't screw up filename
# link generation in diffs with the extra '%0D'
$ctx->{-anchors} = {} if $s =~ /^diff --git /sm;
$diff = 1;
delete $ctx->{-long_path};
- my $spfx;
- # absolute URL (Atom feeds)
- if ($ibx->{coderepo}) {
- if (index($upfx, '//') >= 0) {
- $spfx = $upfx;
- $spfx =~ s!/([^/]*)/\z!/!;
- } else {
- my $n_slash = $upfx =~ tr!/!/!;
- if ($n_slash == 0) {
- $spfx = '../';
- } elsif ($n_slash == 1) {
- $spfx = '';
- } else { # nslash == 2
- $spfx = '../../';
- }
- }
- }
- $ctx->{-spfx} = $spfx;
};
# split off quoted and unquoted blocks:
undef $s; # free memory
if (defined($fn) || ($depth > 0 && !$part->{is_submsg}) || $err) {
# badly-encoded message with $err? tell the world about it!
- $$rv .= attach_link($ctx, $ct, $p, $fn, $err);
- $$rv .= "\n";
+ say $zfh attach_link($ctx, $ct, $p, $fn, $err);
}
delete $part->{bdy}; # save memory
for my $cur (@sections) { # $cur may be huge
if ($cur =~ /\A>/) {
# we use a <span> here to allow users to specify
# their own color for quoted text
- $ctx->zmore(qq(<span\nclass="q">),
- $l->to_html($cur), '</span>');
+ print $zfh qq(<span\nclass="q">),
+ $l->to_html($cur), '</span>';
} elsif ($diff) {
flush_diff($ctx, \$cur);
} else { # regular lines, OK
- $ctx->zmore($l->to_html($cur));
+ print $zfh $l->to_html($cur);
}
undef $cur; # free memory
}
$hbuf .= qq[Message-ID: <$x> (<a href="raw">raw</a>)\n];
}
if (!$nr) { # first (and only) message, common case
- $ctx->zmore($ctx->html_top, $hbuf);
+ print { $ctx->zfh } $ctx->html_top, $hbuf;
} else {
delete $ctx->{-title_html};
- $ctx->zmore($ctx->{-html_tip}, $hbuf);
+ print { $ctx->zfh } $ctx->{-html_tip}, $hbuf;
}
$ctx->{-linkify} //= PublicInbox::Linkify->new;
$hbuf = '';
$hbuf .= "$h: $_\n" for ($eml->header_raw($h));
}
$ctx->{-linkify}->linkify_mids('..', \$hbuf, 1); # escapes HTML
- $ctx->zmore($hbuf);
+ print { $ctx->{zfh} } $hbuf;
$hbuf = '';
}
my @irt = $eml->header_raw('In-Reply-To');
$hbuf .= 'References: <'.join(">\n\t<", @$refs).">\n" if @$refs;
}
$ctx->{-linkify}->linkify_mids('..', \$hbuf); # escapes HTML
- $ctx->zmore($hbuf .= "\n");
- ${$ctx->{obuf}} = ''; # TODO remove
+ say { $ctx->{zfh} } $hbuf;
1;
}
sub html_footer {
my ($ctx, $hdr) = @_;
my $upfx = '../';
- my ($related, $skel);
+ my (@related, $skel);
my $foot = '<pre>';
my $qry = delete $ctx->{-qry};
if ($qry && $ctx->{ibx}->isrch) {
$q = wrap('', '', $q);
my $rows = ($q =~ tr/\n/\n/) + 1;
$q = ascii_html($q);
- $related = <<EOM;
+ $related[0] = <<EOM;
<form id=related
action=$upfx
><pre>find likely ancestor, descendant, or conflicting patches for <a
if ($ctx->{ibx}->over) {
my $t = ts2str($ctx->{-t_max});
my $t_fmt = fmt_ts($ctx->{-t_max});
- my $fallback = $related ? "\t" : "<a id=related>\t</a>";
+ my $fallback = @related ? "\t" : "<a id=related>\t</a>";
$skel = <<EOF;
${fallback}other threads:[<a
href="$upfx?t=$t">~$t_fmt UTC</a>|<a
} else { # unindexed inboxes w/o over
$skel = qq( <a\nhref="$upfx">latest</a>);
}
- $foot .= qq(<a\nhref="#R">reply</a>);
# $skel may be big for big threads, don't append it to $foot
- $skel .= '</pre>' . ($related // '');
- $ctx->zmore($foot, $skel .= msg_reply($ctx, $hdr)); # flushes obuf
+ print { $ctx->zfh } $foot, qq(<a\nhref="#R">reply</a>),
+ $skel, '</pre>', @related,
+ msg_reply($ctx, $hdr);
}
sub ghost_parent {