# -*- mode: perl6 -*- use File::Temp; use WebCoso::Doc::Page; use WebCoso::Doc::Feed; class WebCoso { has $.srcdir; has $.destdir; has $!tmpdir = tempdir.IO; has %!docs; method get-src-files($dir,$basename,$ext) { say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-src-files($dir,$basename,$ext)"; my @files = gather { for $.srcdir,$!tmpdir -> $base { take $_ for try { CATCH { when X::IO { } } ( $dir ?? $base.child($dir) !! $base ).dir( test => /$basename \. .+? \. $ext/, ) } // (); } } say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-src-files($dir,$basename,$ext) files = {@files.perl}"; return ( map { (.basename ~~ /$basename \. (.+?) \. $ext/)[0] => $_ }, @files ).values; } method get-made-files($dir,$basename,$ext) { say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-made-files($dir,$basename,$ext)"; if %!docs{$dir}{$basename} -> $doc { say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-made-files($dir,$basename,$ext) at $doc"; return $doc.make-by-ext($ext) } return (); } method get-files($dir,$basename,$ext,:$make=True) { say "WebCoso($.srcdir,$.destdir,$!tmpdir)::get-files($dir,$basename,$ext,$make)"; my %src = self.get-src-files($dir,$basename,$ext); my %made = ( $make ?? self.get-made-files($dir,$basename,$ext) !! () ); return flat %src,%made; } method put-file($dir,$basename,$lang,$ext,$contents) { say "WebCoso($.srcdir,$.destdir,$!tmpdir)::put-file($dir,$basename,$lang,$ext)"; my $t = ($dir ?? $!tmpdir.child($dir) !! $!tmpdir); $t.mkdir; my $f = $t.child("{$basename}.{$lang}.{$ext}"); $f.spurt($contents); return $f; } method new-page($dir) { %!docs{$dir}{WebCoso::Doc::Page.basename} = WebCoso::Doc::Page.new(:$dir,wc=>self); } method new-feed($dir) { %!docs{$dir}{WebCoso::Doc::Feed.basename} = WebCoso::Doc::Feed.new(:$dir,wc=>self); } method run() { .make() for %!docs.values».values.flat } }