diff options
author | dakkar <dakkar@thenautilus.net> | 2019-12-29 13:24:00 +0000 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2019-12-29 13:45:21 +0000 |
commit | 5b10920b6e38614ceea0cd97031ab48f4f1f9a39 (patch) | |
tree | 031a9a787823b6a2913824235a77f86f76a94d88 /lib/MaildirIndexer/Email.pm6 | |
parent | it's called `raku` now (diff) | |
download | MaildirIndexer-5b10920b6e38614ceea0cd97031ab48f4f1f9a39.tar.gz MaildirIndexer-5b10920b6e38614ceea0cd97031ab48f4f1f9a39.tar.bz2 MaildirIndexer-5b10920b6e38614ceea0cd97031ab48f4f1f9a39.zip |
new module extension
Diffstat (limited to 'lib/MaildirIndexer/Email.pm6')
-rw-r--r-- | lib/MaildirIndexer/Email.pm6 | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/lib/MaildirIndexer/Email.pm6 b/lib/MaildirIndexer/Email.pm6 deleted file mode 100644 index 4f92106..0000000 --- a/lib/MaildirIndexer/Email.pm6 +++ /dev/null @@ -1,69 +0,0 @@ -use v6.d; -unit class MaildirIndexer::Email; -use MaildirIndexer::LogTimelineSchema; - -has IO $.path; -has %!headers; -has $!body; - -method BUILD(:%!headers,:$!body,:$!path = IO) { } - -method message-id(--> Str:D) { split-refs(%!headers<message-id>)[0] // '' } -method refs(--> Iterable) { - return ( - |split-refs(%!headers<in-reply-to>), - |split-refs(%!headers<references>).reverse, - ); -} - -multi split-refs(Any --> Iterable) { return () } -multi split-refs(Str:D $str --> Iterable) { - my @result; - MaildirIndexer::LogTimelineSchema::Parse::Header.log: { - @result = $/<refs>».Str if $str ~~ m{'<' $<refs> = (<-[<>]>+)+ % [ '>' .*? '<' ] '>' }; - } - return @result; -} - -method addresses (--> Iterable) { - return ( - |extract-addresses(%!headers<sender>), - |extract-addresses(%!headers<x-original-sender>), - |extract-addresses(%!headers<from>), - |extract-addresses(%!headers<to>), - |extract-addresses(%!headers<reply-to>), - |extract-addresses(%!headers<mailing-list>), - |extract-addresses(%!headers<x-original-from>), - ).unique; - # we should add a hack for info@meetup.com, where we keep the - # whole "from", since it's the only way to distinguish between - # different groups -} - -# subset of the grammar of p5's Email::Address, ignoring comments and -# quoting -my grammar Address { - token CTL { <[ \x00 .. \x1F \x7F ]> } - token special { <[ \( \) \< \> \[ \] \: \; \@ \\ \, \. \" ]> } - - token atext { <-CTL> & <-special> & \S } - token dot-atom { <ws> [ [<atext>+]+ % '.' ] <ws> } - - token local-part { <.dot-atom> } - token domain { <.dot-atom> } - - token addr { <local-part> '@' <domain> } - - rule TOP { ^ .*? [ <addr>+ % .+? ] .*? $ } -} - -multi sub extract-addresses(Any --> Iterable) { return () } -multi sub extract-addresses(Str:D $str --> Iterable) { - my @result; - MaildirIndexer::LogTimelineSchema::Parse::Header.log: { - with Address.parse($str) { - @result = $_<addr>».Str; - } - } - return @result; -} |