diff options
| author | Paul Buetow <paul@buetow.org> | 2022-04-16 10:55:15 +0100 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2022-04-16 10:55:15 +0100 |
| commit | 943aa0152a2c0e9ef8049296871c2563ef546080 (patch) | |
| tree | cb6ad8e27f4fa4d768c0cf736dff2b1823cc7560 | |
| parent | 61ccafe143df1b25a9134a802130676405665b97 (diff) | |
prefer native Raku over 'rm'
| -rwxr-xr-x | katana.raku | 56 |
1 files 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 { "<img class='thumb' src='./thumb/{$.filename}' />" } - method large_tag { "<img class='large' src='./large/{$.filename}' />" } + method tag(Str $class) { + "<img class='{$class}' src='./{$class}/{$.filename}' />" + } } -sub dist-dirs(Str $dist-dir --> List) { $dist-dir <<~>> </large /blur /thumb> } -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 <<~>> </large /blur /thumb> } -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 }; } |
