summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-03-01 13:47:12 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-06-01 13:59:37 +0200
commitc52c9d17eb73f29a4a786c3b155b2f8f48d07a89 (patch)
tree659115d1f287622ed1fa58f96856e39a82607265
parent18b12c698ca8a4fd10d0b68d9c8c657eacf491f2 (diff)
Make import function capable of importing tags
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--lib/domain/libimagmail/Cargo.toml1
-rw-r--r--lib/domain/libimagmail/src/lib.rs1
-rw-r--r--lib/domain/libimagmail/src/store.rs19
3 files changed, 18 insertions, 3 deletions
diff --git a/lib/domain/libimagmail/Cargo.toml b/lib/domain/libimagmail/Cargo.toml
index 22bd5eba..51ad9fca 100644
--- a/lib/domain/libimagmail/Cargo.toml
+++ b/lib/domain/libimagmail/Cargo.toml
@@ -37,5 +37,6 @@ libimagstore = { version = "0.10.0", path = "../../../lib/core/libimagstore
libimagerror = { version = "0.10.0", path = "../../../lib/core/libimagerror" }
libimagentryref = { version = "0.10.0", path = "../../../lib/entry/libimagentryref" }
libimagentrylink = { version = "0.10.0", path = "../../../lib/entry/libimagentrylink/" }
+libimagentrytag = { version = "0.10.0", path = "../../../lib/entry/libimagentrytag/" }
libimagentryutil = { version = "0.10.0", path = "../../../lib/entry/libimagentryutil/" }
diff --git a/lib/domain/libimagmail/src/lib.rs b/lib/domain/libimagmail/src/lib.rs
index c572ef92..7e26d2b1 100644
--- a/lib/domain/libimagmail/src/lib.rs
+++ b/lib/domain/libimagmail/src/lib.rs
@@ -53,6 +53,7 @@ extern crate libimagerror;
#[macro_use] extern crate libimagstore;
extern crate libimagentryref;
extern crate libimagentrylink;
+extern crate libimagentrytag;
#[macro_use] extern crate libimagentryutil;
module_entry_path_mod!("mail");
diff --git a/lib/domain/libimagmail/src/store.rs b/lib/domain/libimagmail/src/store.rs
index be3bf1c3..e95a88e2 100644
--- a/lib/domain/libimagmail/src/store.rs
+++ b/lib/domain/libimagmail/src/store.rs
@@ -31,6 +31,8 @@ use notmuch_rs::Query;
use libimagstore::store::Store;
use libimagstore::store::FileLockEntry;
use libimagentryutil::isa::Is;
+use libimagentrytag::tagable::Tagable;
+use libimagentrytag::tag::is_tag_str;
use crate::notmuch::connection::NotmuchConnection;
use crate::mail::IsMail;
@@ -64,7 +66,7 @@ impl<'a> Deref for MailStoreWithConnection<'a> {
}
impl<'a> MailStoreWithConnection<'a> {
- pub fn import_with_query(&self, q: &str) -> Result<Vec<FileLockEntry<'a>>> {
+ pub fn import_with_query(&self, q: &str, tag_as_mail: Option<String>, import_tags: bool) -> Result<Vec<FileLockEntry<'a>>> {
let mut new_entries = vec![];
self.connection
@@ -73,8 +75,19 @@ impl<'a> MailStoreWithConnection<'a> {
query
.search_messages()?
.map(|message| {
- self.create_entry_for_id(message.id())
- .map(|entry| new_entries.push(entry))
+ let mut entry = self.create_entry_for_id(message.id())?;
+ if let Some(tag_as_mail) = tag_as_mail.as_ref() {
+ entry.add_tag(tag_as_mail.clone())?;
+ }
+ if import_tags {
+ for tag in message.tags() {
+ if is_tag_str(&tag).is_ok() {
+ entry.add_tag(tag)?;
+ }
+ }
+ }
+ new_entries.push(entry);
+ Ok(())
})
.collect::<Result<Vec<_>>>()?;