summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2019-09-20 09:22:11 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2019-09-20 10:26:08 +0300
commit93de60b6d1bbc0695e918d04e8dc949cb773a7d9 (patch)
treef2bba2413466fad14592e5fd6d5fb2b68fca2885
parentfb7b038ee1ab9b8b762890190a88eb324ecc92f8 (diff)
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.
-rw-r--r--melib/src/backends/maildir/backend.rs17
1 files 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::<FnvHashSet<FolderHash>>();
+ 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(),