summaryrefslogtreecommitdiff
path: root/lib/MaildirIndexer
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2020-03-16 15:33:39 +0000
committerdakkar <dakkar@thenautilus.net>2020-03-16 15:34:19 +0000
commit6bc735051d38c1f84acaa40d8e724398e50dcc90 (patch)
tree216bb751b33a54a2f104bc0c80b4acf89d715e07 /lib/MaildirIndexer
parentactually working cache updating in ByAddresses (diff)
downloadMaildirIndexer-bayes.tar.gz
MaildirIndexer-bayes.tar.bz2
MaildirIndexer-bayes.zip
indices can now return confidence levelsbayes
also, tests pass again
Diffstat (limited to 'lib/MaildirIndexer')
-rw-r--r--lib/MaildirIndexer/Index.rakumod7
-rw-r--r--lib/MaildirIndexer/Index/ByAddresses.rakumod6
-rw-r--r--lib/MaildirIndexer/Index/ByRef.rakumod6
-rw-r--r--lib/MaildirIndexer/Store.rakumod3
4 files changed, 14 insertions, 8 deletions
diff --git a/lib/MaildirIndexer/Index.rakumod b/lib/MaildirIndexer/Index.rakumod
index 8d7ad30..90bc6bd 100644
--- a/lib/MaildirIndexer/Index.rakumod
+++ b/lib/MaildirIndexer/Index.rakumod
@@ -15,6 +15,11 @@ my class MailboxForEmail is export {
has Channel:D $.reply-to is required;
}
+my class Mailbox is export {
+ has Str:D $.name is required;
+ has Numeric:D $.confidence is required;
+}
+
method receive(Channel:D $channel --> Nil) {
react {
whenever $channel -> $event {
@@ -33,4 +38,4 @@ method receive(Channel:D $channel --> Nil) {
method add-mail(MaildirIndexer::Email:D $email, Str:D $mailbox --> Nil) { ... }
method del-path(IO:D $path, Str:D $mailbox --> Nil) { ... }
-method mailbox-for-email(MaildirIndexer::Email:D $email --> Str) { ... }
+method mailbox-for-email(MaildirIndexer::Email:D $email --> Mailbox) { ... }
diff --git a/lib/MaildirIndexer/Index/ByAddresses.rakumod b/lib/MaildirIndexer/Index/ByAddresses.rakumod
index 0b77d15..033f4e9 100644
--- a/lib/MaildirIndexer/Index/ByAddresses.rakumod
+++ b/lib/MaildirIndexer/Index/ByAddresses.rakumod
@@ -110,14 +110,14 @@ submethod predict-mailbox-given-addresses(@addresses) {
return %prediction;
}
-method mailbox-for-email(MaildirIndexer::Email:D $email --> Str) {
- my Str $result;
+method mailbox-for-email(MaildirIndexer::Email:D $email --> Mailbox) {
+ my Mailbox $result;
MaildirIndexer::LogTimelineSchema::Index::Find.log: :class('ByAddresses'), -> {
my %prediction = self.predict-mailbox-given-addresses($email.addresses);
my @most-probable-mailboxes = %prediction.pairs.sort(*.value);
- if @most-probable-mailboxes -> $_ { $result = .[*-1].key }
+ if @most-probable-mailboxes -> $_ { $result = Mailbox.new(:name(.key),:confidence(.value)) with .[*-1] }
}
return $result;
}
diff --git a/lib/MaildirIndexer/Index/ByRef.rakumod b/lib/MaildirIndexer/Index/ByRef.rakumod
index 6e5b7f5..30ea58c 100644
--- a/lib/MaildirIndexer/Index/ByRef.rakumod
+++ b/lib/MaildirIndexer/Index/ByRef.rakumod
@@ -35,11 +35,11 @@ method del-path(IO:D $file, Str:D $mailbox --> Nil) {
}
}
-method mailbox-for-email(MaildirIndexer::Email:D $email --> Str) {
- my Str $result;
+method mailbox-for-email(MaildirIndexer::Email:D $email --> Mailbox) {
+ my Mailbox $result;
MaildirIndexer::LogTimelineSchema::Index::Find.log: :class('ByRef'), -> {
for |$email.refs() -> $ref {
- with %!mailboxes-for-id{$ref} { $result = .keys.sort.[0] }
+ with %!mailboxes-for-id{$ref} { $result = Mailbox.new(:name(.keys.sort.[0]),:1confidence) }
}
}
return $result;
diff --git a/lib/MaildirIndexer/Store.rakumod b/lib/MaildirIndexer/Store.rakumod
index 856baca..51201f2 100644
--- a/lib/MaildirIndexer/Store.rakumod
+++ b/lib/MaildirIndexer/Store.rakumod
@@ -69,7 +69,8 @@ method mailbox-for-email(MaildirIndexer::Email:D $email --> Str) {
MaildirIndexer::LogTimelineSchema::Store::Find.log: {
.send($event) for @!index-channels;
my @results = $replies.receive() xx @!index-channels;
- $result = @results.grep(*.defined).join("\n");
+ @results = @results.grep(*.defined).sort(*.confidence);
+ if @results -> $_ { $result = .[*-1].name }
}
return $result;
}