From 9616fbb544b3322bae6ce990178cb443898033e1 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sat, 8 Feb 2020 13:42:05 +0200 Subject: [PATCH] melib/maildir: fix wrong subscription status in folders MaildirFolder::new() was checking for subscribed status though that is supposed to be done in MaildirType::new() --- melib/src/backends/maildir.rs | 40 ++++++--------------------- melib/src/backends/maildir/backend.rs | 8 +++--- 2 files changed, 13 insertions(+), 35 deletions(-) diff --git a/melib/src/backends/maildir.rs b/melib/src/backends/maildir.rs index a58d48af..9f3b6c16 100644 --- a/melib/src/backends/maildir.rs +++ b/melib/src/backends/maildir.rs @@ -192,42 +192,20 @@ impl MaildirFolder { children: Vec, settings: &AccountSettings, ) -> Result { - macro_rules! strip_slash { - ($v:expr) => { - if $v.ends_with("/") { - &$v[..$v.len() - 1] - } else { - $v - } - }; - } let pathbuf = PathBuf::from(&path); let mut h = DefaultHasher::new(); pathbuf.hash(&mut h); /* Check if folder path (Eg `INBOX/Lists/luddites`) is included in the subscribed * mailboxes in user configuration */ - let fname = if let Ok(fname) = pathbuf.strip_prefix( - PathBuf::from(&settings.root_folder) - .expand() - .parent() - .unwrap_or_else(|| &Path::new("/")), - ) { - if fname.components().count() != 0 - && !settings - .subscribed_folders - .iter() - .any(|x| x == strip_slash!(fname.to_str().unwrap())) - { - return Err(MeliError::new(format!( - "Folder with name `{}` is not included in configured subscribed mailboxes", - fname.display() - ))); - } - Some(fname) - } else { - None - }; + let fname = pathbuf + .strip_prefix( + PathBuf::from(&settings.root_folder) + .expand() + .parent() + .unwrap_or_else(|| &Path::new("/")), + ) + .ok(); let read_only = if let Ok(metadata) = std::fs::metadata(&pathbuf) { metadata.permissions().readonly() @@ -243,7 +221,7 @@ impl MaildirFolder { parent, children, usage: Arc::new(RwLock::new(SpecialUsageMailbox::Normal)), - is_subscribed: true, + is_subscribed: false, permissions: FolderPermissions { create_messages: !read_only, remove_messages: !read_only, diff --git a/melib/src/backends/maildir/backend.rs b/melib/src/backends/maildir/backend.rs index 829fcb3d..aa5d072d 100644 --- a/melib/src/backends/maildir/backend.rs +++ b/melib/src/backends/maildir/backend.rs @@ -718,7 +718,7 @@ impl MaildirType { ))); } let mut children = Vec::new(); - for mut f in fs::read_dir(p).unwrap() { + for mut f in fs::read_dir(&p).unwrap() { 'entries: for f in f.iter_mut() { { let path = f.path(); @@ -787,10 +787,10 @@ impl MaildirType { .count(); 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)); + if is_subscribed(f.path()) { + f.is_subscribed = true; + } } let mut hash_indexes =