Beagle
view release on metacpan or search on metacpan
lib/Beagle/Cmd/Command/spread.pm view on Meta::CPAN
die "template file $name doesn't exist" unless defined $file;
}
$template = read_file($file);
}
elsif ( defined $self->template ) {
$template = $self->template;
}
my $to = $self->to;
my $from = $self->from || current_user();
my $subject = $self->subject || $entry->summary(80);
if ( defined $template ) {
require Text::Xslate;
my $tx = Text::Xslate->new(
function => {
shorten => sub {
my $url = shift;
return $url unless defined $url;
return `shorten $url`;
},
}
);
$msg = $tx->render_string(
$template,
{
handle => $bh,
entry => $entry,
id => $id,
url => $bh->info->url . '/entry/' . $id,
to => $to,
from => $from,
subject => $subject,
}
);
$msg = encode_utf8( $msg );
}
else {
require MIME::Entity;
my %head = (
'X-Beagle-URL' => $bh->info->url . '/entry/' . $entry->id,
'X-Beagle-Copyright' => $bh->info->copyright,
'X-Beagle-Class' => ref $entry,
);
my $mime = MIME::Entity->build(
From => encode( 'MIME-HEADER', $from ),
Subject => encode( 'MIME-HEADER', $subject ),
Data => $entry->serialize( id => 1 ),
Charset => 'utf-8',
To => encode( 'MIME-HEADER', $to ),
%head,
);
if ( $entry->format ne 'plain' ) {
$mime->make_multipart;
$mime->attach(
Data => $entry->body_html,
'Content-Type' => 'text/html; charset=utf-8',
);
}
my $atts = $bh->attachments_map->{$id};
if ($atts) {
$mime->make_multipart;
for my $name ( keys %$atts ) {
$mime->attach(
Filename => $name,
Data => $atts->{$name}->content,
Type => $atts->{$name}->mime_type,
'Content-Disposition' => "attachment; filename=$name",
);
}
}
$msg = $mime->stringify;
}
$msg =~ s!\s+$!newline()!e;
if ($cmd) {
puts "going to call `$cmd` with input:", newline(),
decode_utf8($msg)
unless $self->quiet && !$self->dry_run;
if ( !$self->dry_run ) {
my $doit = 1;
if ( !$self->quiet ) {
print "spread? (Y/n): ";
my $val = <STDIN>;
undef $doit if $val =~ /n/i;
}
if ($doit) {
my @cmd = Text::ParseWords::shellwords($cmd);
require IPC::Run3;
my ( $out, $err );
IPC::Run3::run3( [@cmd], \$msg, \$out, \$err, );
if ($?) {
die "failed to run $cmd: exit code is "
. ( $? >> 8 )
. ", out is $out, err is $err\n";
}
else {
print $out;
}
}
}
}
else {
# yes, print utf8 encoded string all the time
print $msg;
}
}
}
1;
__END__
( run in 1.403 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )