diff options
Diffstat (limited to 'melib/src')
-rw-r--r-- | melib/src/backends.rs | 14 | ||||
-rw-r--r-- | melib/src/backends/imap/folder.rs | 8 | ||||
-rw-r--r-- | melib/src/backends/imap/protocol_parser.rs | 7 | ||||
-rw-r--r-- | melib/src/backends/imap/watch.rs | 3 | ||||
-rw-r--r-- | melib/src/backends/maildir.rs | 7 | ||||
-rw-r--r-- | melib/src/backends/mbox.rs | 6 | ||||
-rw-r--r-- | melib/src/backends/notmuch.rs | 7 | ||||
-rw-r--r-- | melib/src/conf.rs | 4 | ||||
-rw-r--r-- | melib/src/lib.rs | 2 |
9 files changed, 50 insertions, 8 deletions
diff --git a/melib/src/backends.rs b/melib/src/backends.rs index 5f3149f4..aa433c70 100644 --- a/melib/src/backends.rs +++ b/melib/src/backends.rs @@ -339,7 +339,7 @@ impl BackendOp for ReadOnlyOp { } #[derive(Debug, Copy, Hash, Eq, Clone, Serialize, Deserialize, PartialEq)] -pub enum SpecialUseMailbox { +pub enum SpecialUsageMailbox { Normal, Inbox, Archive, @@ -350,6 +350,12 @@ pub enum SpecialUseMailbox { Trash, } +impl Default for SpecialUsageMailbox { + fn default() -> Self { + SpecialUsageMailbox::Normal + } +} + pub trait BackendFolder: Debug { fn hash(&self) -> FolderHash; fn name(&self) -> &str; @@ -359,7 +365,7 @@ pub trait BackendFolder: Debug { fn clone(&self) -> Folder; fn children(&self) -> &[FolderHash]; fn parent(&self) -> Option<FolderHash>; - + fn special_usage(&self) -> SpecialUsageMailbox; fn permissions(&self) -> FolderPermissions; } @@ -387,6 +393,10 @@ impl BackendFolder for DummyFolder { folder_default() } + fn special_usage(&self) -> SpecialUsageMailbox { + SpecialUsageMailbox::Normal + } + fn children(&self) -> &[FolderHash] { &self.v } diff --git a/melib/src/backends/imap/folder.rs b/melib/src/backends/imap/folder.rs index 5a0535ab..3ca20047 100644 --- a/melib/src/backends/imap/folder.rs +++ b/melib/src/backends/imap/folder.rs @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with meli. If not, see <http://www.gnu.org/licenses/>. */ -use crate::backends::{BackendFolder, Folder, FolderHash, FolderPermissions}; +use crate::backends::{BackendFolder, Folder, FolderHash, FolderPermissions, SpecialUsageMailbox}; use std::sync::{Arc, Mutex}; #[derive(Debug, Default, Clone)] @@ -28,6 +28,7 @@ pub struct ImapFolder { pub(super) name: String, pub(super) parent: Option<FolderHash>, pub(super) children: Vec<FolderHash>, + pub usage: SpecialUsageMailbox, pub no_select: bool, pub permissions: Arc<Mutex<FolderPermissions>>, @@ -62,12 +63,17 @@ impl BackendFolder for ImapFolder { name: self.name.clone(), parent: self.parent, children: self.children.clone(), + usage: self.usage, no_select: self.no_select, permissions: self.permissions.clone(), exists: self.exists.clone(), }) } + fn special_usage(&self) -> SpecialUsageMailbox { + self.usage + } + fn parent(&self) -> Option<FolderHash> { self.parent } diff --git a/melib/src/backends/imap/protocol_parser.rs b/melib/src/backends/imap/protocol_parser.rs index 9fa8b3bd..067ee279 100644 --- a/melib/src/backends/imap/protocol_parser.rs +++ b/melib/src/backends/imap/protocol_parser.rs @@ -89,8 +89,15 @@ named!( let mut f = ImapFolder::default(); f.no_select = false; for p in properties.split(|&b| b == b' ') { + use crate::backends::SpecialUsageMailbox; if p.eq_ignore_ascii_case(b"\\NoSelect") { f.no_select = true; + } else if p.eq_ignore_ascii_case(b"\\Sent") { + f.usage = SpecialUsageMailbox::Sent; + } else if p.eq_ignore_ascii_case(b"\\Junk") { + f.usage = SpecialUsageMailbox::Trash; + } else if p.eq_ignore_ascii_case(b"\\Drafts") { + f.usage = SpecialUsageMailbox::Drafts; } } f.hash = get_path_hash!(path); diff --git a/melib/src/backends/imap/watch.rs b/melib/src/backends/imap/watch.rs index df631f21..1a92f433 100644 --- a/melib/src/backends/imap/watch.rs +++ b/melib/src/backends/imap/watch.rs @@ -19,6 +19,7 @@ * along with meli. If not, see <http://www.gnu.org/licenses/>. */ use super::*; +use crate::backends::SpecialUsageMailbox; use std::sync::{Arc, Mutex, RwLock}; /// Arguments for IMAP watching functions @@ -123,7 +124,7 @@ pub fn idle(kit: ImapWatchKit) -> Result<()> { .read() .unwrap() .values() - .find(|f| f.parent.is_none() && f.path().eq_ignore_ascii_case("INBOX")) + .find(|f| f.parent.is_none() && (f.usage == SpecialUsageMailbox::Inbox)) .map(std::clone::Clone::clone) { Some(folder) => folder, diff --git a/melib/src/backends/maildir.rs b/melib/src/backends/maildir.rs index b2bbe5b6..177c86c2 100644 --- a/melib/src/backends/maildir.rs +++ b/melib/src/backends/maildir.rs @@ -176,6 +176,7 @@ pub struct MaildirFolder { path: PathBuf, parent: Option<FolderHash>, children: Vec<FolderHash>, + usage: SpecialUsageMailbox, permissions: FolderPermissions, } @@ -237,6 +238,7 @@ impl MaildirFolder { fs_path: pathbuf, parent, children, + usage: SpecialUsageMailbox::Normal, permissions: FolderPermissions { create_messages: !read_only, remove_messages: !read_only, @@ -300,11 +302,16 @@ impl BackendFolder for MaildirFolder { fs_path: self.fs_path.clone(), path: self.path.clone(), children: self.children.clone(), + usage: self.usage, parent: self.parent, permissions: self.permissions, }) } + fn special_usage(&self) -> SpecialUsageMailbox { + self.usage + } + fn parent(&self) -> Option<FolderHash> { self.parent } diff --git a/melib/src/backends/mbox.rs b/melib/src/backends/mbox.rs index a69e1010..f10674d4 100644 --- a/melib/src/backends/mbox.rs +++ b/melib/src/backends/mbox.rs @@ -28,7 +28,7 @@ use crate::backends::BackendOp; use crate::backends::FolderHash; use crate::backends::{ BackendFolder, Folder, FolderPermissions, MailBackend, RefreshEvent, RefreshEventConsumer, - RefreshEventKind, + RefreshEventKind, SpecialUsageMailbox, }; use crate::conf::AccountSettings; use crate::email::parser::BytesExt; @@ -128,6 +128,10 @@ impl BackendFolder for MboxFolder { self.parent } + fn special_usage(&self) -> SpecialUsageMailbox { + SpecialUsageMailbox::Normal + } + fn permissions(&self) -> FolderPermissions { self.permissions } diff --git a/melib/src/backends/notmuch.rs b/melib/src/backends/notmuch.rs index 70bac2b5..95582d2b 100644 --- a/melib/src/backends/notmuch.rs +++ b/melib/src/backends/notmuch.rs @@ -2,6 +2,7 @@ use crate::async_workers::{Async, AsyncBuilder, AsyncStatus, WorkContext}; use crate::backends::FolderHash; use crate::backends::{ BackendFolder, BackendOp, Folder, FolderPermissions, MailBackend, RefreshEventConsumer, + SpecialUsageMailbox, }; use crate::conf::AccountSettings; use crate::email::{Envelope, EnvelopeHash, Flag}; @@ -66,6 +67,7 @@ struct NotmuchFolder { parent: Option<FolderHash>, name: String, path: String, + usage: SpecialUsageMailbox, query_str: String, query: Option<*mut notmuch_query_t>, phantom: std::marker::PhantomData<&'static mut notmuch_query_t>, @@ -98,6 +100,10 @@ impl BackendFolder for NotmuchFolder { self.parent } + fn special_usage(&self) -> SpecialUsageMailbox { + self.usage + } + fn permissions(&self) -> FolderPermissions { FolderPermissions::default() } @@ -156,6 +162,7 @@ impl NotmuchDb { parent: None, query: None, query_str: query_str.to_string(), + usage: SpecialUsageMailbox::Normal, phantom: std::marker::PhantomData, }, ); diff --git a/melib/src/conf.rs b/melib/src/conf.rs index d5199213..6b5f8298 100644 --- a/melib/src/conf.rs +++ b/melib/src/conf.rs @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with meli. If not, see <http://www.gnu.org/licenses/>. */ -use crate::backends::SpecialUseMailbox; +use crate::backends::SpecialUsageMailbox; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::collections::HashMap; @@ -81,7 +81,7 @@ pub struct FolderConf { #[serde(deserialize_with = "toggleflag_de")] pub ignore: ToggleFlag, #[serde(default = "none")] - pub usage: Option<SpecialUseMailbox>, + pub usage: Option<SpecialUsageMailbox>, #[serde(flatten)] pub extra: HashMap<String, String>, } diff --git a/melib/src/lib.rs b/melib/src/lib.rs index 84361f1d..0ff5c75a 100644 --- a/melib/src/lib.rs +++ b/melib/src/lib.rs @@ -141,7 +141,7 @@ extern crate uuid; pub use crate::conf::*; pub use crate::mailbox::*; -pub use crate::backends::{Backends, RefreshEvent, RefreshEventConsumer, SpecialUseMailbox}; +pub use crate::backends::{Backends, RefreshEvent, RefreshEventConsumer, SpecialUsageMailbox}; pub use crate::email::{Envelope, Flag}; pub use crate::error::{MeliError, Result}; |