use v6.d.PREVIEW;
use lib 'lib';
use MaildirIndexer::ScanDir;
use MaildirIndexer::Store;
use MaildirIndexer::Parser;
sub MAIN($maildir) {
my $store = MaildirIndexer::Store.new;
my $file-supply = scan-dir($maildir);
my $file-channel = $file-supply.Channel;
for ^10 {
start react {
whenever $file-channel -> $file {
if $file.e && $file.f {
$store.add-file($file);
}
elsif !$file.e {
$store.del-file($file);
}
}
}
}
my $listener = IO::Socket::Async.listen(
'127.0.0.1',
9000,
:enc<utf8-c8>,
);
react {
whenever signal(SIGINT) { exit }
whenever signal(SIGHUP) {
$store.dump();
}
whenever $listener -> $conn {
LEAVE { $conn.close }
with parse-email($conn) -> $email {
with $store.mailbox-for-email($email) -> $mailbox {
await $conn.print("$mailbox\x0d\x0a");
}
}
}
}
}