summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-02-21 17:31:36 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-02-21 17:31:37 +0100
commitf921dd4267265ad173da553524b301f83a41c5da (patch)
treee5ccde198998bf3c22ffbd7eb0aa794d3f23584d
parent906dd6a07767d34db99fb275c4b708fdc2926349 (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.rs9
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))?;