word/edit: sub signatures in ImagePrep methods
[sheet.git] / Shiar_Sheet / ImagePrep.pm
index b5038cf248bcfe6dc0a62d7c730dec27f0328d32..2bd4cd9e2448add5354e8ec000635350a96120c5 100644 (file)
@@ -1,20 +1,19 @@
 package Shiar_Sheet::ImagePrep;
 
-use 5.014;
+use 5.020;
 use warnings;
+use experimental 'signatures';
 
 our $VERSION = '1.02';
 
-sub new {
-       my ($class, $target) = @_;
+sub new ($class, $target) {
        bless \$target, $class;
 }
 
-sub download {
+sub download ($target, $download) {
        # copy changed remote url to local file
-       my $target = shift;
        unlink $$target if -e $$target;
-       my $download = shift or return 1;
+       defined $download or return 1;
        require LWP::UserAgent;
        my $ua = LWP::UserAgent->new;
        $ua->agent('/');
@@ -23,8 +22,7 @@ sub download {
                or die "Download from <q>$download</q> failed: ".$status->status_line."\n";
 }
 
-sub dimensions {
-       my ($imgpath) = @_;
+sub dimensions ($imgpath) {
        require IPC::Run;
        IPC::Run::run(
                [identify => -format => '%w %h', $$imgpath],
@@ -33,20 +31,18 @@ sub dimensions {
        return split /\s/, $xy, 3;
 }
 
-sub generate {
-       my ($imgpath, $thumbpath, $cmds) = @_;
+sub generate ($imgpath, $thumbpath, $cmds) {
        if (not -e $$imgpath) {
                return !-e $thumbpath || unlink $thumbpath;
        }
        $cmds //= [];
        $imgpath->convert($thumbpath, $cmds, '300x200') and # low-res cover
        $imgpath->convert($thumbpath =~ s/\.jpg$/.webp/r,
-               $cmds, '600x400' # higher dpi
+               [@{$cmds}, -quality => 40], '600x400' # higher dpi tradeoff
        );
 }
 
-sub convert {
-       my ($imgpath, $thumbpath, $cmds, $xyres) = @_;
+sub convert ($imgpath, $thumbpath, $cmds, $xyres) {
        #my ($w, $h) = $imgpath->dimensions;
        #my $aspect = 3/2; # $xyres
        my @cmds = @{$cmds};
@@ -72,13 +68,17 @@ sub convert {
                'convert',
                $$imgpath,
                -delete => '1--1', -background => 'white',
+               '-strip', -quality => '60%', -interlace => 'plane',
                -gravity => defined $cmds ? 'northwest' : 'center',
                @cmds,
                -resize => "$xyres^", -extent => $xyres,
-               '-strip', -quality => '60%', -interlace => 'plane',
                $thumbpath
        );
 
+       $imgpath->runcommand(@cmds);
+}
+
+sub runcommand ($, @cmds) {
        require IPC::Run;
        my $output;
        IPC::Run::run(\@cmds, '<' => \undef, '>&' => \$output) or die [