From 93de60b6d1bbc0695e918d04e8dc949cb773a7d9 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Fri, 20 Sep 2019 09:22:11 +0300 Subject: [PATCH] maildir: allow Maildir stores as root_folder Allow top level directories that are not valid maildir folders but include maildir folders as root_folder of an account. --- melib/src/backends/maildir/backend.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/melib/src/backends/maildir/backend.rs b/melib/src/backends/maildir/backend.rs index f010c70c..a3004f57 100644 --- a/melib/src/backends/maildir/backend.rs +++ b/melib/src/backends/maildir/backend.rs @@ -37,7 +37,7 @@ use std::sync::mpsc::channel; //use std::sync::mpsc::sync_channel; //use std::sync::mpsc::SyncSender; //use std::time::Duration; -use fnv::{FnvHashMap, FnvHasher}; +use fnv::{FnvHashMap, FnvHashSet, FnvHasher}; use std::collections::hash_map::DefaultHasher; use std::ffi::OsStr; use std::fs; @@ -600,21 +600,14 @@ impl MaildirType { std::process::exit(1); } - match MaildirFolder::new( + if let Ok(f) = MaildirFolder::new( root_path.to_str().unwrap().to_string(), root_path.file_name().unwrap().to_str().unwrap().to_string(), None, Vec::with_capacity(0), settings, ) { - Ok(f) => { - folders.insert(f.hash, f); - } - Err(e) => { - eprint!("{}: ", settings.name()); - eprintln!("{}", e.to_string()); - std::process::exit(1); - } + folders.insert(f.hash, f); } if folders.is_empty() { @@ -633,6 +626,10 @@ impl MaildirType { folders.get_mut(&root_hash).map(|f| f.children = children); } folders.retain(|_, f| is_subscribed(f.path())); + let keys = folders.keys().cloned().collect::>(); + for f in folders.values_mut() { + f.children.retain(|c| keys.contains(c)); + } let hash_indexes = Arc::new(Mutex::new(FnvHashMap::with_capacity_and_hasher( folders.len(),