From 943aa0152a2c0e9ef8049296871c2563ef546080 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 16 Apr 2022 10:55:15 +0100 Subject: prefer native Raku over 'rm' --- katana.raku | 56 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/katana.raku b/katana.raku index 48e7202..2930333 100755 --- a/katana.raku +++ b/katana.raku @@ -2,8 +2,9 @@ sub prefix:<❱>(*@args) { say "❱ {@args}"; - my $proc = run @args, :out, :err; - .say if .chars > 0 for $proc.out.slurp(:close), $proc.err.slurp(:close); + my \proc = run @args, :out, :err; + + .say if .chars > 0 for proc.out.slurp(:close), proc.err.slurp(:close); } sub prefix:<⁉>(*@args) { ❱ @args unless @args[*-1].IO.f } @@ -30,24 +31,41 @@ class Image { ⁉ ['cp', $!source, $large]; } - method thumb_tag { "" } - method large_tag { "" } + method tag(Str $class) { + "" + } } -sub dist-dirs(Str $dist-dir --> List) { $dist-dir <<~>> } -sub make-mr-proper(Str $dist-dir) { ❱ ['rm', '-rf', $dist-dir] if $dist-dir.IO.d } +sub dist-dirs(Str \dist-dir --> List) { dist-dir <<~>> } -sub ensure-directories(Str $dist-dir) { - mkdir $dist-dir unless $dist-dir.IO.d; - mkdir $_ unless .IO.d for dist-dirs $dist-dir; +sub ensure-directories(Str \dist-dir) { + mkdir dist-dir unless dist-dir.IO.d; + mkdir $_ unless .IO.d for dist-dirs dist-dir; } -sub cleanup-nonexistent (Str $dist-dir, @images) { - my $images = set @images.map:{ $_.filename }; - for dist-dirs $dist-dir -> $dir { - unlink $_ if .IO.basename ∉ $images - for dir($dir, test => { "$dir/$_".IO.f }); +sub walk-dir(Str \dir, :&onFile, :&onDir = sub (\dir) {} ) { + return unless dir.IO.d; + for dir(dir) -> $file { + given $file { + when .d { walk-dir $file.path, :&onFile, :&onDir } + when .f { &onFile($file.path) } + } } + &onDir(dir); +} + +sub cleanup-nonexistent (Str \dist-dir, @images) { + my $images = set @images.map:{ $_.filename }; + walk-dir dist-dir, + onFile => sub (\file) { + unlink file if file.IO.basename ∉ $images + }; +} + +sub make-mr-proper(Str \dist-dir) { + walk-dir dist-dir, + onFile => sub (\file) { unlink file }, + onDir => sub (\dir) { rmdir dir }; } multi MAIN( @@ -58,17 +76,19 @@ multi MAIN( Str :$bg-blur = '0x8', #= Background blur factor Bool :$randomize = True, #= Randomize order of images Str :$title = 'Yay', #= Album title + Int :$degree = 4, #= Degree of parallelism ) { - my @images = dir($in-dir, test => { "$in-dir/$_".IO.f }) - .map: { new Image: source => $_, :$dist-dir }; - @images = @images.pick: * if $randomize; + my @images = dir($in-dir, test => { "$in-dir/$_".IO.f }).map:{ + Image.new: source => $_, :$dist-dir + }; say "Found {@images.elems} images"; + @images = @images.pick: * if $randomize; cleanup-nonexistent $dist-dir, @images; make-mr-proper $dist-dir if $mr-proper; ensure-directories $dist-dir; - @images.hyper.map: { .generate: :$thumb-geometry, :$bg-blur }; + @images.hyper(:$degree).map:{ .generate: :$thumb-geometry, :$bg-blur }; } -- cgit v1.2.3