summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xkatana.raku56
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 };
}