aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-18 15:38:17 +0200
committerDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-18 15:38:17 +0200
commitcf3b912a94dd18cb3f5af664e11a0e2391d16b0b (patch)
tree5903d4d16bbe11df348f14263c215337491f7a88
parent5ad80a002ef0a2ace544faf058fe82b6cdd83fb0 (diff)
downloadmail-cf3b912a94dd18cb3f5af664e11a0e2391d16b0b.tar.gz
database: implement find_message_by_filename
-rw-r--r--src/database.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/database.rs b/src/database.rs
index b6f68a0..c26b5a8 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -230,6 +230,13 @@ impl Database {
<Self as DatabaseExt>::find_message(self, message_id)
}
+ pub fn find_message_by_filename<'d, P>(&'d self, filename: &P) -> Result<Option<Message<'d, Self>>>
+ where
+ P: AsRef<Path>,
+ {
+ <Self as DatabaseExt>::find_message_by_filename(self, filename)
+ }
+
pub fn remove_message<'d, P>(&'d self, path: &P) -> Result<()>
where
P: AsRef<Path>,
@@ -314,6 +321,26 @@ pub trait DatabaseExt {
}
}
+ fn find_message_by_filename<'d, D, P>(database: D, filename: &P) -> Result<Option<Message<'d, Database>>>
+ where
+ D: Into<ScopedSupercow<'d, Database>>,
+ P: AsRef<Path>
+ {
+ let dbref = database.into();
+ let path_str = CString::new(filename.as_ref().to_str().unwrap()).unwrap();
+
+ let mut msg = ptr::null_mut();
+ unsafe {
+ ffi::notmuch_database_find_message_by_filename(dbref.ptr, path_str.as_ptr(), &mut msg)
+ }.as_result()?;
+
+ if msg.is_null() {
+ Ok(None)
+ } else {
+ Ok(Some(Message::from_ptr(msg, Supercow::phantom(dbref))))
+ }
+ }
+
fn remove_message<'d, D, P>(database: D, path: &P) -> Result<()>
where
D: Into<ScopedSupercow<'d, Database>>,