diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-02-21 17:31:36 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-02-21 17:31:37 +0100 |
commit | f921dd4267265ad173da553524b301f83a41c5da (patch) | |
tree | e5ccde198998bf3c22ffbd7eb0aa794d3f23584d | |
parent | 906dd6a07767d34db99fb275c4b708fdc2926349 (diff) |
Check whether entry is borrowed before using it
This might fix our errors, but result in incomplete data... lets see how
it works out.
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | lib/domain/libimagmail/src/mailtree.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/domain/libimagmail/src/mailtree.rs b/lib/domain/libimagmail/src/mailtree.rs index 37926a47..f2474b79 100644 --- a/lib/domain/libimagmail/src/mailtree.rs +++ b/lib/domain/libimagmail/src/mailtree.rs @@ -17,6 +17,8 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // +use std::path::PathBuf; + use failure::Fallible as Result; use failure::ResultExt; use indextree::Arena; @@ -24,10 +26,13 @@ use indextree::NodeId; use indextree::Node; use itertools::Itertools; +use libimagstore::storeid::StoreId; + use crate::store::MailStoreWithConnection; use crate::mail::Mail; use crate::mail::LoadedMail; + #[derive(Debug)] pub struct Mailtree { arena: Arena<String>, @@ -94,6 +99,10 @@ fn fill_arena_with<'a>(arena: &mut Arena<String>, store: &'a MailStoreWithConnec })? .into_iter() .map(|id: String| { + let sid = StoreId::new(PathBuf::from(id.clone()))?; + if store.is_borrowed(sid)? { + return Ok(()) + } let mail = store.get_mail_by_id(&id) .context("Getting mail by id")? .ok_or_else(|| format_err!("Cannot find mail for id {}", id))?; |