summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2018-11-09 16:18:11 +0000
committerdakkar <dakkar@thenautilus.net>2018-11-09 16:18:11 +0000
commit7b5c1abf0bac5147efa468f50a384310b4376a7e (patch)
treeb7a2223f9a389250cec88488125813a6a58717ec /lib
parentfix indent (diff)
downloadMaildirIndexer-7b5c1abf0bac5147efa468f50a384310b4376a7e.tar.gz
MaildirIndexer-7b5c1abf0bac5147efa468f50a384310b4376a7e.tar.bz2
MaildirIndexer-7b5c1abf0bac5147efa468f50a384310b4376a7e.zip
feature parity!
Diffstat (limited to 'lib')
-rw-r--r--lib/MaildirIndexer/Parser.pm613
-rw-r--r--lib/MaildirIndexer/Store.pm66
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/MaildirIndexer/Parser.pm6 b/lib/MaildirIndexer/Parser.pm6
index c2425fe..7b80ecf 100644
--- a/lib/MaildirIndexer/Parser.pm6
+++ b/lib/MaildirIndexer/Parser.pm6
@@ -58,6 +58,7 @@ class Message-actions {
multi parse-email(IO::Path $p) is export {
return parse-email($p.slurp(:enc<utf8-c8>));
}
+
multi parse-email(IO::Path $p, :$headers-only!) is export {
return parse-email(
$p.lines(
@@ -67,6 +68,18 @@ multi parse-email(IO::Path $p, :$headers-only!) is export {
)[0],
);
}
+
+multi parse-email(IO::Socket::Async $s) is export {
+ my $string;
+ react {
+ whenever $s.Supply(:enc<utf8-c8>) {
+ $string ~= $_;
+ done if $string ~~ /@separators/;
+ }
+ }
+ return parse-email($string);
+}
+
multi parse-email(Str $email-str) is export {
with Message.parse($email-str,:actions(Message-actions.new)) {
return .made;
diff --git a/lib/MaildirIndexer/Store.pm6 b/lib/MaildirIndexer/Store.pm6
index 5bacbe9..7447643 100644
--- a/lib/MaildirIndexer/Store.pm6
+++ b/lib/MaildirIndexer/Store.pm6
@@ -37,6 +37,12 @@ method del-file(IO $file) {
return;
}
+method mailbox-for-email(MaildirIndexer::Email $email) {
+ my $id = $email.message-id or return Nil;
+ with %!mailboxes-for-id{$id} { return .[*-1] }
+ return Nil;
+}
+
sub mailbox-from-path(Str() $path) {
$path ~~ m{'/' (<-[/]>+?) '/' [cur|new|tmp] '/'} and return ~$/[0];
return Nil;