summaryrefslogtreecommitdiff
path: root/lib/MaildirIndexer
diff options
context:
space:
mode:
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;
}